我创建了一个简单的示例:背景表面层和上面的 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 有什么不同?