Это является продолжением моего предыдущего вопроса:Как я могу анимировать круг с помощью PlayN?
How can I draw a circle to the screen with PlayN?
Для моего простого случая, я хочу программно создать единый цветной круг и переместить его по равнине 2-D (не нужно используйте box2d lib).
Пример в реальном мире, вероятно, предполагает оживление нескольких кругов. Два примера реального мира для этого случая (извините, мне пришлось удалить ссылки - не хватает кармы!):
- Browsmos для Chrome
- Ants 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? Или вы могли бы создать Immediate Layer для каждого круга и добавить их к корневому слою?
Давайте посмотрим, если я могу добавить пример ссылки здесь: [Browsmos] (HTTP: // html5games. com/2011/06/browsmos /), [Ant AI Challenge] (http://aichallenge.org/visualizer.php?game=346330) – klenwell