Articles of 体系结构

我应该如何构建我的代码来添加敌人?

所以我目前正在制作一个1942年的Sprite Kit游戏。 我已经达到了完成几乎所有事情的地步(移动,射击(也承认击中和爆炸物体),菜单等等)..期待敌人。 由于我在编程方面没有那么丰富的经验,所以我不太清楚应该如何执行我的敌人。 我想在我的游戏中有不同的敌人“class级”(他们有不同的外观/武器等),我也希望游戏能够随着时间的推移在游戏中产生更强大的class级。 (例如:在比赛开始时,有一个绿色的敌人,一次性武器,3分钟,他们应该是红色,火两枪) 我应该如何编码我的敌人? 我应该做不同的类(我现在正在考虑的),还是应该用string声明它们,或者使用.plist文件来做属性? (在一个侧面的节点上:我如何从场景代码中访问我的plist属性?) 你有关于敌人/类/ plist文件的其他技巧吗? 或者..有没有其他方式专门在Sprite Kit做这种东西?

游戏对象之间的相互作用

我正在编写一个基本的Pacman克隆来教自己游戏编程。 然而,我正在努力争取让游戏对象沟通/互动的最佳方式,而不会让我的代码变得一团糟。 现在,我有一个堆栈(实现为列表)的对象在我的基类游戏类。 这些对象包括Graphics,Input等组件以及Map,Pacman等“实际对象”。在运行游戏时,Game类循环遍历所有对象,并更新想要更新的对象并画出想要画的那些。 但是,这些对象显然必须互动。 我在对象上实现了一个链接function,允许一个对象与另一个对象“链接”。 即它给一个类指向另一个类,所以交互可以发生。 例如,Pacman类可以使用Link来给出一个指向Map类的指针,这样Pacman可以决定它是否可以在某个方向上移动。 像Pacman这样简单的游戏,这个结构可能不会太难保持,但是游戏中有很多交互对象,我怀疑代码会失控。 我正在使用的方法现在好吗,还是应该看另一个对象通信的实现? 如果是这样,你会推荐什么? 我看过游戏中的对象之间的通信? ,但是每当我试图实施调停模式时,我最终都会遇到一个巨大的中介阶层,这是一个难以维系的挑战。 中介模式是我应该使用的?

逻辑/渲染阶段与单个线程

我的问题可能会产生来自不同开发人员的不同意见,但我仍然希望得到一个答案。 关于游戏循环的更新和渲染步骤,以及它们在multithreading和单线程环境下的使用。 目前,有一个线程正在运行,它负责依次执行事件,逻辑和呈现。 有时,逻辑部分可能希望将游戏状态更改为其他内容,并在两者之间进行一些文件加载​​。 结果是游戏在加载时完全挂起,然后继续正常渲染新状态。 为了解决这个问题,我可以创建另一个线程,在主线程呈现平滑的加载animation的同时进行加载,然后正常进行。 真正的问题是关于如果我不创建另一个线程。 我可以从逻辑线程中刷新屏幕,并提供一些基本的加载屏幕,在加载文件时可能不会如此平稳地更新。 事实上,这种方法并不是很多开发人员所喜欢的,因为它在逻辑步骤中乱码渲染代码,这可能会导致不同types的问题。 希望它清楚!

XNA游戏架构,共享对象之间的顶点

我正在练习使用XNA渲染原始图片,我想创建一些类似于管道或隧道的东西。 我有一个名为PipeSegment的基类,我从中inheritance了类RotatingSegment和NormalSegment(以及任何我想象的)。 为了组合这个段,我创建了一个名为Pipe的类,它有PipeSegment对象列表。这就是我到目前为止: 没关系,除了事实上我生成了比必要更多的顶点。 对于每个片段,我为“正面”生成36个顶点,对于“背面”生成36个顶点。 插图: 现在,我的问题。 我怎样才能优化这个,如何产生较less的顶点? 有什么办法来“分享”段之间的顶点来保存我当前的代码结构,并且是适合我的代码结构吗? 谢谢

游戏结构深入

我一直对游戏结构感到好奇。 每个人谁是游戏程序员都有自己的方法来构建游戏,或者是有某种定义的布局。 把这个放在前面。 比方说一个游戏程序员想要创建一个平铺的地图。 有没有一个特定的方法来做到这一点,或者每个程序员都这样做。

顶点如何在不断变化的游戏状态下确定复杂的几何graphics

例如,假设你想绘制一个三维立方体,你可以使用float3来定义一个硬编码的顶点数组,下面是一个例子。 http://msdn.microsoft.com/en-us/library/windows/desktop/jj552949.aspx 但是你显然不能用手来定义大的和复杂的变化的几何顶点,比如你在游戏中会有的。 所以我想了解这些顶点如何加载/解释到引擎背后的机制。 另一个例子是,你可以在Maya中创建一个模型,并导出这个顶点数据来表示XML文件,然后使用GL / DX加载模型。 所以Maya正在做所有确定顶点数据的工作。 你也可以为地形做任何顶点几何。 然而,游戏状态不断更新,这不是静态的,相机随着用户input而不断移动。 那么,根据用户的input,不断重新评估新顶点数据的机制是什么?

在更新步骤中更改实体的当前状态还是等待结束?

假设我使用了一个行为组件,该组件包含一个函数调用,每个更新步骤都被分配给一个实体。 在那个函数调用里面,我正在改变实体的激活状态来激活或去激活,如下所示: void fun_update() { this_entity->set_active(true); if (this_entity->is_active()) { // This should return true or false? …. } } 什么会更正确? 要更改当前更新迭代的状态或等待当前更新步骤的结束以更新实体的状态? 我知道unity3d例如改变了当前的状态,但是当编码我自己的引擎时,我发现最后更容易更新它。

C ++ GameState管理

我一直在试图用C ++来制作游戏引擎,并遇到了游戏状态管理的困境。 我已经做了大量的研究,并find了从派生类的游戏引擎到使用枚举的许多方法,我想知道管理游戏状态的最有效的方法。 编辑 我想知道其他人如何实现他们的游戏状态管理,即你最喜欢什么,为什么你喜欢它。 另外,任何通常关于游戏状态的教程/代码示例也将非常感谢。

良好的大中型项目configuration管理系统devise?

我创建了更小的游戏,只需要一个基本上打开一个INI文件的类(包含羽毛球parsing器库),其中包含整个游戏的configuration值(渲染操作,音乐,绑定)。 但是我想要进入中等规模的项目,而我现在使用的configuration管理系统在我的引擎发展的时候会变得越来越复杂。 我需要一个新的configuration管理系统,我试图研究,但什么都没发现。 我目前的“中大型游戏”configuration管理器是这样的: ConfigManager类接口: class ConfigManager { protected: class INIFile { protected: std::string id; ini_t ini; public: INIFile(std::string &id, Poco::Path& filename); ~INIFile(); void Destroy() { delete this; } std::string& getId() { return id; } ini_t& getINI() { return ini; } }; typedef std::vector<INIFile*> INIFiles; INIFiles files; public: ConfigManager(); bool openConfiguration (Poco::Path& filepath, std::string& id); […]

我怎样才能识别加载的模型,所以我可以有效避免加载两次?

目前,我正在制作一个相当基本的OpenGL 3D引擎。 在这个引擎中,当你加载一个对象时,你会写 manager->LoadObjFile("cube.obj"); manager->AddParent("uvmap.bmp", "cube.obj", "cube", glm::vec3(10.0f, 1.0f, 0.0f)); “uvmap.bmp”是纹理,“cube.obj”是.obj文件path,“cube”是对象的ID。 我的问题是,此刻,当它加载一个对象,它将对象存储在一个结构中,所有的缓冲区数据和一个ID,ID是obj文件的path,所以当我加载.obj ,它通过所有已经加载的文件运行,并比较每个使用strcmp的ID,显然,当有成千上万的项目,将开始得到一点慢….它相同的AddParent ,和我的大部分方法(不同于存储obj数据的数据向量)。 什么是最好的识别项目,一个整数? 我真的不知道,我希望这是尽可能高水平,用户友好,但要保持优化和尽可能高效。