这是对我上一期提问的跟进:
How can I draw a circle to the screen with PlayN?
对于我的简单情况,我想以编程方式创建一个彩色圆圈并将其移动到二维平面(不需要使用box2d lib)。
一个真实的例子可能涉及动画几个圆圈。本案例的两个真实案例(抱歉,我不得不删除链接 - 不够业力!):
我在回答上一个问题时建议我想使用ImmediateLayer class,所以我希望了解如何将其正确地融入我的游戏循环中。
这是我的代码示例:
public class SimpleCircleAnimation implements Game {
// Surface
private GroupLayer rootLayer;
private ImmediateLayer surface;
private Canvas canvas;
private Circle circle;
private CanvasImage circleImage;
@Override
public void init() {
// create root layer
rootLayer = graphics().rootLayer();
// a simple circle object
int circleX = 0; int circleY = 0;
int circleRadius = 20;
circle = new Circle(circleX, circleY, circleRadius);
// create an immediate layer and add to root layer
ImmediateLayer circleLayer = graphics().createImmediateLayer(new ImmediateLayer.Renderer() {
public void render (Surface surf) {
circleImage = graphics().createImage(circle.radius*2, circle.radius*2);
canvas = circleImage.canvas();
canvas.setFillColor(0xff0000eb);
canvas.fillCircle(circle.radius, circle.radius, circle.radius);
surf.drawImage(circleImage, circle.x, circle.y);
}
});
rootLayer.add(circleLayer);
}
@Override
public void paint(float alpha) {
}
@Override
public void update(float delta) {
// move circle
int newX = circle.x + 4; int newY = circle.y + 4;
circle.setPoint(newX, newY);
}
@Override
public int updateRate() {
return 25;
}
}
这成功地从左到右沿着屏幕对角线移动圆圈。几个问题:
答案 0 :(得分:0)
我不会使用ImmediateLayer与渲染(Surface surf)适配器。你在这里创建了一个图像
circleImage = graphics().createImage(circle.radius*2, circle.radius*2);
把它放在paint方法
中surf.drawImage(circleImage, circle.x, circle.y);
使用普通图层,你应该没问题
绘画是用paint方法完成的,不要在那里进行计算 更新用于计算和面向物理的东西
答案 1 :(得分:0)
我在PlayN示例中的Cute Game源中发现了ImmediateLayer使用的详细实例: