這是一個後續行動,我的最後一個問題:如何使用PlayN爲一個圓圈設置動畫?
How can I draw a circle to the screen with PlayN?
對於我的簡單的情況下,我想以編程方式創建一個單一的彩色圓圈和移動它在一個2-d平原(不需要使用box2d lib)。
一個真實世界的例子可能涉及動畫幾個圈子。這種情況下,兩個真實的例子(對不起,我不得不刪除鏈接 - 沒有足夠的因果報應!):
- Browsmos爲Chrome
- 螞蟻AI挑戰
這是爲迴應我的最後一個問題而提出的建議,我想使用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;
}
}
這成功地移動一圈下來對角線屏幕從左至右。幾個問題:
- 這是否正確實施?
- 對於多個動畫圓的情況,ImmediateLayer的想法是,您將爲Renderer回調中的每個圓創建一個圓形圖像?或者你可能會爲每個圓圈創建一個立即圖層並將它們添加到根層?
讓我們來看看,如果我可以在這裏添加的例子鏈接:[Browsmos(HTTP:// html5games。 com/2011/06/browsmos /),[Ant AI Challenge](http://aichallenge.org/visualizer.php?game=346330) – klenwell 2012-02-29 04:09:58