2012-04-04 5 views
0

私は単純な例を作成しました。それは、背景サーフェスレイヤーと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と違うのですか?

答えて

1

塗装の呼び出しごとにサーフェスレイヤーを再描画する必要はありません。あなたが示したように、それを準備するときにのみ描画します。描画したテクスチャは、それ以上のアクションなしにフレームごとにレンダリングされます。

AndroidおよびHTMLバックエンドですべての表層を描画していない場合は、バグが存在する必要があります。私はあなたのテストを再現しようとすると、それが私のために動作するかどうかを確認しようとします。

ワンノート:画面のサイズが巨大なサーフェスを作成し、無地の色を描画するのは巨大なテクスチャメモリの無駄です。すべてのフレームでfillRect()を呼び出すImmediateLayerを作成するだけです。これは大量のスクリーンカバーテクスチャを作成するよりはるかに効率的です。

+0

あなたのようなテストをPlayNサーフェステストに追加し、Java、HTML、Androidでうまく動作します。だから多分何かが間違っている? http://speedy.sh/Q56mx/test-game.tar.gz 私はそれを起動します: – samskivert

+0

は今ここにテストゲームです MVNテストをクリーンインストール MVN -Ptest-HTML その後オープンはlocalhost: FFまたはChromeの8080 - 白い点が1つ付いた黒い画面が表示されます。 おそらくコードを見て、すぐにエラーを見つけることができますか?または自分のテストを分かち合い、自分自身で問題を理解することができます。 – user1312030

関連する問題