web-dev-qa-db-ja.com

Java rtsゲーム開発へのこのインデックス付きアプローチは有効ですか?どうすればそれを改善できますか?

基本的にプレーヤーの配列、GameStateArray、および保存から保存まで永続化する必要がある他のいくつかのフィールドを保持するために、クラスStarSystemsがレイアウトされています。各GameObjectは、自身のIDを追跡します。これは、配列内のインデックスであり、関連するゲームオブジェクトのIDでもあります。

_public class GameState implements Json.Serializable
{
    private Array<StarSystem> systems;
    private Array<Player> players;

    //Methods used to access data and some utilities
}
_

StarSystemの各GameStateには、ArrayPlanetと1つまたは3つの星が格納され、温度と居住性に関する情報が保持されます。クラススターは惑星から伸びており、生息性は0です。 StarSystemクラスには、システムに存在するすべてのフリートとその所有者への参照もあります。 Fleetクラスは、フリートにあるShipインスタンスのリストと、各Shipの関連情報を保持します。

このシステムを設計した理由は2つあります。

  1. すべてのオブジェクトを個別に保存するのではなく、ゲームを保存するときに1回だけ `Json.toJson(Object)`を呼び出せるようにしたかったのです。
  2. これ以前は、私のコードは非常に整理されておらず、コード全体に散らばっているさまざまなものへの奇妙な参照がありました。これはよりきれいです。

残念ながら、これによりFPSも35-40から20-25に低下しました。これにより、私は気分を害し、おそらくすべてのユーザーも気分を害するでしょう。言い換えれば、私はこのデザインをどのように改善できるかを尋ねています。

注:インデックス付きの性質は、_Planet.ProductionQueue_が新しいFighterFleet SomeFleet of Player Aに追加するには、最初にGameInstance.getInstance().getState().getSystem(parent_system).getFleet(fleet_target_id).addShip(new Fighter(owner_id, getLeastPowerfulCommandShip().getID()))を呼び出す必要があることを意味します。

私もlibGdxを使用しており、私が話したJsonクラスはライブラリの一部であることに注意してください。

2
JDSweetBeat

問題はゲームの階層ではなく、リクエストごとに階層全体を降順にしていることです。

プレイヤーは一度に1つのシステムを見て、プレイヤーは艦隊を「選択」して戦闘機を追加すると思います。

したがって、ローカル変数を格納します。StarSystem current、およびFleet selectedプレイヤーが現在のフリート/スターシステムを変更したときに、これらの変数を更新します。オブジェクトにアクセスするために階層全体を降順にする必要はありません。

注:選択したオブジェクトはまだ前述のデータ構造に格納されている必要があります。

3
Nathan Merrill