首先你好,這是我第一次來這裏。我是年輕的編碼器(15),這是我第二次嘗試製作一款遊戲(實際上是整個可重用遊戲引擎和框架,不知道如何稱呼它,也許是GDK?),而這次使它更有組織性。將對象鏈接到列表以供以後手動編輯(遊戲引擎/框架 - 實體管理部分)
重要提示:我使用的是XNA框架,所以遊戲引擎並不是純粹的低級DirectX管理!我試圖用預定義的類來擴展XNA,這些類將很容易插入任何遊戲並稍後管理!
我被困在找到一種方法將實體放入WorldManager的列表中,稍後檢索實體以進行直接更改,然後將其放回列表中(所以它與Update方法一起使用)。
我的想法(和問題)是:
最佳可能的解決方案以某種方式使與列表鏈接的實體,所以我更新列表更新過孤獨的實體對象。不幸的是我不知道該怎麼做,這可能是最好的答案。
我還想過的是編輯我創建的實體,然後使用find在列表中查找並更新。問題是我不確定find方法如何搜索。如果有任何改變會使方法認爲它是一個全新的不同物體呢? (如何找到實際發現?)
我所做的是在添加到實體時將實體添加到列表中,以便在編輯後將它們放回原位。問題是我也有刪除方法,我不確定它是否會更改索引,因爲如果它會那麼我每次刪除實體時都必須重新更新ID。我發現效率很低。那麼列表<> .Remove改變索引? (我猜它會)
這些其實都是在一個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);
我不使用這段代碼,這只是一個我的想法的簡單例子。
請原諒我混淆的英語(如果您覺得困惑),我是塞爾維亞人。
在此先感謝。
你之前」已經寫了七場比賽,你真的不知道寫一個可重用的遊戲引擎。專注於先編寫一個遊戲:) – Andomar 2010-01-16 13:02:58
你是對的,但我並不是真的一個人工作(實際上我很難),但是爲了另一個遊戲再次編寫所有的代碼對我來說太過分了!我還寫了那七場比賽,不幸的是這些比賽都沒有完成,因爲有缺陷的設計。關鍵是要製造一個框架!抱歉,我寫錯了。 – Johnny 2010-01-16 18:01:23