有没有人能帮我让它运行起来?我的目标是成为一个定制的演员。(我最近几天才开始使用Vala,而Clutter也是个谜。)
drawme方法正在运行(当invalidate被调用时),但似乎没有发生任何绘制(通过Cairo上下文)。
ETA:我在构造函数中添加了一行来显示fix - this.set_size。
/*
Working from the sample code at:
https://developer.gnome.org/clutter/stable/ClutterCanvas.html
*/
public class AnActor : Clutter.Actor {
public Clutter.Canvas canvas;
public AnActor() {
canvas = new Clutter.Canvas();
canvas.set_size(300,300);
this.set_content( canvas );
this.set_size(300,300);
//Connect to the draw signal.
canvas.draw.connect(drawme);
}
private bool drawme( Cairo.Context ctx, int w, int h) {
stdout.printf("Just to test this ran at all: %d\n", w);
ctx.scale(w,h);
ctx.set_source_rgb(0,0,0);
//Rect doesn't draw.
//ctx.rectangle(0,0,200,200);
//ctx.fill();
//paint doesn't draw.
ctx.paint();
return true;
}
}
int main(string [] args) {
// Start clutter.
var result = Clutter.init(ref args);
if (result != Clutter.InitError.SUCCESS) {
stderr.printf("Error: %s\n", result.to_string());
return 1;
}
var stage = Clutter.Stage.get_default();
stage.destroy.connect(Clutter.main_quit);
//Make my custom Actor:
var a = new AnActor();
//This is dodgy:
stage.add_child(a);
//This works:
var r1 = new Clutter.Rectangle();
r1.width = 50;
r1.height = 50;
r1.color = Clutter.Color.from_string("rgb(255, 0, 0)");
stage.add_child(r1);
a.canvas.invalidate();
stage.show_all();
Clutter.main();
return 0;
}发布于 2013-04-10 18:19:44
您还需要为Actor分配一个大小,而不仅仅是画布。
画布的大小与画布分配到的执行元的大小无关,因为您可以将同一画布实例分配给多个执行元。
如果你打电话给:
a.set_size(300, 300)您将看到参与者和绘图结果。
https://git.gnome.org/browse/clutter/tree/examples/canvas.c还附带了各种示例,例如如何使用Cairo:https://git.gnome.org/browse/clutter/tree/examples/rounded-rectangle.c制作圆角矩形,或者如何制作一个简单的时钟: Clutter
https://stackoverflow.com/questions/15920816
复制相似问题