Questions tagged «architecture»

代码的结构。有关游戏引擎内部设计的问题。

4
什么是存储动态游戏对象的最有效容器?[关闭]
很难说出这里的要求。这个问题是模棱两可,含糊,不完整,过于宽泛或夸张的,不能以当前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 7年前关闭。 我正在做第一人称射击游戏,我知道很多不同的容器类型,但是我想找到最有效地存储动态对象的容器,该对象将在游戏中频繁添加和删除。EX子弹。 我认为在那种情况下,它将是一个列表,以便内存不连续并且永远不会进行任何大小调整。但随后我也正在考虑使用地图或集合。如果有人有任何有用的信息,我将不胜感激。 我是用c ++编写的。 另外,我想出了一个我认为可行的解决方案。 首先,我将分配一个大尺寸的向量。比如说1000个对象。我将跟踪此向量中最后添加的索引,以便知道对象的末尾在哪里。然后,我还将创建一个队列,该队列将保存从向量中“删除”的所有对象的索引。(不会进行实际的删除,我只知道该插槽是免费的)。因此,如果队列为空,我将添加到向量+ 1中最后添加的索引,否则,我将添加至队列前面的向量的索引。

5
游戏动作需要多个框架才能完成
我之前从未真正做过很多游戏编程,这是一个非常简单的问题。 想象一下,我正在构建一个俄罗斯方块游戏,主循环看起来像这样。 for every frame handle input if it's time to make the current block move down a row if we can move the block move the block else remove all complete rows move rows down so there are no gaps if we can spawn a new block spawn a …

2
基于组件的系统在线资源
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2年前关闭。 我一直在考虑在游戏中采用基于组件的方法。其他人是否有任何体面的参考资料或示例实现方式将有助于使这种过渡变得容易一些?

6
如何建立2D物理引擎?[关闭]
很难说出这里的要求。这个问题是模棱两可,含糊,不完整,过于宽泛或夸张的,不能以当前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 6年前关闭。 我制作的最高级的游戏是使用物理引擎Box2dFlashAS3制作的8球台球游戏,以及带有关卡的平台游戏。 当我做平台游戏时,我一直希望知道如何制作引擎,以便我可以重复使用它。当我看到具有坡度,弯曲坡度,完美重力和真实物理学的游戏时,我一直希望我知道如何对引擎进行编码。 请为需要的任何相关知识库建议技术和文章。

3
我以及如何将输入和游戏对象的关注点分开?
在每个游戏中,开发人员都必须以某种方式处理输入,可能是简单的键盘和鼠标事件,触摸事件或加速度计输入。该输入直接间接影响游戏中的对象。有时相同的输入会影响不同的对象。现在,我一直在考虑如何对此建模。我的看法有两种不同的方法。 让游戏对象自己处理它,订阅事件并调用它自己的方法。这具有使游戏对象自己决定哪些输入导致哪个动作的优点。缺点似乎是输入代码与“核心”游戏对象代码混在一起。而且,游戏对象不知道游戏其余部分的状态,并且有时可能不应对输入事件起作用。这似乎不正确。 让一般的输入控制器负责所有输入,并决定谁来处理什么事件。这似乎可以更好地分离关注点,但是紧密地将输入控制器类与游戏对象耦合在一起。它需要以某种方式知道谁想要接收哪个事件和哪个状态。这似乎也不正确。 您正在使用什么策略来解决这个问题?

4
计算两军交战的输出
我正在使用Flash编写战略游戏。该游戏的工作原理与著名的游戏“ Travian”非常相似。 我的问题如下:我试图计算由于两支军队之间的战斗而损失的部队。两国军队的单位类型不同。他们中的一些对其他某些单位更强,而对其他类型则较弱。 如何将这种差异的影响体现在战斗方程式中? 如果它们仅具有at和def点,这似乎很容易,但是当涉及到单元类型依赖项时,我会迷路。

5
noSQL-它是基于Web的游戏的有效选择吗?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Game Development Stack Exchange 的主题。 6年前关闭。 出于机会和无聊,我和一个朋友决定制作一个基于网络的游戏。这是我将要制作的第一个“游戏”,因为通常我会在Django中编写Web应用程序。 我选择在游戏中使用相同的框架,但由于无法预见未来的需求和与数据库相关的问题,因此我对数据存储并不完全确定。最近,noSQL运动逐渐兴起,我想探索这一领域。 因此,我有以下问题: noSQL数据存储(基于文档,例如MongoDB)是否适合基于Web的游戏? 使用传统的RDBMS(例如MySQL)可能会出现什么问题? 如何在玩游戏或定时事件(例如cron作业)期间,确保使用MongoDB的用户之间的数据一致性? 游戏概述:典型的冒险游戏,玩家与怪物战斗并获得物品等。 所有玩家的一些数据都是静态的:物品,武器,药水,地图等。 与玩家相关的一些数据:清单,指标(统计数据),进度等。 一个玩家可能需要知道另一个玩家的状态和状态 计划任务将在特定时间间隔运行

4
资源经理-他们有什么好处吗?
我已经在源代码中见过很多次了,诸如此类[嗯,这更多是我的伪C ++想法] typedef shared_ptr<Resource> ResourcePtr;// for ease ResourcePtr sound1 = resourceManager.Get<SoundResource>("boom.ogg"); sound1->Play(); ResourcePtr sprite = resourceManager.Get<Image>("sprite.png"); 我只是想知道像这样的课程有多有用: 加载的媒体文件 将它们存储在内存中 在关卡开始时执行此操作-加载屏幕。 清理了 而不是具有以下系统: 资源仅由实体持有,或由实体持有。 负责自己加载到内存中。 首先是这样的“经理”;我觉得这表示使用错误。但是,它允许传递类似资源名称的向量之类的东西,而不必费力寻找需要加载的所有内容。


1
我应该如何构建可扩展的资产加载系统?
对于Java的业余游戏引擎,我想编写一个简单但灵活的资产/资源管理器。资产是声音,图像,动画,模型,纹理等。经过几个小时的浏览和一些代码实验,我仍然不确定如何设计这个东西。 具体来说,我正在寻找如何设计管理器的方式,以便它抽象出如何加载特定资产类型以及从何处加载资产。我希望能够同时支持文件系统和RDBMS存储,而程序的其余部分不需要了解它。同样,我想添加一个XML动画描述资产(FPS,要渲染的帧,对Sprite图像的引用等)。我应该能够为此编写一个类,该类具有查找和读取XML文件以及创建和返回AnimationAsset带有该信息的类的功能。我正在寻找数据驱动的设计。 我可以找到大量的信息是什么资产管理者应该做的,而不是如何去做。涉及的泛型似乎导致某种形式的类级联,或某种形式的助手类。但是,我还没有看到一个清晰的例子,看起来不像是个人黑客,也不是共识。

2
如果“ ResourceManager”类被认为是不好的,那有什么替代方法?
我听到有相互矛盾的意见,例如: “专用的Manager类几乎永远不是正确的工程工具” “(目前)专用的Manager类是在拥有数千个资源的大型项目中生存的最佳方法” 让我们来看一个经典的ResourceManager类,它具有以下功能: 加载资产(纹理,音频,3D模型等) 通过保留缓存确保资产仅加载一次 引用计数资产以确定是否可以将其释放 隐藏实际资产的来源(例如,每个资产一个文件,或一个包文件中的所有资产,或者甚至可以通过网络加载资产) 可以在不重新启动程序的情况下重新加载资产,这对于从事游戏的美术师来说非常有用。 假装这些ResourceManager对象不是单例,而是通过依赖项注入传递它们,让我们从表中删除“ singletons is bad”参数。 然后是“使用工厂”或“称其为工厂”参数。我的问题是,是的,它是一个工厂,但它也是一个缓存和一个重装器(因为缺少更好的词)。称其为工厂并不能正确地描述它,如果我将其设置为合适的工厂,那么在哪里实现缓存和重新加载呢? 我同意“经理”类通常是不良体系结构的征兆,但是在这种特殊情况下,如何对其进行重组并仍然保留所有功能?这是“经理”类实际上合适的情况吗?

2
碰撞检测逻辑应该放在哪里?
我正在开发一个小型2D游戏引擎。角色具有绘画方法,当前可以执行以下操作: 根据角色的速度等计算角色的新位置。 更新碰撞网格单元** 在新位置绘制角色 **我创建了一个碰撞网格以减少相交检查的次数 现在我想到的用于检测碰撞的基本算法是: For Each Character Check intersection with characters in surrounding 8 cells 我可以简单地将此代码放在paint方法中。但是,这是我预期的问题。 假设两个字符A和B位于碰撞网格中的相邻单元格中。现在,按照上述算法,在字符A的迭代中,它将检测到它与B碰撞。在字符B的迭代中,它将检测到它与A碰撞。 但是我有一个想法,当A检测到它与B发生碰撞时,应该通知B它与A发生碰撞。当有两个以上的actor发生碰撞时,这样可以节省很多比较。但我不确定如何处理。我认为应该检查游戏循环内的碰撞,而不是每个角色都检查碰撞。 这种方法正确吗?您如何处理此类问题?我自己想到了碰撞网格。碰撞网格逻辑还有其他选择吗?


2
通常如何在面向组件的系统中构建物理或图形组件?
我花了最后48个小时来阅读对象组件系统,并觉得我已经准备好开始实施它。我已经创建了基本的Object和Component类,但是现在我需要开始创建实际的组件,我有点困惑。当我用HealthComponent或基本上只是属性的东西来考虑它们时,这是很有意义的。当它作为物理/图形学组件更为通用时,我会有些困惑。 到目前为止,我的Object类是这样的(如果您注意到我应该进行的任何更改,请告诉我,这仍然是新的)... typedef unsigned int ID; class GameObject { public: GameObject(ID id, Ogre::String name = ""); ~GameObject(); ID &getID(); Ogre::String &getName(); virtual void update() = 0; // Component Functions void addComponent(Component *component); void removeComponent(Ogre::String familyName); template<typename T> T* getComponent(Ogre::String familyName) { return dynamic_cast<T*>(m_components[familyName]); } protected: // Properties ID m_ID; Ogre::String …

2
RTS游戏单位结构
我想要一种方法来制作很多不同的单元,而不必多次编写诸如moveTo和Attack动作之类的东西 我的观察方式有两种。 具有标志的单个通用Unit类,该类指定了它可以/不能执行的操作(然后在静态数组中创建实例,并在需要时获取它们) 对于具有特定于单元的操作(例如,Attack,Harvest,Patrol)具有抽象方法的抽象单元类,则所有这些都需要在子类中实现,即使该单元实际上无法收获任何东西。 第一种方法似乎最简单,但是我最终将为大多数单元使用大量代码。 第二种方法也可以。但是,如果我决定拥有两个可以收集资源的不同单元,那么我将在两个不同的类中拥有完全相同的代码,这似乎不是正确的方法。 这是解决这个问题的正确方法吗? 在像AoE这样的游戏中,我想每个单位都有某种动作/命令列表,我真的很想知道如何实现类似的目标,在这里我可以为每个动作/命令编写一次代码,并且然后将其提供给所有需要执行该操作的部门。 如果我不清楚(很有可能),或者您需要有关我到底在寻找什么的更多信息,请在评论中问我。
18 unity  c#  architecture  rts 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.