まず、こんにちは、これが私の初めてです。私は若いコーダー(15)であり、今回はゲームをさらに整理しながら、ゲーム(実際には、再利用可能なゲームエンジンとフレームワーク全体、呼び出し方法がわからない、多分GDK?)を作成する2回目の試みです。
重要な注意:私はXNAフレームワークを使用しているため、ゲームエンジンは純粋に低レベルのDirectX管理ではありません。事前定義されたクラスでXNAを拡張しようとしています。これにより、どのゲームにも簡単に挿入して、後で管理できるようになります。
エンティティをWorldManagerのリストに入れ、後で直接変更するためにエンティティを取得して、リストに戻す方法を見つけるのに行き詰まりました(したがって、Updateメソッドで使用されます)。
私のアイデア(および質問)は次のとおりです。
考えられる最善の解決策は、エンティティをリストにリンクさせることです。これにより、唯一のエンティティオブジェクトを更新すると、リスト内でも更新されます。残念ながら、私はそれを行う方法がわかりません、そしてこれは最良の答えかもしれません。
また、最初に作成したエンティティを編集してから、findを使用してリストで検索して更新することも考えました。問題は、findメソッドがどのように検索するかわからないことです。何か変更を加えると、メソッドがまったく新しい別のオブジェクトであると見なすことができるとしたらどうでしょうか。(findは実際にどのように検索しますか?)
私が行ったのは、IDをリストに追加した瞬間にエンティティに追加して、編集後に元の場所に戻すことができるようにすることでした。問題は、removeメソッドもあることです。インデックスを変更する場合は、エンティティを削除するたびにIDを再更新する必要があるため、インデックスが変更されるかどうかはわかりません。それは非常に非効率的だと思います。では、List <>。Removeはインデックスを変更しますか?(私はそうなると思います)
これらは実際には1つに3つの質問があり、これらのいずれかに答えていただければ幸いです。もちろん、一番上の質問への回答はもっと高く評価されます。
すべてがどのように機能するかを理解するためのコード:
public class WorldManager
{
List<Entity> Entities = new List<Entity>();
List<Entity> ToAdd_Entities = new List<Entity>();
List<Entity> ToRemove_Entities = new List<Entity>();
...
public void Update()
{
for(int count = 0; count < ToAdd_Entities.Count; count++)
{
Entities.Add(ToAdd_Entities[count]);
int index = Entities.IndexOf(ToAdd_Entities[count]);
Entities[index].ID = index;
ToAdd_Entities.Remove(ToAdd_Entities[count]);
}
for (int count = 0; count < ToRemove_Entities.Count; count++)
{
Entities.Remove(ToRemove_Entities[count]);
ToAdd_Entities.Remove(ToAdd_Entities[count]);
//index update is required here too, I just didn't implement it yet.
}
...
}
}
どのようにアクセスしますか:
List<Entity> bots = WorldManager.GetEntitiesByName("bot");
bots[1].Location = new Vector2(x,y);
WorldManager.UpdateEntities(bots);
私はそのコードを使用しません。これは私の考えの単なる例です。
私の紛らわしい英語を許してください(あなたがそれを紛らわしいと思うなら)、私はセルビア人です。
前もって感謝します。