游戏开发

专业和独立游戏开发人员的问答

1
构造规则的n面多边形的角的算法
我已经使用很多关键字组合在Google上进行了搜索,但令我惊讶的是,我找不到用于将规则的n面多边形构造到给定圆中的算法,即找到n个角点的坐标。我所能找到的只是如何通过物理罗盘和直尺或无源的交互式浏览器插件进行操作的说明。 那么我在哪里可以找到这样的算法呢?

3
如何找到障碍?
如何最好地表示以下情况-代理(@)需要达到目标($)。该路径被护城河(~~~)阻塞。可以使用耙子(或其他一些设备,如水上行走靴)来越过障碍物。 .....~~~... . ground ...=.~~~... = rake .....~~~.$. ~ water .@...~~~... @ agent .....~~~... $ goal 如果没有立即可用的路径,如何正确地从查找@到$?我的道路是否应该不仅具有成本,还具有先决条件? UPD:问题是目标无法实现,耙只是地图上许多可能的物体之一。那么问题是“如何使代理了解它需要耙子?”
10 ai  path-finding 

2
根据相邻图块选择图块
我正在使用平铺的地图编辑器,因此我需要根据相邻的图块自动选择图块。例如,当将道路砖放置在另一个道路砖旁边时,需要将两者定向,以便它们形成连续的道路。如果周围还有其他道路,我们可能需要使用转角或交叉路口砖。 谁能推荐一些算法来做到这一点?该游戏使用8向方形平铺地图。

2
将渲染逻辑移出GameObject类的策略
制作游戏时,您通常会创建以下所有实体继承的游戏对象: public class GameObject{ abstract void Update(...); abstract void Draw(...); } 因此,在更新循环中,您遍历所有游戏对象,并给它们提供更改状态的机会,然后在下一个绘制循环中,您遍历所有游戏对象,并给它们提供绘制自己的机会。 尽管这在带有简单前向渲染器的简单游戏中效果很好,但通常会导致一些巨大的游戏对象需要存储其模型,多种纹理以及最糟糕的胖子绘制方法,从而在游戏对象之间产生紧密的联系,当前的渲染策略以及任何与渲染相关的类。 如果要将渲染策略从向前更改为推迟,则必须更新很多游戏对象。而且,我制作的游戏对象没有尽可能地可重用。当然,继承和/或组合可以帮助我应对代码重复并使更改实现变得容易一些,但仍然感到缺乏。 也许更好的方法是从GameObject类中完全删除Draw方法并创建一个Renderer类。GameObject仍将需要包含一些有关其视觉效果的数据,例如用来表示它的模型以及应该在模型上绘制哪些纹理,但是如何完成将留给渲染器。但是,渲染时通常会遇到很多边界情况,因此尽管这将消除从GameObject到Renderer的紧密耦合,但Renderer仍必须全部了解所有会使它发胖的游戏对象,所有人都知道并紧密耦合。这将违反许多良好做法。也许面向数据的设计可以解决问题。游戏对象肯定是数据,但是渲染器将如何驱动呢?我不确定。 所以我很茫然,无法想到一个好的解决方案。我尝试使用MVC的原理,过去我对如何在游戏中使用它有一些想法,但是最近它似乎并不像我想的那样适用。我很想知道大家如何解决这个问题。 无论如何,让我们回顾一下,我对如何实现以下设计目标很感兴趣。 游戏对象中没有渲染逻辑 游戏对象与渲染引擎之间的松耦合 没有所有知道的渲染器 最好在渲染引擎之间进行运行时切换 理想的项目设置是一个不需要相互引用的单独的“游戏逻辑”和渲染逻辑项目。 当我听到约翰·卡马克在推特上说他的系统如此灵活,他可以在运行时更换渲染引擎,甚至可以告诉他的系统同时使用渲染器(软件渲染器和硬件加速渲染器)时,这种思想训练就开始了。同时他可以检查差异。到目前为止,我编写的系统还没有这么灵活

4
游戏中的时间倒转机制
我想知道游戏中的时间操纵机制通常是如何设计的。我对时间倒计时特别感兴趣(类似于最新的SSX或波斯王子)。 该游戏是2D自上而下的射击游戏。 我尝试设计/实现的机制具有以下要求: 1)除玩家角色外,实体的动作是完全确定的。 实体采取的行动基于自关卡开始以来所取得的帧数和/或玩家在屏幕上的位置 在关卡中的设定时间产生实体。 2)时间倒转通过实时倒转来实现。 玩家的动作也被反转,它以相反的方式重放玩家的行为。播放器在反转时间内无法控制。 反转所花费的时间没有限制,如果需要,我们可以一直反转到关卡的开始。 举个例子: 框架0-50:玩家在此期间向前移动20个单位敌人1在框架20处产生。敌人1在框架30-40期间向左移动10个单位玩家在框架45发射子弹子弹向前移动5个(45-50),并杀死敌人1框架50 反向将实时回放:玩家在此期间向后移动20个单位,敌人1在第50帧复活。子弹在第50帧再次出现。子弹向后移动5并消失(50-45)敌人向左移动10(40-30)敌人在框架20。 只是看着运动,我对如何实现这一点有一些想法,我想到了一个界面,该界面可以在时间前进或后退时改变行为。而不是这样做: void update() { movement += new Vector(0,5); } 我会做这样的事情: public interface movement() { public void move(Vector v, Entity e); } public class advance() implements movement { public void move(Vector v, Entity e) { e.location += v; } …

3
惯性张量的计算
我承认,这是一个复杂而冗长的问题,我还不太了解,所以我将尽力解释。 简短版:是否有通用的c ++ / physx公式可根据对象形状计算惯性张量? 长版: 对于我们的物理学,我们需要指定x,y和z惯性张量。当前,我们的方法几乎只是基于质量的比率。因此,如果一个对象在X轴上较长,而在Y和Z上较薄,并且质量为10000,则将Z和Y设置为7000,将X设置为3000。(这不确切,只是给出一个想法) 这比较好用,但是我们最大的问题是当某处存在关节不稳定性时,我们必须不断猜测张量,直到找出最合适的。如果我们进行非常大的物理模拟,而20个以上的关节中有一个关节使所有其他关节失去稳定性,则这将变得非常耗时。 我正在研究的是一个函数,它将采用对象的边界框并希望计算出相对准确的张量。我已经从http://en.wikipedia.org/wiki/List_of_moment_of_inertia_tensors进行了一些数学运算,并制作了一个函数,该函数基本上可以像下面的类似旋转一样工作。 或者,如果旋转结束,则如下所示: 因此,这似乎给了我类似于我们一直使用的方式的结果,但是我不想切换到这种方式而不确保它能正常使用。以下是基于具有立方体和中心枢轴的第一个图像的我的函数的代码。 NxVec3 CalculateInertiaTensor( VisBoundingBox_cl boundingBox, float m ) { float width = boundingBox.GetSizeX(); float height = boundingBox.GetSizeZ(); float depth = boundingBox.GetSizeY(); float xTensor = 0.083f * m*(height*height + depth*depth); float yTensor = 0.083f * m*(width*width + depth*depth); float zTensor = …

2
具有不同高度的相邻图块的图块地图/地形实现
! 我正在寻找有关切片地图的一些信息,或更确切地说,是什么类型的切片地图被称为。 我对过山车大亨或运输大亨系列游戏中使用的实现方式感兴趣,并且一直在研究矢量场地形和高度图地形,但我不确定它们是否适合我的期望发展。 很难找到任何像样的信息,因为大多数人将其称为等轴测图,但是我正在寻找以固定的正交透视图创建3D图像的方法。我了解磁贴图的基础存储与渲染方式无关,但我不希望像老式的口袋妖怪/塞尔达游戏一样创建2D磁贴图,更像暗黑破坏神那样具有包含功能悬垂的悬崖和倾斜的地形。 我只是想找到合适的条件来搜索google和stackoverflow的资源,以帮助我确定要走的道路。 到目前为止,我已经设法在不使用存储在VBO中并渲染为线框的height / y分量的情况下充实了基本的贴图。到目前为止,这看起来还不错,但是我设想在尝试操纵单个顶点以创建悬崖和坡度而不影响相邻图块时会遇到问题。 我应该研究一种特定类型的实现吗?我以为如果在矢量场地形上找到了相当数量的信息,就可以破解它,但我不确定这是否也会产生正确的结果。 如果有人可以帮助我了解一下,将非常感谢您的帮助:) 更新资料 我提供了一张图片,以进一步阐明我想要实现的目标: 从如何创建倾斜(高度)等距图块借来的图像 此图像显示了我要生成的地形类型,但不包括我对建模感兴趣的“悬崖”或悬垂的地形类型。但是它确实提出了我没有考虑的其他一些问题,即; 如何处理“水”等图层(在图像的左上方)以包括水之下的可见地面? 如何适应地图的“边缘”,以便渲染泥土来将世界描述为非平坦的实体? 是否可以使用这种地形的基础存储来建模物理模型,例如滚下山坡的球或穿越斜坡的运动员的运动速度? 我的想法是,可以使用8个顶点对地形的每个图块进行建模,其中4个主顶点覆盖实际图块本身,而其余4个顶点用于对每个图块的侧面/墙进行建模。我在此实现中看到的两个问题是:a)世界地图的尺寸​​实质上增加了一倍,b)鉴于并非所有图块都将包含“墙”,因此某些图块最终将具有未使用的冗余顶点。 我想创建一个地形编辑器,该编辑器允许每个图块变形以及在游戏过程中更改地形的功能。这本身带来了其他问题,例如;VBO可以在即时修改的同时用于存储和渲染地形吗?是否可以在不影响相邻图块的情况下修改顶点? 我的印象是我要么使事情变得过于复杂,要么陷入分析瘫痪,因为我忽略了编写任何代码来解决问题而又不清楚我将如何实现自己想要的目标。 再说一次,我真的只是在寻找正确的方向。有没有一种特定类型的tilemap / terrain实现,可以满足3D地图在地图编辑器以及游戏过程中变形的需要,或者我必须自己滚动一下?我并不想在这里重新发明轮子,但是由于我不确定要寻找的内容,我正在努力寻找任何资源。 如果任何人都可以提供任何信息,资源或代码片段,将不胜感激,因为我急于弄脏我的手,并开始生产除我现有的扁平线框以外的其他东西。 谢谢阅读!

2
Unity Occlusion Portal:什么以及如何?
(在这里,我在Meta上吃了我的话,即在Unity Answers上发布Unity问题...,因为该网站的响应速度不及此网站。) Unity提供基于单元的遮挡剔除(我相信是通过Umbra)。但是,它支持的较新功能是“遮挡门户”。 问题是,如果基于BSP的遮挡剔除已经是Unity的功能,门户将添加什么,以及如何添加? PS。这个问题不是“什么是门户?” -我知道原始的Quake BSP风格的门户-这部分是为什么我在Unity中发现显式门户概念很奇怪的原因,因为它仍然使用BSP。

4
仅明确告知玩家成功的缺点是什么?
我正在研究教育软件,并试图增加参与度(“乐趣”)。 达成目标的清晰进度(参与原则之一)表明我们需要让玩家知道他们的表现。但是我们不希望玩家变得士气低落。(这些“玩家”患有脑部受伤,因此很容易士气低落。) 因此,我认为我们只希望明确显示前进的进度(“您'升级了'”),但是我们没有“生活”(因为您可以“失去”他们)。 澄清: 可以将其视为教育“辅导”软件(类似于Kahn Academy),当他们得到错误答案时,我们已经向他们提供了反馈。我们还帮助他们获得正确的答案。 但是,当他们表现出色时,他们就会毕业更高的水平。如果他们在很长一段时间内表现出色,就会获得某种奖励/认可,证明他们的表现特别出色。 我想知道的是,如果他们持续表现不佳,我们是否也应该给予他们认可(显然比“嘿,你很烂”还好),这样这种“失败识别”并不能真正为他们提供更多信息。? 这是罗马皇帝垂下大拇指(角斗士们已经知道他在战斗中的表现)。 有什么缺点吗? (我猜可能是因为他们没有讲完整的故事,所以他们对游戏的反馈失去了信心。有点像父母只给你赞美,你可能会开始觉得他们在说这很不错。)

2
跨多个着色器共享功能
简单的问题: 在GLSL中,有没有一种方法可以在多个着色器之间共享功能,或者我是否必须在每个需要它们的着色器中定义所有功能?
10 glsl 

3
MMO是否需要了解黑客机制?
说我正在计划,将来(不是现在!我需要首先学习很多东西)希望参加一个小组项目,该小组项目将制作大型多人在线游戏(mmo),而我的工作将是网络一部分。我对网络编程不是很熟悉(我读过一本关于PHP,MYSQL的非常基础的书,并且对WAMP有点了解)。 在学习PHP和MYSQL的过程中,我应该研究黑客吗?在端口扫描,路由器黑客等中进行黑客攻击。在MMO中​​,人们总是在试图欺骗,机器人等,但最糟糕的情况是有人入侵数据库。这只是我的构想,我真的不知道。但是,我确实非常了解网络,例如子网划分/端口/ IP(本地/全局)/ etc。 以您的专业意见,(如果您理解该主题,请启发我)我是否应该了解这些事情以应对这种情况的发生? 另外,除了我提到的内容(端口扫描,路由器黑客攻击)之外,还有其他与黑客攻击有关的事情值得我关注吗?我对网络的恶意/安全方面不太熟悉。 还有一个注意事项:我不是要学习如何破解的小孩子。我只是想在上大学之前尽可能多地学习,而且我真的需要知道是否需要学习。

1
从深度图创建“磁性变形器”的最佳过滤器是什么?
在我的项目中,我正在创建一个用于变形高度详细的网格(衣服)以使其“适合”凸形网格的系统。为此,我使用商品的深度图和“船体”来确定在世界空间的哪个点发生偏离和程度。 简单地将所有被遮挡的顶点转换为“船体”定义的深度是相当有效的,并且具有良好的性能,但是它存在无法保留网格特征的问题,并且需要进行大量剔除才能避免假阳性。 相反,我想从深度偏差图中生成一组简单的“变形器”,这些变形器将(向外)“变形”的网格的所有顶点向外(在世界空间中)推入。这样,可以保留网格的所有特征,并且不需要复杂的启发式方法即可剔除不适当的顶点。 我不确定如何生成此变形器集。我正在想像一种算法,尝试将球面与某个范围内的连续偏差的每个斑块进行匹配,但不知道从哪里开始。 谁能建议一个合适的滤波器或算法来生成变形器?还是换一种方式“压缩”深度图? (*推动,因为它适合凸的“凸起”类人动物,所以变换很可能是从表面的POV“球形”开始的。) 编辑:这是正确建议的图像/图表,它说明了我正在尝试实现的目标。 另外,我应该说,自从发布此问题以来,我在这个问题上做了很多工作,尽管我从未解决过如何获得变形器的问题,但我最终还是决定将深度图不适用于: 如果变形网格是不完整的,有可能获得被映射纹素的意思是对的凸网的另一边(因为它们没有被掩盖那些靠近摄影机放在正确的一边)。 效率不如我希望的那样高,因为每个变形都需要6个贴图。 并不是说这些不是无法解决的,而是另一种解决方案,它涉及在GPU上运行的内核中进行碰撞测试,从而可以得到更高质量的结果,并且虽然可能没有那么快,但结果却简单得多。 我仍然认为这个问题很有趣,并且会对任何答案都感兴趣,因为我确信在某些情况下它会是更可取的。


2
肮脏的2D地图渲染
我不断听到人们谈论HTML5地图渲染的“脏渲染”。我已经用Google搜索并搜索了GameDev,但是关于它的内容并不多。 到底是什么 如何正确实施?

1
如何为保持像素保真度的转换2D精灵创建“复古”像素着色器?
下图显示了在背景上方通过点采样渲染的两个精灵: 左头骨没有应用旋转/缩放,因此每个像素都与背景完美匹配。 右头骨旋转/缩放,这将导致不再与轴对齐的较大像素。 我如何开发一个像素着色器,该着色器将在右侧以与场景其余部分相同大小的轴对齐像素来渲染转换后的精灵? 这可能与在“猴子岛”(Monkey Island)等旧游戏中如何实现精灵缩放有关,因为这是我试图实现的效果,但增加了旋转功能。 编辑 根据kaoD的建议,我试图通过后期处理解决该问题。最简单的方法是先渲染到一个单独的渲染目标(下采样以匹配所需的像素大小),然后在第二次渲染时将其放大。它确实满足了我上面的要求。 首先,我尝试这样做,Linear -> Point结果是这样的: 没有失真,但结果看起来很模糊,并且丢失了大多数高光颜色。在我看来,它打破了我需要的复古外观。 我第二次尝试Point -> Point,结果是这样的: 尽管存在失真,但我认为这可能足以满足我的需求,尽管它看起来比静止图像确实好看。 为了演示,这是该效果的视频,尽管YouTube过滤掉了其中的像素: http://youtu.be/hqokk58KFmI 但是,如果有人想出一个更好的采样解决方案,该解决方案可以保持清晰的外观,同时减少移动时的失真量,那么我将继续待几天。

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.