簡単な例を作成しました: 背景の表面レイヤーとその上の 10 個の小さな「ドット」(それぞれが fillRect() を介して色で塗りつぶされた 10x10 ピクセルの 10 個の表面レイヤー)。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 で四角形を塗りつぶしただけの場合、このレイヤーで永遠にラミンになりますか、それとも各ペイント呼び出しで塗りつぶす必要がありますか? はいの場合 - これは ImmadiateLayer とは異なりますか?