私は単純な太陽系シミュレーターを書いています。これは私の最初の libgdx プロジェクトです。私はメイン メニューに Stage と Actors を使用しており、特にタッチ イベントの処理に非常に便利です。しかし...例を見ると、実際のゲームロジックでアクターを使用している人は誰もいません。アクターを惑星クラスの親として使用するか、それとも独自のクラスを作成するかを迷っています。惑星は触れることができず、フレーム間でのみ移動するため、アクション MoveBy の 3 番目のパラメーターはフレーム間の時間である必要があります。それが短所です。アクターを使用する利点は何ですか?
1 に答える
アクターの主な長所は、アクション、ヒット テストとタッチ イベント、およびアクターのグループです。
ゲーム ロジックでトゥイーンが必要な場合は、アクションを使用するとすばやく簡単にトゥイーンできます。
いつでも stage.hit(x, y) を呼び出して、作成したヒット ロジックに true を返す最初のアクターを返すことができます (通常は、x、y、幅、高さで境界をチェックします)。このアクターまたは null を返して、ヒット アクターを探してアクターのヒット メソッドを反復し続けます。アクターがヒットしない場合は null が返されます。
Hit は、ステージのタッチ イベントに使用されます。アクターの touch メソッドにはローカル座標が渡され、Stage はオブジェクトのオーバーラップを処理します。たとえば、あるアクターが別のアクターを覆って、他のアクターが touchDown を受け取らないようにする場合、カバーしているアクターで true を返して、アクターでの touchDown の呼び出しを停止します。下"。これにより、true を返すアクターに「フォーカス」が設定され、アクターの touchUp が呼び出されるようになります。
アクターをグループ化して、アクターのグループ全体で単一のユニットとしてアクション、タッチ イベントなどを実行できます。
いくつかの短所: アクターには、機能を多少制限するステージが必要です。多くのコーダーは、scene2d アクション (box2d など) ではなく、他のロジックを使用してゲーム オブジェクトの状態を判断します。ゲーム オブジェクトにアクタを使用する場合、UI 用とゲーム ワールド用の 2 つのステージが必要になるでしょう。それらを使用しない場合でも、おそらく独自の SpriteBatch と Camera を使用することになります。また、アクタには抽象的な Draw メソッドしかないため、とにかく描画ロジックを作成する必要があることに注意してください。おそらく、アクタのプライベート フィールドとして TextureRegion または Sprite を保持するでしょう。独自の更新ロジックを使用する場合は、act(float delta) メソッドをオーバーライドしてデルタ時間を取得できます (アクションを使用する場合は super.act(delta) を呼び出します)。
したがって、独自のロジックがあり、Stage が提供するものをあまり使用しない場合は、リソースを節約して独自のアプリケーション固有のソリューションを展開してください。必要な機能を制限することなくいくつかの長所を使用できる場合は、ゲーム ロジックの 2 番目のステージに進みます。