C# 将对象链接到列表以便以后手动编辑(游戏引擎/框架-实体管理部分)
首先你好,这是我第一次来这里。我是一名年轻的程序员(15岁),这是我第二次尝试制作一款游戏(实际上是整个可重用的游戏引擎和框架,不知道如何调用它,也许是GDK?),同时让它更有组织性 重要提示:我使用的是XNA框架,所以游戏引擎不是纯低级的DirectX管理!我正在尝试用预定义的类来扩展XNA,这些类将很容易插入到任何游戏中并在以后进行管理 我一直在寻找一种方法,将一个实体放入WorldManager的列表中,稍后检索该实体进行直接更改,然后将其放回列表中(因此它与Update方法一起使用) 我的想法(和问题)是:C# 将对象链接到列表以便以后手动编辑(游戏引擎/框架-实体管理部分),c#,entities,game-engine,C#,Entities,Game Engine,首先你好,这是我第一次来这里。我是一名年轻的程序员(15岁),这是我第二次尝试制作一款游戏(实际上是整个可重用的游戏引擎和框架,不知道如何调用它,也许是GDK?),同时让它更有组织性 重要提示:我使用的是XNA框架,所以游戏引擎不是纯低级的DirectX管理!我正在尝试用预定义的类来扩展XNA,这些类将很容易插入到任何游戏中并在以后进行管理 我一直在寻找一种方法,将一个实体放入WorldManager的列表中,稍后检索该实体进行直接更改,然后将其放回列表中(因此它与Update方法一起使用) 我
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.
}
...
}
}
公共类WorldManager
{
列表实体=新列表();
列表添加实体=新列表();
List ToRemove_Entities=新建列表();
...
公共无效更新()
{
对于(int count=0;count
我将如何访问它:
List<Entity> bots = WorldManager.GetEntitiesByName("bot");
bots[1].Location = new Vector2(x,y);
WorldManager.UpdateEntities(bots);
List bots=WorldManager.GetEntitiesByName(“bot”);
机器人[1]。位置=新矢量2(x,y);
WorldManager.UpdateEntities(机器人程序);
我不使用那段代码,那只是我想法的一个简单例子
请原谅我的英语令人困惑(如果你觉得困惑的话),我是塞尔维亚人
提前感谢。我建议不要使用“每个对象都在一个大列表中”的方法。而是关注引擎中的输入、图形和其他基本内容,然后将其余内容留给特定于游戏的类 假设你有一个2D世界,里面有很多树,它们大部分都是静态的。现在您的实体列表中有5千个实体,它们什么都不做,而不是放在那里,您应该将它们放在Map类中的某个列表中,这样它们更容易访问(您不必遍历整个列表来找到它们),并且设计也变得更干净。通过这种方式,您不必编写整个类的通用处理程序代码,而这些代码最终仍然不适合您可能扔进您的世界中的每个对象 因此,我这边的3条建议是: -仅将非游戏特定代码放入引擎(图形、声音、输入) -从引擎中只调用游戏中的两个方法,例如updateGame()和renderGame(),然后再调用其余的方法 -最后但并非最不重要的一点是:将游戏的组件与其他组件分开,只让它们在真正需要的地方进行交互 同样重要的是,构建一些游戏,然后查看它们真正共享的代码,并从这些代码中形成引擎
如果你想要一个例子来说明如何做到这一点(尽管我不能保证它是完美的),你可以看看我的小引擎。它是Java,不是很好,但它应该给你一个如何构造引擎的基本概念。如果你想看我用这个引擎制作的游戏,请看下载部分。好吧,我已经找到了关于我最顶级解决方案的答案!是从我的另一个问题上得到的,我想我也应该把答案放在这里 答案是,只要我将其添加到列表中,它就已经链接,因为实体是一个类,它的对象是“引用类型”,所以当我将它们指定给其他对象或列表时,它们就链接到它。我对该对象所做的任何更改都会在另一侧自动更新
(如果我错了,请有人纠正我。我将在测试我的框架/引擎后立即检查此问题,并让您知道这是“解决方案”)在您编写七个游戏之前,您还没有足够的知识来编写可重用的游戏引擎。首先专注于编写一个游戏:)你是对的,但我并不是一个人在工作(事实上我很难),但我要为另一个游戏重新编写所有代码,这对我来说太难了!我还写了那七个游戏,不幸的是没有一个游戏完成,因为设计有缺陷。关键是要做一个真正的框架!很抱歉我写错了。这是一种很好的想法,但我错了,我想告诉大家我正在制作整个框架。事实上,我的问题需要直截了当的答案。为什么?因为我的游戏实际上是简单的自上而下的2D游戏,所以不会有任何