私は単純な例を作成しました。それは、背景サーフェスレイヤーと10個の小さな「ドット」(10個のサーフェスレイヤーが10x10pxの各レイヤーにfillRect()で色付けされています)です。 Paintメソッドは、単に周りに定期的にドットを移動します。HTMLとAndroidのバージョンは、私はすべてのこれらのドットを再描画する場合のみ、1すべてのフレームでSurfaceLayerを再描画する必要がありますか?
マニュアルははっきり言っていない描きながら
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のバージョンでは、すべてのドットを描きますすべてのpaint()呼び出しで。そして、私が知る限り、SurfaceLayerは、すべてのフレームでレイヤーを変更しない場合(つまり、同じバッファーを再利用できるようにする場合)に使用されますが、これは機能しません。
あなたは正しいSurfaceLayerの使用法を教えてくれますか? SurfaceLayerの四角形を塗りつぶしただけの場合は、このレイヤーを永遠にラミンゴにするか、ペイントコールごとに塗りつぶす必要がありますか?はいの場合 - これはImmeadiateLayerと違うのですか?
あなたのようなテストをPlayNサーフェステストに追加し、Java、HTML、Androidでうまく動作します。だから多分何かが間違っている? http://speedy.sh/Q56mx/test-game.tar.gz 私はそれを起動します: – samskivert
は今ここにテストゲームです MVNテストをクリーンインストール MVN -Ptest-HTML その後オープンはlocalhost: FFまたはChromeの8080 - 白い点が1つ付いた黒い画面が表示されます。 おそらくコードを見て、すぐにエラーを見つけることができますか?または自分のテストを分かち合い、自分自身で問題を理解することができます。 – user1312030