PlayN を使用して Android でゲームをスムーズに実行しようとしていますが、すべてが期待どおりに動作しますが、フレームレートが非常に低くなります。私は間違った方法でやっているかもしれないと思うので、誰かが私に助けを与えることができれば素晴らしいと思います:D.
そのため、現在 ImmediateLayer を作成してクリーニングし、すべてのフレームですべてのオブジェクトを描画しています。画像は、graphics.getImage(...) を使用して 1 回読み込まれます。HTC Desire (デバッグ モードで接続) で約 100 fps を取得しながら、約 100 枚の画像を描画します。オブジェクトを追加すると遅くなります。私が本当に間違ったことをしていると思うのは、PlayN がこれらのメッセージでログをスパムしている (私は DDMS を使用してログをチェックしている) ことです。
X テクスチャが残っています
Y 作成されたテクスチャ
1秒間に約20回出現します。
だから基本的に私はこのようなことをしています:
public void draw(Surface s){
for (Drawable d : toDraw) {
surface.drawImage(d.getImage(), d.x, d.y, d.w, d.h); }}
immediateLayer のレンダラーで draw が呼び出される場所。
お時間をいただきありがとうございます!
ルーカス
編集: playnメーリングリストでそのスレッドを読んで、可能な答えを見つけました。 https://groups.google.com/forum/?fromgroups#!topic/playn/XJTlBgmfzaQ
特にそのメッセージ
ほとんどのタイルは同じ画像を共有していますが、その部分は異なります(私の知る限り、コピーではなく、画像のサブ部分への参照を作成するだけの subImage によって取得されますか?)。異なるサブパーツはテクスチャの変化を引き起こしますか?
サブイメージは同じテクスチャを共有しますが、同じテクスチャを共有するすべてのイメージを一緒にレンダリングする必要があります。イメージ A からのサブイメージの束とイメージ B からのサブ イメージの束があり、A、B、A、B、A、B、A、B をレンダリングすると、8 つの異なるイメージをレンダリングした場合と同じパフォーマンスが得られます。A、A、A、A、B、B、B、B をレンダリングする必要があります。
私は最悪のシナリオにあるようです。
私は多くの異なるテクスチャ (たとえば 50) を持っています。それらはすべて異なる画像の一部であり、すべてランダムにレンダリングされます。N テクスチャ スイッチに近いものになる可能性があります。ここで、N はレンダリングするオブジェクトの数です。
何か動作するようになったら、これを更新します:)。
編集2:
現在、同じ画像を指す 100 個のオブジェクトをレンダリングしています (つまり、テクスチャ スワップはありませんか?)。私はまだAndroidで約10 fpsを取得しており、デバッグログはまだ各フレームで言っています:
1 つのテクスチャが残ります 2 つのテクスチャが作成されます
何か重要なものが欠けているような気がします...助けてください:)。