Questions tagged «architecture»

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

9
有什么好的开源游戏可供学习?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Game Development Stack Exchange 的主题。 4年前关闭。 我想下载开放源代码游戏的源代码,以便熟悉游戏体系结构。有谁知道一款游戏的源代码清晰易懂? 编辑:经过一番思考,我想制作一款可以在台式机或带有2D图形的Andriod手机上玩的游戏。

2
游戏开发中的演员是什么?
我正在阅读一本有关游戏开发的书(《游戏编码完整》,第四版),其中有一个“演员”主题,该主题只是简要介绍了如何使用它们,而不是解释它是什么。 这本书介绍了这些角色: 游戏充满了使您的世界栩栩如生的对象。第二次世界大战的游戏可能装满了坦克和飞机,而未来派的科幻游戏可能有机器人和飞船。就像舞台上的演员一样,这些对象是游戏玩法的核心。我们称他们为“游戏演员”似乎很恰当,因为那正是他们的身份。 游戏角色是代表游戏世界中单个实体的对象。它可能是弹药拾取器,坦克,沙发,NPC或您能想到的任何东西。在某些情况下,世界本身甚至可能是演员。定义游戏角色的参数并确保它们尽可能灵活和可重用非常重要。 定义游戏角色的方法与游戏一样多。像计算机编程中的其他所有内容一样,很少有完美的解决方案。 我只能了解很少的几件事:它是游戏中可以执行动作的所有事物的抽象;它有自己的状态;它的行为通常被实现为状态机。就是这个。我将以游戏开发的系统编程为背景,因此我想大致了解一下参与者在游戏开发中的意义,如何使用,如何使用,解决了什么问题,如何以及为什么。我希望孩子能理解这种解释。 我试图在Google上找到此信息,但它却将我引向另一个“演员”:大多数时间或游戏演员的并发编程,但没有很好的解释。

4
套接字服务器和游戏服务器是否应该是独立的进程?
假设一个简单的标准客户端/服务器游戏。对于服务器,是否值得拥有一个单独的进程来侦听客户端的连接和消息,并通过本地套接字或stdin将数据发送到运行实际游戏服务器的另一个进程? 另一种选择是使这两项都在一个过程中完成。对传入的消息进行排队并以正确的顺序执行它们,这不会造成停顿问题。 我想知道将两个“活动”分开的额外资源是否真的值得。我应该如何决定?我想听听任何利弊。

6
具有许多属性的Hero的OOP架构
我将开始一个简单的浏览器文本RPG,其字符可以(被动地)与其他人抗衡。这涉及大约10种技能的列表,例如力量,灵巧性等,另外还具备使用不同武器的能力。 是否只有将这些技能作为类属性来设计这个角色类,还有更好的方法?看起来很简单,但是我很不情愿,因为它很笨拙。 class Char(self): int strength int dexterity int agility ... int weaponless int dagger ...
14 architecture  oop 


2
这是适合我们的MMORPG手机游戏的架构吗?
这些天,我正在尝试为公司设计一款新的MMORPG手机游戏的体系结构。该游戏类似于黑手党战争,iMobsters或风险。基本思想是准备一支军队与您的对手(在线用户)作战。 尽管我以前曾从事过多个移动应用程序的工作,但这对我来说却是新事物。经过大量的努力,我提出了一个架构,该架构借助高级流程图进行了说明: 我们决定采用客户端-服务器模型。服务器上将有一个集中式数据库。每个客户端将拥有自己的本地数据库,该本地数据库将与服务器保持同步。该数据库用作存储不经常更改的内容(例如地图,产品,库存等)的缓存。 使用此模型后,我不确定如何解决以下问题: 同步服务器和客户端数据库的最佳方法是什么? 在将事件更新到服务器之前,是否应该将事件保存到本地数据库?如果应用由于某种原因终止,然后将更改保存到集中式数据库,该怎么办? 简单的HTTP请求是否可以达到同步目的? 如何知道当前登录的用户?(一种方法是让客户端每隔x分钟继续向服务器发送一个请求,以通知该请求处于活动状态。否则,认为客户端处于非活动状态)。 客户端验证足够吗?如果没有,如果服务器未验证某些内容,如何还原操作? 我不确定这是否是一个有效的解决方案,以及它将如何扩展。如果已经在此类应用程序上工作的人们能够分享他们的经验,这可能有助于我提出更好的建议,我将不胜感激。提前致谢。 附加信息: 客户端是在称为果酱的C ++游戏引擎中实现的。这是一个跨平台的游戏引擎,这意味着您可以在所有主要的移动操作系统上运行您的应用程序。我们当然可以实现线程化,这在我的流程图中也有说明。我打算将MySQL用于服务器,将SQLite用于客户端。 这不是回合制游戏,因此与其他玩家的互动不多。服务器将提供在线玩家列表,您可以通过单击“战斗”按钮与他们进行战斗,并在播放一些动画后宣布结果。 对于数据库同步,我想到了两种解决方案: 存储每个记录的时间戳。还应跟踪本地数据库的最新更新时间。同步时,仅选择时间戳较大的行并将其发送到本地数据库。为已删除的行保留一个isDeleted标志,以便每个删除行为都只是一个更新。但是我对性能有严重的怀疑,因为对于每个同步请求,我们都必须扫描整个数据库并查找更新的行。 另一种技术可能是保留针对用户进行的每次插入或更新的日志。当客户端应用程序要求同步时,请转到该表并找出已更新或插入了该表的哪些行。这些行成功传输到客户端后,请删除此日志。但是我想到了如果用户使用其他设备会发生什么。根据日志表,已为该用户传输了所有更新,但实际上是在另一台设备上完成的。因此,我们可能还必须跟踪设备。实施此技术比较耗时,但不确定是否会执行第一个。

1
为什么开发游戏机模拟器如此困难?
我总是发现模拟器非常吸引人。我很想为老式的gangan控制台或手持设备创建一个模拟器。这将有助于我更好地了解硬件以及为该硬件创建的游戏。但是,人们总是说这有多困难,我什至不应该尝试。我想知道为什么。 另外,我想在一个好的起点上找到一些建议,在哪里可以找到所需的信息?

4
如何使用基于组件的架构设计有效的游戏对象交互方案?
这是一个设计问题。我敢肯定,这可以进一步推广,但是我很难过。我想知道游戏对象交互的设计-这是我的示例(二维拼图平台)。 假设玩家正在尝试逐步升级。有许多可以指向不同方向的灯。这是这些灯光对象如何相互作用的示例。 一盏灯投射出一个平台,使玩家可以越过空隙 一盏灯会降低其触摸的任何物体的摩擦系数,另一盏灯会增加它的摩擦系数。 一盏灯使所有灯的效果无效,这将使平台在该灯打开时消失,并使摩擦修饰符无效。 等等... 使用组件体系结构时解决此问题的最佳方法是什么?每个主要对象的组件似乎都是显而易见的,而且是一种清晰的方法来定义其对环境的影响。一个用来“解决”交互作用的类(好像这样很快就会变得一团糟)?使用装饰器模式为在给定时间进行交互的对象创建组合对象?一个适合这种情况的数据结构? 另外,将音频连接到这些交互吗?似乎将音频连接到系统就像连接其他属性一样,例如可见性或播放器移动/碰撞。 显然,随着添加更多组件,如果有一个健壮的系统可以进行少量修改就可以处理新组件,那将是很好的选择,但是我不熟悉如何进行此设计。 其他信息:我使用的引擎是一个名为IceCream的XNA引擎。

2
实施MMO任务机制的提示?
您将建议使用哪些工具,模式或最佳实践来实现下面列出的要求中给出的任务机制? 我正在谈论软件体系结构(应该是多么通用)以及对象连接,事件订阅和条件表示的选择。欢迎提及您成功使用的工具/库。 编辑:如果您正在使用脚本,您推荐什么设置? 要求: 简单的2D mmo(rpg) 所有游戏数据(包括任务)都存储在关系数据库中 游戏中的任何事件都可能触发玩家的新任务或推进现有任务 任务可以具有任意数量的条件,玩家可以使用该任务 一个任务可以包含任意数量的具有任意条件的子任务/步骤 任务范围很简单: 与A交谈-杀死5 B-与A交谈-永久增加健康 相当投入: 使用X区域中的物品-转到Y区域-机器人会产生-杀死机器人而不会造成超过10%的伤害-机器人掉落物品-拾取物品-传送门解锁-将物品传送到传送门后面的J-获得金钱和经验-允许再次通过传送门-锁定此玩家的传送门 可能存在关卡实例(玩家可以团队或孤立地完成某些任务,这只会为那些参与者生成关卡位置) 最好使用世界编辑器来管理任务,而无需脚本或编程知识(编辑:不过,通常不提倡脚本) 我假设C ++是实现的语言 我当时在想,如果我可以将事件和条件的任何链条结合起来,我们就可以对更复杂的模型进行建模,从而可能进行更具吸引力的探索。我尝试过使用自己的ECA(事件,条件,动作)引擎进行滚动实验,但这可能有点过分。在不使用任何脚本的情况下对通用条件进行建模特别困难。

1
何时使用混合树与状态机进行动画制作
我是一位经验丰富的游戏开发者,最喜欢用3d动画角色制作游戏(在Unity中),并且努力弄清楚何时使用混合树与动画状态机。我从概念上理解了两者,但是在Unity和其他来源的大量教程中都看到了混合树和用于角色动画的动画状态机。我不确定何时/为什么一个人比另一个人更好,希望有人能指出我正确的方向。 我的游戏是第三人称角色扮演游戏rpg a'la WoW或KOTOR或Mass Effect(我知道不同的系统,但视角和战斗风格在较高水平上是相近的)。我有无数动画来制作攻击,格挡,假装,死亡,行走,奔跑,跳跃,射击等,但是我不清楚如何自然地将它们排序。 我已经看到用于运动的混合树在尝试保持角色运动流畅性时对我来说很有意义,但是我不明白如何从该混合树进入攻击状态,到目前为止,我还没有看到任何东西超出运动范围(没有攻击等等)。我需要从运动状态到攻击/死亡/闪避状态制作混合树吗?我是否仅使用状态机就拥有更多控制权?我对状态机有点谨慎,因为它们非常常见,而且我怀疑在不混合的情况下,变态动画排序的潜力更大。 我打算使用Unity字符控制器并编写自己的逻辑脚本来驱动它。对于AI,我将使用内置的导航网格物体代理。角色控制器动画的处理方式是否与AI动画不同? 任何见解都将受到欢迎! 谢谢

3
数组对象还是对象数组?
我正在制作一个管理模拟游戏,类似过山车大亨。我想知道构造我的世界对象的最佳方法是什么,以便最大化性能。 假设我的游戏中有5,000人,我可以: 创建一个对象并将其存储在数组中,如下所示: class person() { this.x = 0; this.y = 0; this.thirst = 15; this.hunger = 15; // etc.. add methods: public findPath(int destX, int destY) { // and so on } people = new person[5000]; for (int = 0; i < 5000; i++) { people[i] = new person; …

3
Unity是否已有对时间表的支持?
我正在计划开发Unity3D中的游戏,并试图与引擎已经提供的功能以及我必须自己编写的功能保持一致。 游戏本身将是一种节奏游戏,这意味着同步音频和图形事件,以便它们始终在应有的时间播放。我要避免的是潜在的滞后情况,其中音频或图形开始比其他速度更快。 当我们回到大学时,在我的游戏设计课程中讨论这种类型的协调系统时,我的教授将此类型的设计称为“时间轴”课程。这样的想法是,您可以实例化这些对象中的一个或多个,以不同的速度进行进度,安排将来发生的事情,并同步周期性事件。但是,将其称为“时间轴”类似乎仅限于我的教授本人,因为一直在搜寻某个API是否具有“时间轴”功能是徒劳的。 这种功能是否有更通用的名称?Unity是否有任何预先存在的方法来协调此类事件的调度,或者这是需要在引擎上构建的东西吗?如果可以的话,希望您能接受一些教程!

2
我应该如何检查玩家是否完成了一项成就?
我正在制作MMO游戏,而我刚到需要实现成就的地步...我该怎么做?最直接的方法是每100ms运行一次: for a in achievements for p in players if a.meetsRequirements(p) then p.completeAchievement(a) 但这只会带来更多的复杂性。例如,如何检查成就是否已经完成?玩家是否仅针对特定成就拥有自定义属性?我对任务进行了此类操作,因为它们主要是“收集100块木头”,因此玩家进行的主动任务会对此进行检查。另外,我认为必须有更好的时间来检查它,这会定期降低我的服务器的速度。

3
如何避免事件计划程序的单例模式?
我想为我的游戏制作一个事件调度程序,我基本上希望能够安排一个游戏事件的触发时间。这可以是一次触发,也可以是周期性触发(触发事件“ E_BIG_EXPLOSION”每5秒钟触发一次...)。 诱人的是,这可能是使用Singleton的好地方,但是Singleton可能非常邪恶,它们容易像疾病一样传播……所以我不惜一切代价避免使用它们。 在这种情况下,您建议采用哪种设计避免单例使用?

3
管理游戏中活动的最佳方法?
我正在开发一款游戏,该游戏需要偶尔进行一些游戏内事件。一个很好的例子是教程。您开始游戏,并且在游戏中的几个点发生了一个事件: 您遇到第一个敌人,游戏暂停,并且您收到关于如何杀死它的解释。 您杀死了第一个敌人,您收到一条“好工作”消息。 您将获得一个新项目,即带有项目统计信息弹出菜单。 等等等 我正在研究的游戏是一款益智游戏,其游戏规则几乎相同,因此将所有这些事件单独编码为单独的级别似乎效率不高。 我应该以某种方式在XML等外部源中定义这些事件吗?然后编写一个解释器,以读取XML并设置级别的事件要求?我不确定如何定义一个事件,例如在杀死两个敌人时应该发生的事件。 需要明确的是,我并不是在寻找最佳的编程语言或脚本语言来执行此操作,而是在寻找最佳的处理方法。 谢谢! 编辑: 由于我的问题很难理解的第二个例子: 我遇到的问题是要以总是几乎相同的过程在游戏中添加一些额外的动作。就像RPG战斗一样,每个人都有转弯,选择技巧等-总是一样。但是,如果我想在两者之间显示过场动画,该怎么办?修改整个游戏结构,使其在包含过场动画的情况下进入经过改变的战斗等级,似乎效率很低。我想知道这通常是怎么做的。

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.