Articles of 建筑学

在基于单位的游戏中实现蒙特卡洛树search

我有这个简单的冒险游戏,我想开发一个AI。 Players在地图上移动他们的Units ,并完成一个简单的战斗决议。 每轮有100ms的时间限制,AI有完整的信息,对抗分辨率是确定性的,但是单位每轮同时移动。 就我所了解的蒙特卡洛方法而言,我需要复制当前一轮的状态,生成一个新的游戏状态树,随机播放或者进行评估。 目前我的zones保持每个unit的列表,他们通过存储orders四处移动。 他们被保存在每个回合的字典中,并在回合结束时被应用。 深度复制大约需要3ms,而且考虑到时间限制,我认为太慢而不能有效使用。 我想知道是否可以使用这个订单系统通过应用和撤消它们来更快地生成树,但是我还不能把自己的想法包括在内。 这是我目前的课程devise: 我怎样才能有效地为这种游戏添加MCTS?

场景管理

我查看了渲染引擎的源代码(食人魔,irrlicht,openscenegraph),但我无法真正掌握其场景管理系统的主要思想。 我还阅读了许多文章(包括游戏引擎架构的“渲染引擎”部分),但他们都以抽象的方式进行交谈,并且从不解释哪些类对什么负责等等。SceneManager类应该做什么? SceneGraph也是。 我在哪里存储caching(网格,纹理等)和什么类应该“看到”他们? 我应该如何管理现场? 我想知道从简单的Nodedevise到render_frame()函数的所有内容。 如果你有关于这个主题的好文章,那将是很棒的。 我知道我在问广泛的问题,但这是我的最后一招。 我还没有find这些好的来源。 编辑:这里有一些具体的问题: 现场经理的任务是什么? 场景图的任务是什么? 我在哪里存储所有的caching,以便用户能够插入和查询资源?

在单个引擎中处理不同的渲染器Y轴方向

我有一个引擎,根据游戏使用three.js (3D WebGL渲染库)或pixi.js (2D渲染库)。 问题是pixi.js y轴向下(与大多数2D应用程序相同),而three.js已经有了,就像大多数3D渲染系统一样。 我想知道是否有办法优雅地处理引擎中的差异,以便用户不必记住倒置一切取决于如果他们使用二维或三维。 有没有已知的解决scheme或引擎做类似的事情? 我的第一个猜测是试图颠倒所有坐标,但这似乎是一个丑陋的黑客,不一定会处理所有情况。

面向目标的行动规划与多个代理

我有点卡住了: 我用GOAP(面向目标的行动计划, http: //alumni.media.mit.edu/~jorkin/gdc2006_orkin_jeff_fear.pdf)实施了一个AI模拟游戏。 这工作正常。 现在我希望代理商能够合作(例如一起行动)。 在这种情况下,GoapActions保持松耦合的最佳AIdevise是什么? 他们应该一起计划吗? (在这种情况下,“世界状态”是什么?)还是应该分享他们的计划? 某种消息系统? 例 Agent1:Worldstate Agent 1:isLonely = true 目标代理1:isLonely = false 计划Agent1:AskAgent2ToTalk – > TalkToAgent2 Agent2 Worldstate Agent 2:hasWood = false 目标hasWood = true 计划Agent2:GetAxe – > ChopWood – > BringWoodToSupply 我如何得到这个星座? Agent1计划:TalkToAgent2 Agent2计划:TalkToAgent1 – > GetAxe – > ChopWood – > BringWoodToSupply 或者如果他们正在谈话,并且其中一名代理人被打断(例如,被攻击的敌人),则其他代理人必须知道他的TalktoAgent2行动已经结束。

如何构建使用行为树和path查找的AI?

在架构上,这两个概念如何相互作用的最佳实践是什么? 例如,假设我有一个类似小游戏的小行星,AI玩家必须躲避浮动的小行星,同时收集能量。 如果我们希望他performance出色,我们不能只有两个单独的闪避和收集行为,他应该考虑屏幕上的一切。 树中的行为是否应修改寻路图节点的权重(假设在此使用基于图的方法)? 是一个*像path发现甚至是这种情况下最好的办法?

3D位置处理

我正在考虑制作一个模拟器types的游戏,这个游戏会在3D空间中包含大量的小物件。 什么是处理这些对象的典型解决scheme? 首先想到的是一个3D数组,但我不禁想到有一个更有效的解决scheme。 想到的另一个想法是物品拥有较小的物品。 例如,一个房子拥有一个表,其中有一个杯子和碗。 我能想到的处理这个问题的最后一个方法就是拥有一组“对象”,每个对象都有一个x,y,z值。 虽然这会使它们容易存储,但我不明白如何在不查看每个可能的对象的情况下检测碰撞,并检查是否阻碍了碰撞。 还有其他的方法来保持这些对象更有效吗? 编辑:继下面的评论,是否有典型的线程安全的方式来实现这些结构在Java中?

面向目标的行动计划(GOAP)是AI之外的状态机的有效替代吗?

我刚刚了解到AI编程中使用的面向目标的行动计划(GOAP,下面的来源)。 我正在制造一个由玩家控制的角色的状态机,并想知道它是否可以被GOAP模型取代? 这有道理吗? 或者是仅适用于AI的GOAP? 资料来源: http://web.media.mit.edu/~jorkin/goap.html http://aigamedev.com/open/article/fsm-age-is-over/ http://aigamedev.com/open/article/fsm-implementation/

类devise即时切换免费漫游世界之间/从战斗世界?

我打算建立一个可以自由漫游的等距世界。 但是,我希望系统能够立即将网格应用到等距世界中,以便在任何随机碰撞中作战系统。 所以,从我所期望的,我应该有一个一般可以在自由漫游和战斗系统之间转换的角色。 但是,因为我对游戏编程还不熟悉,所以我不知道该如何处理。 如果我让我的角色类能够突然将它派生到Free-roaming或Battle系统中,听起来很方便,但是我也必须为其他所有类(敌方,物体等)实现这个特性。 如果我使用接口,那么我将不会有灵活性来添加额外的function,某些特殊的对象(也许是老板?)。 还是应该有一组接口来解决这个问题? 如果是这样,那就太复杂了。 所以有什么建议?

3D投影“相机透视”背后的逻辑是什么?

假设我在2D平面(屏幕)上有一个3D立方体。 我想用键盘来移动和旋转它。 没有提到一个3D游戏引擎可以为我做到这一点,你可以解释我的逻辑或链接到如何旋转立方体或更改相机视图教程? 我试图在网上寻找一个教程,但很难确切地确定发生了什么,以及它与我的场景的相关性。

游戏架构的基础是什么? 你如何创建你的游戏骨架,使它不会停留在你的方式?

关于如何创建游戏架构/骨架,必须有一些最佳实践。 我find的最好的资源之一是: http : //cowboyprogramming.com/2007/01/05/evolve-your-heirachy/我主要关注的是使用cocos2d的iOS游戏。 你怎么知道这个话题?