3

iOS と Windows Phone から Android にゲームを移植しています。ポート用に私がフォローしているコードのほとんどは、Java に最も似ているという理由だけで、Windows Phone バージョンのものです。私の質問は、LibGDX の OrthographicCamera クラスに関するものです。

このゲームのコンポーネント コンテナ メソッドとしてゲーム オブジェクトを使用しています。これについては、http: //cowboyprogramming.com/2007/01/05/evolve-your-heirachy/で読むことができます 。したがって、ゲーム内のほとんどすべてが Component コンポーネント クラスを拡張します。そして、各ゲーム オブジェクト、つまりボールは、Sprite、RigidBody (物理演算用)、Transform2 (位置、回転など) などのコンポーネントで構成される GameObject です。これには、OrthographicCamera メンバーをラップする Camera2 クラスが含まれます。

私には2つの問題があり、それを際限なく研究しています。レイヤリングの仕方がわかりません。ゲームには引き出しがあり、ユーザーは下にスワイプしてドラッグして開くことができます。これは、ゲーム内の他のものの上にある必要があります。XNA バージョンの開発者がこれを達成した方法は、複数の SpriteBatch を用意し、本質的に各 SpriteBatch をレイヤーとして扱うことでした。これは LibGDX では機能せず、複数の SpriteBatches を使用するのは悪い習慣です。問題は、ゲーム オブジェクトがツリーとして編成され、ツリーのトラバーサルに従ってレンダリングされるため、オブジェクトがツリーに挿入された時点に基づいて順序付けが行われることです。Zオーダーを使用できるようにDecalBatchを調べましたが、ゲームがほぼ完成しているため、リファクタリングの割り当てが必要になります。

これはすでに長い投稿なので、別の投稿で 2 番目の問題を質問します。

4

1 に答える 1

5

私はこれを理解しました。LibGDX の Mario にメッセージを送信したところ、オブジェクトをレンダリングする直前にソートするよう提案されました。ツリー内にあるため、これを行う方法がよくわかりませんでした。ツリーをソートする方法は知っていますが、順序付けはありません。レイヤー用のフィールドを追加し、GameObject クラスに Comparable を実装させました。次に、ビジター パターンの accept メソッドで、すべてのノードの子をレイヤーに従って並べ替えました。現在、完全に機能しています。

于 2012-08-09T14:29:30.663 に答える