私はゲームの開発の初期段階にあります。画像を使用して、より大きな画像の一部を表面に描画することでアニメーションを作成しています。コード例を次に示します。
void drawNextFrame() {
//surf.canvas().clear();
surf.clear();
float startX = entity.flipH ? entity.width : 0;
float endX = entity.flipH ? -entity.width : entity.width;
float width = entity.width;
float height = entity.height;
//surf.canvas().drawImage(image, 0, 0,
surf.drawImage(image, 0, 0,
width, height,
(width * curFrame) + startX, 0,
endX, height);
}
surf
は のサーフェスで、SurfaceLayer
はimage
アセットImage
です。このゲームの Java バージョンは素晴らしく動作し、スムーズで応答性が高く、フレームの欠落やレンダリングの問題はありません。私は HTML バージョンに問題がありますが、動きが鈍く、アニメーションで多くのフレームがドロップされます。たとえば、ループするプレーヤーの実行アニメーションがあります。HTML バージョンは、プレーヤーが空白になる前にアニメーションを 1 回しか再生しないようです。他のアニメーションをジャンプまたはトリガーすると修正されるため、実行アニメーションを再度再生できますが、キャラクターを空白にする前に、アニメーション ループの 1 回の反復を過ぎても再生されません。また、一貫して発砲することにも問題がsurf.clear()
あり、フレームが互いに重なり合うことがあります。
フレームの描画が速すぎないように、あらゆる種類のデバッグを行いました。paint() メソッドには触れていません。に切り替えてみましたSurfaceLayer
がCanvasLayer
、発生していたレンダリングの問題の種類と発生時期に関して動作が少し変わったように見えましたが、それでも非常にプレイできない経験でした. さらに、たとえば、プレーヤーが後ろを向いている場合、自分の画像の鏡像を作成できませんでした。上記の Canvas バージョンのコメント アウトされたコードを含めました。この場合surf
は のインスタンスですCanvasImage
。それが違いを生む場合、これらのアニメーションの描画に加えて、Box2D を使用しています。
私の質問は次のとおりです。これは正常ですか?この種の問題を抱えているのは私だけで、回避策を見つけた人はいますか? 私は何か間違ったことをしていないこと、そして私が取っているアプローチが有効であることを確認したいだけです.
PlayN の 1.2 ブランチを備えたかなり最新のマシンで Chrome をテストしています。次のコマンドを使用して、Maven を介してコマンド ラインからプロジェクトの HTML バージョンをビルドしてテストします。
mvn clean
mvn install
mvn test -Ptest-html
次に、Chrome でhttp://localhost:8080にアクセスします。
私が実行している追加の問題は、ページを更新してもゲームが常にリロードされるとは限らないことです。AssetWatcher を実装して、開始前にすべてが利用可能であることを確認し、通常はブラウザーのキャッシュをクリアして Chrome を再起動した後に一度だけ動作するようにしました。通常、キャッシュをクリアするプロセスを繰り返し、ブラウザを再起動して再度テストする必要があります。
多くのコードを提供せずに多くの質問をしていることはわかっていますが、オンラインの SVN リポジトリにすべてがあり、喜んで見てくれる人に喜んで公開します。
どんな助けでも大歓迎です!お時間をいただきありがとうございます!