首先你好,这是我第一次来这里。我是一名年轻的程序员(15 岁),这是我第二次尝试制作游戏(实际上是整个可重用的游戏引擎和框架,不知道如何称呼它,也许是 GDK?),而这次让它更有条理。
重要提示:我使用的是 XNA 框架,所以游戏引擎不是纯粹的低级 DirectX 管理!我正在尝试使用预定义的类来扩展 XNA,这些类很容易插入到任何游戏中并在以后进行管理!
我一直在寻找一种方法将实体放入 WorldManager 的列表中,然后检索实体以进行直接更改,然后将其放回列表中(因此它与 Update 方法一起使用)。
我的想法(和问题)是:
最好的解决方案是以某种方式使实体与列表链接,因此当我更新它在列表中更新的唯一实体对象时。不幸的是,我不知道该怎么做,这可能是最好的答案。
我还想到的是先编辑我创建的实体,然后使用find在列表中查找并更新。问题是我不确定 find 方法是如何搜索的。如果任何更改都可以使方法认为它是一个全新的不同对象怎么办?(find 是如何找到的?)
我所做的是在将实体添加到列表的那一刻将 ID 添加到实体,这样我可以在编辑后将它们放回原处。问题是我也有 remove 方法,我不确定它是否会更改索引,因为如果会,那么我每次删除实体时都必须重新更新 ID。我觉得效率很低。那么 List<>.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);
我不使用那段代码,这只是我想法的一个简单示例。
请原谅我令人困惑的英语(如果您觉得它令人困惑),我是塞尔维亚人。
提前致谢。