Я создал простой пример: фоновый поверхностный слой и 10 маленьких «точек» на нем (10 поверхностных слоев 10x10 пикселей, каждый из которых заполнен цветом с помощью fillRect()). Метод Paint просто периодически перемещает точки:
private SurfaceLayer background;
private List<Layer> dots = new ArrayList<Layer>();
@Override
public void init()
{
background = graphics().createSurfaceLayer(graphics().width(), graphics().height());
background.surface().setFillColor(Color.rgb(100, 100, 100));
background.surface().fillRect(0, 0, graphics().width(), graphics().height());
graphics().rootLayer().add(background);
for (int i = 0; i < 10; i++)
{
SurfaceLayer dot = graphics().createSurfaceLayer(10, 10);
dot.surface().clear();
dot.surface().setFillColor(Color.rgb(250, 250, 250));
dot.surface().fillRect(0, 0, 10, 10);
dot.setDepth(1);
dot.setTranslation(random()*graphics().width(), random()*graphics().height());
dots.add(dot);
graphics().rootLayer().add(dot);
}
}
@Override
public void paint(float alpha)
{
for (Layer dot : dots)
{
if (random() > 0.999)
{
dot.setTranslation(random()*graphics().width(), random()*graphics().height());
}
}
}
Каким-то образом java-версия рисует все точки, а html и Android-версия рисуют только 1.
В руководстве четко не сказано, должен ли я перерисовывать все эти точки при каждом вызове paint(). Насколько я понял, SurfaceLayer предназначен для случаев, когда вы не изменяете слой на каждом кадре (то есть можно повторно использовать один и тот же буфер?), но это не работает.
Итак, вы, ребята, можете помочь мне с правильным использованием SurfaceLayer? Если бы я просто заполнил прямоугольник на SurfaceLayer - он остался бы на этом слое навсегда или я должен заполнять его при каждом вызове рисования? Если да - отличается ли он от ImmeadiateLayer?