首先你好,这是我第一次来这里。我是年轻的编码器(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