Это продолжение моего последнего вопроса:
Как нарисовать круг на экране с помощью PlayN?
В моем простом случае я хочу программно создать один цветной круг и переместить его по двухмерной плоскости (не нужно использовать box2d lib).
Пример из реальной жизни, вероятно, включает анимацию нескольких кругов Два реальных примера для этого случая ( извините, мне пришлось удалить ссылки - недостаточно кармы! ):
- Browsmos для Chrome
- Ants AI Challenge
В ответ на мой последний вопрос было предложено использовать класс ImmediateLayer , поэтому я хочу понять, как правильно включить это в мой игровой цикл.
Вот мой пример кода:
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, что вы создадите изображение круга для каждого круга в обратном вызове рендерера? Или вы могли бы создать Немедленный слой для каждого круга и добавить их в корневой слой?