基本的にプレーヤーの配列、GameState
のArray
、および保存から保存まで永続化する必要がある他のいくつかのフィールドを保持するために、クラス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
には、Array
のPlanet
と1つまたは3つの星が格納され、温度と居住性に関する情報が保持されます。クラススターは惑星から伸びており、生息性は0です。 StarSystem
クラスには、システムに存在するすべてのフリートとその所有者への参照もあります。 Fleet
クラスは、フリートにあるShipインスタンスのリストと、各Shipの関連情報を保持します。
このシステムを設計した理由は2つあります。
残念ながら、これによりFPSも35-40から20-25に低下しました。これにより、私は気分を害し、おそらくすべてのユーザーも気分を害するでしょう。言い換えれば、私はこのデザインをどのように改善できるかを尋ねています。
注:インデックス付きの性質は、_Planet.ProductionQueue
_が新しいFighter
をFleet
SomeFleet of Player
Aに追加するには、最初にGameInstance.getInstance().getState().getSystem(parent_system).getFleet(fleet_target_id).addShip(new Fighter(owner_id, getLeastPowerfulCommandShip().getID()))
を呼び出す必要があることを意味します。
私もlibGdxを使用しており、私が話したJsonクラスはライブラリの一部であることに注意してください。
問題はゲームの階層ではなく、リクエストごとに階層全体を降順にしていることです。
プレイヤーは一度に1つのシステムを見て、プレイヤーは艦隊を「選択」して戦闘機を追加すると思います。
したがって、ローカル変数を格納します。StarSystem current
、およびFleet selected
プレイヤーが現在のフリート/スターシステムを変更したときに、これらの変数を更新します。オブジェクトにアクセスするために階層全体を降順にする必要はありません。
注:選択したオブジェクトはまだ前述のデータ構造に格納されている必要があります。