Questions tagged «architecture»

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

3
基于组件的设计:处理对象交互
我不确定对象在基于组件的设计中如何精确地处理其他对象。 说我有Obj课。我做: Obj obj; obj.add(new Position()); obj.add(new Physics()); 那么,我又如何才能使另一个对象不仅使球移动,而且还要应用那些物理方法。我不是在寻找实现细节,而是抽象地讲对象如何通信。在基于实体的设计中,您可能只有: obj1.emitForceOn(obj2,5.0,0.0,0.0); 为了更好地掌握组件驱动的设计以及如何进行基本操作的任何文章或说明都将非常有帮助。

3
是否有任何叙述性(或至少是非时空性)的引擎/框架?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 3年前关闭。 编辑(2):由于有两个答案,但我没有接受任何答案,所以我想激发我在这里考虑的答案:强烈暗示任何这种方法都是不可能的/根本没有用的,或者替代地,除了文本冒险游戏/互动小说之外,还涉及研究(领域)或至少某种程度通用的此类系统的示例。 虽然我不假装自己进行了更深入的研究,但我注意到,我研究过的所有游戏引擎/框架似乎都像是一个荣耀的图形引擎,从某种意义上说,它们将形状/实体分为两个部分或三维欧几里德空间,可能带有某种“并入”并发模型,允许人们指定某种形式的逻辑附加到这些“实体”上。 然后,在这些原语之上以某种即席(相对于引擎)的方式编写游戏“规则”和叙述。 显然,上面的描述相当简化(采用更专业的引擎,例如infinity引擎,其中确实包含某种形式的任务/叙事系统),我意识到该模型可以很好地工作(很多人似乎都在使用它) 。 不过,我想知道是如何尝试创建引擎/框架,将诸如(高级)游戏规则/逻辑或叙述(或至少是游戏的非空间方面)的描述等概念作为主要内容基础? 编辑(4):这并不意味着游戏将不包含任何空间/图形方面,仅是您具有情节(或游戏玩法或“棋盘游戏规则”),而不是拥有与逻辑关联的空间实体),然后您将描述/实现的图形界面。 尤其是我对任何声明性方法都感兴趣,这些方法试图以一种对实际实现有用的方式(相对于专门用于游戏的框架)来捕获相当大类游戏的某种(半)形式语义。游戏/叙事的定性分析)。 我所看到的是使用基于Petri网的模型对叙事进行建模/分析的一些研究,以及一些用于编写交互式小说的语言中有趣的方法。 编辑(1):我想我会添加一个玩具示例来说明。 假设我们对创建指向和点击风格的冒险游戏感兴趣(想想SCUMM游戏)。人们可能会根据从开始情况到结束情况或多或少线性和离散的进展这一概念来分析这些情况。 着眼于离散级联的概念,并考虑到一些非线性,可以选择(有界)DAG的理论作为基础理论。因此,以(相对于该理论)最抽象的形式来指定这种类型的游戏,就相当于向该理论添加了其他公理(以使该理论指定一个特定的图,或者足以捕获一个人认为需要的图形)。 “情节”)。 现在,将其变成实际的游戏会变成HCI /接口设计问题,即将该理论嵌入到可玩的事物中(即,建立理论模型/从具有过渡的用户界面状态集合中找到图的同构(等值)同构)进入DAG“指定游戏”)。 在以上假设的场景中,我可以看到至少三件事应该可以在库中捕获。首先,通常需要一种工具来对DAG或图形进行转换/推理。其次,一个足够聪明的用户界面库可帮助验证我们作为可玩游戏的图形表示形式是否为图形建模(例如,至少有一部分/非正式地,由于有界条件,证明游戏没有卡死状态) 。最后,可以给出用于指定图形的高级库的集合;例如一个用于表达字符及其相互作用并以此生成(部分)图形的库。 为什么要保留DAG的“中间”理论,而不是仅在底层实现上添加一些帮助库呢?答案是形式语义的所有常见原因。鉴于我们已经决定了正式的基础,我们可以验证游戏的某些属性,从而使人们能够对低级接口库中的优化之类的东西进行推理(只要它对DAG进行建模,我们就可以做我们想做的事情),而无需担心与(字符/对话等)高级描述不具有可比性,因为这些描述本身必须描述这种结构。 我绝不暗示上述方法在特定情况下会起作用,并且并不是不是DAG必须是实际存储在内存中的东西(而是它类似于lambda演算之类的计算形式主义),但我希望这能说明我好奇的那种方法。 简而言之,我想这个问题的替代标题可能是:Dijkstra将如何编写计算机游戏?

1
游戏编程:通用方法和设计模式
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Game Development Stack Exchange 的主题。 2年前关闭。 我开始编写一个非常简单的游戏引擎,以便可以更好地学习OpenGL 3.x,但是由于我的经验不足以及对如何设计3D游戏的了解很少,所以我通常会遇到一些问题,使我意识到我应该设计自己的课程不一样。我面临的其他问题是如何在游戏中以简洁的方式跟踪时间并根据需要更新动作,以及如何告知渲染器需要重绘。另外,我仍然需要使用Get和Set函数来将各种标志从一个对象传递到另一个对象,这是不好的做法吗? 因此,正如标题所述,我对任何可以帮助我的书籍或文章/教程和资料来源都感兴趣,并且可以解释游戏设计中的一些常见设计模式(例如,游戏状态处理程序,字体等)。 顺便说一句,我仍在使用freeglut,您会建议我在进行升级之前或对OpenGL有了更好的了解后,转向一个更好的窗口系统吗?

5
管理不同类型实体的列表-有更好的方法吗?
我正在为移动设备开发2D太空游戏,但是它确实非常复杂,我的解决方案确实令人困惑,并且会产生很多重复的代码段。 我有一个世界一流的课程,其中有多个不同对象的清单,例如: List<Enemy> enemys; List<Projectile> projectiles; List<Collectable> collectables; List<Asteroid> asteroids; List<Effect> effects; .. 每个列表都会根据世界一流水平进行更新。但是还不止如此。每个敌人都有一个引擎列表,以及一个被敌人更新的武器大佬列表。现在,每个引擎都将一些射击效果添加到世界列表“效果”中,并且每个武器租赁商都将弹丸添加到世界列表“弹丸”中。所有这些类都有不同的参数,因此我需要为每个类额外的更新和渲染功能。 至少它们都是“ GameObject”的子元素,“ GameObject”为它们提供了基本的东西,例如位置,速度和加速度矢量,边界多边形以及诸如applyForce和有限状态机之类的函数 有没有更好或更通用的方法可以做到这一点?就像一个包罗万象的类,其中包含所有不同对象的所有可能的参数和方法。(我认为这会产生更加混乱的代码)

1
基于回合的JRPG战斗系统架构资源
在过去的几个月中,我一直在忙于使用SDL库用C ++编程2D JRPG(日式RPG)。探索模式或多或少已经完成。现在我要解决战斗模式。 我无法找到有关如何构造基于回合的经典JRPG战斗系统的任何资源。我发现的只是关于破坏公式的讨论。我尝试过谷歌搜索,搜索gamedev.net的留言板,以及在Stack Exchange上浏览与C ++相关的问题。我也尝试读取现有开源RPG的源代码,但是如果没有某种指导,就好像在大海捞针一样。 我不是在寻找D&D之类的规则或类似规则。我纯粹是在谈论代码和对象结构设计。战斗系统使用菜单要求玩家输入。接下来,当英雄和敌人执行其动作时,将执行战斗回合。 谁能指出我正确的方向?提前致谢。
9 c++  2d  architecture  sdl  rpg 

1
我在此组件体系结构方面走的正确吗?
我最近决定修改游戏架构,以摆脱深层的类层次结构,并用可配置的组件替换它们。我要替换的第一个层次结构是Item层次结构,我想了解一些有关我是否处在正确轨道上的建议。 以前,我的层次结构如下所示: Item -> Equipment -> Weapon -> Armor -> Accessory -> SyntehsisItem -> BattleUseItem -> HealingItem -> ThrowingItem -> ThrowsAsAttackItem 不用说它开始变得凌乱,而对于需要多种类型的物品来说,这并不是简单的解决方案(例如,某些设备用于物品合成,某些设备可抛弃,等等)。 然后,我尝试将功能重构并将其放置到基础项目类中。但是后来我注意到该物料具有大量未使用/多余的数据。现在,我尝试为我的其他游戏类创建至少一个类似于建筑的组件,至少要为我的物品做一个。 这是我目前正在考虑的组件设置: 我有一个基础项目类,该类具有用于各种组件的插槽(例如,设备组件插槽,修复组件插槽等,以及任意组件的映射),因此如下所示: class Item { //Basic item properties (name, ID, etc.) excluded EquipmentComponent* equipmentComponent; HealingComponent* healingComponent; SynthesisComponent* synthesisComponent; ThrowComponent* throwComponent; boost::unordered_map<std::string, std::pair<bool, ItemComponent*> > AdditionalComponents; } 所有项目组件都将从基本ItemComponent类继承,并且每种Component类型都负责告诉引擎如何实现该功能。也就是说,HealingComponent告诉战斗机械师如何将物品当作治疗物品使用,而ThrowComponent告诉战斗引擎如何将物品视为可扔物品。 …

2
有关无缝MMO服务器架构的信息
我正在寻找无缝MMO服务器上的任何材料!在“大型多人游戏开发”和“游戏编程宝石5”这两本书中,我确实有几篇文章。有没有人在该主题上有经验或知道有关该主题的文章? 我对“高级视图”以及实现感兴趣。这可能成为我的硕士论文的主题,在我实际开始撰写论文之前,我想弄清楚编写这样一个系统有多困难。现在我还没有决定使用哪种语言,我在考虑Java或Scala。Erlang可能是一个选择,但我从来没有这样做。 注意:基本要求是运动。其他任何游戏系统都是可选的,并给予“奖励积分”。 现在,我对“无缝服务器”的含义是:我想要建立一个服务器群集,其中每个节点都以静态边界控制游戏世界的某些部分。玩家现在可以从世界的另一端移动到另一端而无需切换实例或击中某些“传送者”。我认为《魔兽世界》就是这么做的。但是在我的后端,播放器从一台服务器过渡到另一台服务器。

1
教学游戏开发所需的广泛主题[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2年前关闭。 我将在不久的将来向iPhone用户组进行游戏开发的演示。我的听众是iPhone开发人员,但不一定是非常有经验的开发人员,这仅供参考。 我的问题是,了解游戏开发需要哪些广泛的主题?我承认这是相当主观的,但是我确实希望有一个全面的高级主题列表,这些主题适用于足够广泛的游戏,对此主题感兴趣的人都应该知道。我对某些试图建立诸如此类的列表的资源的指针很着迷。(我已经看过了,但是我的Google-fu今晚让我失望了。) 这是我到目前为止的内容: 游戏循环 有关事件驱动游戏的子注释 2D动画 精灵/纹理贴图 3D动画 框架的重要性 建模软件 粒子和粒子效果 命中检测 人工智能 显然,我不会深入探讨所有这些主题,更像是简单地定义它们,以便在我演讲之后,观众(希望)能够将头转向任何特定游戏的开发方式。 我想念什么?

4
2d Platformer中的“时间控制”
我正在制作一个2D平台游戏,玩家可以按下按钮并重新启动关卡,只有他们以前的角色也可以同时运行关卡,就像他们回到过去一样。 我知道其他游戏以前也这样做过,而我想到的方法是使游戏角色具有一系列动作(空闲,跳跃,向左走等),然后检测这些动作的变化并将其登录列表以及游戏时间。因此,当我需要角色自己再次运行关卡时,我可以浏览列表以在适当的时候更改其动作。 这是最好的方法吗?有人在这方面有经验吗? 谢谢。

3
将角色驱动的游戏引擎简化到不需要学习脚本/编程的地步是一个好主意吗?
我记得,而且我仍然认为,如果不使用庞大的工具(例如,统一性或不了解广泛的C ++编程,设计模式,像样的或基本的3D引擎等),甚至不能制作原型3D游戏来测试简单的行为。 现在我想知道,因为我了解编程,所以我是否比在知道如何制作东西之前需要学习编程的人还幸运。即使像Unity这样的脚本引擎也不适合孩子使用,就我个人而言,它们倾向于指示他们的处事方式。对于像Ogre或Irrlicht这样的引擎,情况并非如此。 现在,我认为角色驱动型游戏占据了游戏市场的很大一部分。您认为制作面向角色控制的游戏引擎只允许构建AI而不包含其他任何东西是一个好主意吗? 当我说原型时,我也指“通用”,即可以从一组游戏参数中快速选择,例如场景管理器,玩家的摄像机POV,控件,一些非常基本的碰撞/物理以及集成基本转向(例如OpenSteer)。主要思想是在3D模式下制作AI沙箱,因此可以在没有2D约束的情况下进行演示(也可以使其更适合3D项目而不是2D的3D原型)。

4
在基于回合(RPG)的游戏中使用空闲时间进行更新
如果您使用任何基于回合的RPG游戏,那么很长一段时间内什么都不会发生,因为该游戏在“ wait_for_player_input”上循环播放。当然,利用这段时间来更新事物似乎是明智的。 但是,这立即表明它需要进行线程化。在单线程中可以进行这种设计吗? loop: if not check_something_pressed: update_a_very_small_amount else keep going 但是,如果我们说“ a_very_small_amount”仅在每个循环中更新单个对象,则更新将非常缓慢。 您将如何处理此问题,最好是在单个线程中进行? 编辑:我已经将此语言标记为不可知论者,因为这似乎是明智的选择,尽管任何更特定于Python的东西都将是不错的选择。;-) 第二次编辑:该游戏不打算使用任何动画组件;也就是说,我目前正在将其作为等待玩家输入运行,然后更新所有内容并进行绘制。因此,它不是X FPS,而是取决于用户的速度。

3
这是什么模式,我应该这样做吗?
我正在使用Flash开发和Flash CS5在AS3中制作游戏。一切都是面向对象的。我想知道,是否应该有一个“网关”类,该类具有对其他类的所有实例化的属性引用,并且我只是将此网关类传递给新对象,因此它们可以访问每个类。像这样: var block:Block = new Block(gateway); //In the block class: this.gateway.player.setHealth(100); //Or: this.gateway.input.lock(); 这是像单例模式一样吗?我应该这样做吗?

3
在游戏开发中使用“朋友”类
通常,在C ++中,游戏开发的速度要高于封装,因此您会看到大量可公开访问的类成员,这些成员实际上不应该公开。 在大多数情况下,我似乎发现实际上只需要很少的几个类就可以知道其他类的内部工作原理,以至于修改或读取其私有数据。 为此私有数据创建公共获取者/设置者会暴露出一些不应该随意修改的东西。 这里的妥协是使用朋友类吗?还是我没有看到的朋友班有一些缺点。

3
Android线程困扰着我围绕设计
我无法将精力集中在游戏设计上。在android平台上,我有一个活动,并使用自定义表面视图设置了其内容视图。自定义曲面视图充当我的面板,我创建所有类的实例,并在那里进行所有绘图和计算。 问:我应该在活动中创建其他类的实例吗? 现在,我创建一个处理游戏循环的自定义线程类。 问题:如何在所有活动中使用这一课程?还是我每次都要创建扩展线程类的单独实例? 在我以前的游戏中,我有多个级别必须创建线程类的实例,并且在线程类中,我必须为每个单独的级别设置构造函数方法,并在循环中使用switch语句检查它需要呈现的级别和更新。抱歉,这听起来令人困惑。 我只想知道我使用的方法是否效率低下(可能是这样),以及如何设计正确的方法。我已经阅读了许多教程,但是在这个特定主题上仍然遇到很多麻烦。也许是一些解释此问题的教程的链接?谢谢。

2
事件发展在游戏中起什么作用?
大多数应用程序开发都是基于事件的开发,但是考虑到开发游戏的游戏循环风格以及对高性能/吞吐量的(通常)需求,使用事件进行开发的角色是什么?经常涉及的同步/锁定是否会产生更大的影响? 例如:-网络[层]如何将收到的数据通知游戏循环?-物理系统如何通知碰撞 我问,因为我记得有一次使用事件进行游戏开发是严格禁止的时间。这改变了吗?

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.