游戏开发

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

1
基于图块的2D Platformer的地形生成
我目前在某种程度上正在开发类似于Terraria的基于图块的2D平台游戏,尽管我在地形生成方面遇到了困难。我完成了一些基础工作,尽管它们没有任何有用的作用。 我尝试了几种不同的技术,例如Perlin Noise,并了解了其他一些技术,例如Midpoint Displacement,尽管我不确定哪种方法最好,或者无法结合使用不同的技术来生成不同的区域。(例如中点位移表示地形的一般形状,Perlin Noise表示洞穴的形状。) 我已经找到了一个很好的解释,说明如何使用“ 意外噪声库”将其分层,尽管它是C ++语言,而且我不了解足够的C ++语言将其编译成可从C#中使用的DLL。尽管我不知道如何将两个效果(通用基的渐变,然后是详细的分形)合并在一起,但我尝试用C#复制它。 目前,我正在使用等离子分形,结果差异很大。例如,它可以生成几乎没有任何表面的地形,也可以生成根本没有任何表面的地形。 好的地图的示例会有所改进,但会更好。(黑色为实心,白色为空): 还有一个可怕的地图的例子。(黑色为实心,白色为空): 基本上,我要问的是,什么是生成地形的更好方法,或者强迫它确保有合理的表面积,并且尽快生成。或者,或者,如何使用C#实现与“意外噪声库”相同的结果。 任何例子将不胜感激。

4
战术RPG的A *算法?
我在用C ++编写一个非常糟糕的战术RPG搞乱了。到目前为止,我已经有了一个2D瓦片贴图,并且刚刚使Wikipedia中基于伪代码的A *算法起作用。 但是,真正的战术RPG不仅会在平坦的飞机上找到最佳路径,然后再向那里移动。它们通常具有有限的移动范围,并且必须向上或向下爬。如果您曾经玩过《最终幻想战术》,则这些内容会受到“移动”和“跳跃”统计数据的影响。这是我迷路的地方。如何更改A *算法,以便找到通往目标的最佳路径,但是路径只有这么多图块?我应该如何考虑身高差异并考虑统计数据?我如何实现跨越差距? 如果有帮助,现在我的地图将由Tile对象的Vector表示。每个图块都有指向北,南,东和西图块的指针,如果那里不存在图块,例如沿着地图的边缘或将图块设置为不可通过,则将它们设置为nullptr。

1
什么是“ IHV”?
我在这里看到了几个有关“ IHV”的问题,例如这个问题,但没有定义缩写。 Google搜索提供了“人间病毒学”,下面是几个链接,其上是Wikipedia消除歧义的页面,其中包括“ 独立硬件供应商 ”,这似乎与我在这里看到“ IHV”的上下文更为相关,但是我不确定。

8
我如何防止/平衡等待和折腾,以应对冷却机制
我正在研究带有类的基于回合的RPG。我希望其中一个施法者类具有标准的魔法点,但另一个要具有时间限制的能力,其中一个或多个 每N分钟实时使用一次功能 每N回合使用能力 每天使用一次或N次能力(睡眠以恢复,或等待昼夜循环) 会有一些恢复性物品可以恢复您的“费用”。这些能力比普通法术更强大,但会受到限制。这个拼法课程是一个爆破类:给您很大的成功,但由于局限性而很少出现。派对把它们当作行李搬运,直到他们陷入困境或碰上老板,然后释放锤子。我喜欢它作为增加深度的一种选择,它具有有趣的加速运行的可能性。 如果聚会必须跋涉回到城镇并入睡以补充能量,那么最后一个很容易达到平衡,但是我有一个昼夜循环。我看到的是以下问题: 实时/每天N次 玩家可以等待。我可以对持续时间进行惩罚,但是这样会大大降低实用性。这也意味着玩家不在玩游戏,毕竟这应该是娱乐。没有什么好玩的。 每战斗N次 玩家可以使每个角色每轮防御/治愈,直到爆发者释放出另一轮大伤害为止。我实际上希望这是可行的,但我不希望它成为战斗的最佳策略。到目前为止,这似乎并不是一个大问题,因为施法者只是循环使用较小的力量,直到爆炸开始。在游戏初期,这很困难,但这是平衡的一部分。问题是我很难让它不是OP显然是最好的,同时仍然保持足够的有用。 关于如何平衡这些机制以减轻露营/起伏的任何建议?


4
程序生成特定区域的建筑物
我和一个团队正在开发一个工厂建造者游戏,该游戏在游戏开始时为玩家提供一个随机的工厂。为了确保有一种“公平”的感觉,理想情况下,随机生成的工厂的面积应在(占位符值)30的几个单位内。 编写满足这些规范的基本随机矩形生成器相对简单,但我们的目标是使工厂变得更加复杂,可能由2个,3个甚至4个相交的矩形组成,从而产生更复杂的形状(例如L, U和O形建筑物)。 我尝试生成一个随机矩形,然后使用基本代数填充第二个矩形,但是到目前为止,我并没有实现超过2个矩形的运气,即使如此,我对仅2个矩形设计的结果也不满意。 一些更相关的信息:2D自上而下一些机制是factorio样式,因此房间应该具有合理的长度和宽度,以便为机械留出空间(目前在Java和Lua中使用)(可以根据需要使用内置的库) 提前致谢! 编辑:当我说“好”或“坏”的输出时,不良的输出将是具有播放器无法使用的空间的任何输出。工厂形状限制了玩家可以放置工厂机器(例如传送带)的位置。理想情况下,工厂的区域不应只有1-2个块的宽度,形状不应该是一个或两个大的矩形,而将1-2个块的线“垂悬”到一侧。一个好的输出是所有地板空间都是“可行的”,因此所有区域至少应为3-4块宽。好的输出并不一定总是很复杂(可以使用1或2个矩形),但如果由超过1-2个矩形组成,则输出的机会就很大。

5
在RPG中,除了战斗之外,解决冲突还有哪些乐趣?
作为成长于一位数的《最终幻想》游戏和AD&D的人,解决RPG问题的方法很少像打架一样。不同的成就流(对象获取/制作,技能树,谜题,玩家策略,团队组合/协同作用等)都进入了几分钟的疯狂动作,从而随着游戏的进行,通过统计数据增加成就感和进步感。 就是说,出于充分的原因,我们倾向于将角色扮演游戏玩家描述为杀人犯。当您激励人们杀死事物时,不久所有的问题就开始像用剑击中一样。而当您能够偷走任何没有被钉牢的东西时,为什么不这样做呢? 解决其他类型的冲突时可能会很有趣(例如,农场/文明/模拟游戏,用于建造东西;间谍/忍者/刺客游戏,用于技巧和利用情况;社交游戏,用于角色扮演或思考)另一个人),在狭窄的场地之外,他们通常不会很有趣。而且由于我们仅限于与计算机对话(至少在单人游戏中),社交游戏甚至无法探索其整个场所。 我正在绞尽脑汁,试图弄清楚如何正确地将“不杀,不偷”的社会理想游戏化,以使攻击或偷窃成为一种有意识的选择,而不仅仅是默认的行动手段。 ..但同时又要保持与格斗/偷窃游戏相同的娱乐输入多样性。大多数游戏只是说明后果:镇守是在您和/或某个派系不愿与您打交道之后派遣的。但这感觉不自然,只会引起系统的进一步博弈,最终产生更好的凶杀手。 我这样做的理由是什么?我的游戏的主题是关于道德如何在后启示录中发挥作用的一个深奥的哲学主题(想一想中途可以理解的Xenosaga)。虽然杀人和偷窃将是其中的一部分,但我感到我们作为游戏玩家的自然倾向不允许这个问题“公平地”解决。 关于如何将杀戮和偷窃与其他形式的冲突解决方案放在真正平等的竞争环境中的想法?

9
游戏青少年开发工作经验[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Game Development Stack Exchange 的主题。 2年前关闭。 我有一个十几岁的儿子,他长大后想从事游戏开发和设计工作。我们去过几次会议,解释了找工作时经验的重要性。我自己还是经常面试新员工的IT开发人员,所以我知道关键经验是多么重要。因此,我们一直试图在暑假期间找他在伦敦的Games Dev公司工作一些星期,但是却一无所获。 我的儿子非常聪明,预计将获得8+个高级GCSE(旧成绩为7+或A / B),他计划继续获得A级,然后在大学学习计算机科学。他具有一些Python编程经验。他想要的只是一些工作经验,如果他只是跑腿办事和煮咖啡,那只要他还以某种方式参与游戏开发过程就可以了。他也并不期望得到报酬(尽管那会是奖金)。 我已经联系了多家公司,提供了详细信息和简历,但没有得到他们的回音。对于我来说,这似乎很奇怪,除了这些公司的时间很少,在这里似乎没有什么可失去的。 所以我的问题是,在这种情况下是否有阻止游戏公司雇用青少年的措施?任何其他有关的建议都将受到欢迎。
15 career 

2
可以假定哪些游戏手柄功能?
当我提供游戏手柄支持时,最简单的解决方案似乎是假设使用XBox控制器并使用一个将最常用游戏手柄映射到相似布局的库。 现在,如果我想最大程度地减少客户的抱怨,我是否可以仅使用所有按钮(以一种明智的方式),还是应该避免使用某些按钮,因为某些通用控制器上缺少这些按钮? 问题主要是关于PC(Linux / Windows / Mac),但是如果考虑移动设备的游戏手柄,答案是否会改变? 我知道的一件事是,我们不能使用任何要求用户同时按下LT和RT的输入方案,但是这种限制也会影响XBox控制器。
15 mobile  pc  gamepad 

1
流动的GPU计算水
我具有土木工程背景,并定期进行水力学和水文分析。他们为这类事情出售学位,但这实际上不是火箭科学。我最近想到了在GPU上为地形实现整个水文和水力过程。我是最近才学习计算着色器的,所以我目前在设计方面比设计并行GPU工作流程要好得多。 您可以使用以下公式计算降雨事件期间产生的水量: Q (CF/S) = c * I (in/hr) * A (acres) 我很难超越计算甚至第一个区域的“面积”。 当前实施概述: 地形是1单位间隔的规则顶点网格 高度图为每个顶点包含一个R32高度值 目前,我只允许沿4个基本方向流动(无对角线) 我正在使用Texture2D [int]作为已经分析过的顶点的模具 当前算法: 当地形工具处于活动状态且现在不处于活动状态时... 清除“模具”。 扫描整个地形以获取最低海拔。 那一点是CS_Flood的初始输入。 CS_Flood使X轴通过。 每个输入顶点都在X-和X +方向上投影最多2048次。 找到具有OOB坐标的相邻顶点将指示该方向上的地形边缘。CurrentPoint附加到BoundaryPoints缓冲区,并且该方向的投影循环终止。这很容易,并且每次都很好用。 高度大于或等于当前顶点高度的相邻顶点将在模具中标记,并添加到NextPass缓冲区中。 高度小于当前顶点高度的相邻顶点表示山脊的顶点,并终止投影环。将来的洪水填充迭代可能会在山脊的底部,“后”侧向上流动,并再次检测到同一山脊。 为此,任何被多次检测到的峰/谷点都不会成为边界点。 仅将一次检测到的任何峰/岭点附加到BoundaryPoints,并终止该方向上的投影循环。 CS_Flood使用X轴通过生成的点作为输入,以相同的代码进行Z轴通过。 现在,CS_Flood继续在两个方向上无限期地交替。最终,每当CS_Flood完成并且NextPass缓冲区为空时,我将终止整个循环。 理想情况下,在那一点上,边界点将包含在自然排水沟上出现的每个顶点。降落在边界内的水滴最终流到相同的低点。水滴降落到边界上,导致“其他地方”。 然后: 在不清除模具的情况下,重新扫描地形以查找最低的非模具顶点。 迭代CS_Flood。 重复直到模具装满(或类似的东西)。 这些颜色很难感知3D。这显示了在整体高程处的轮廓线:( 一个孔,在边缘附近被一个护堤包围) 大约有10种独特的方法可以使顶点流失。为每个颜色赋予独特的颜色,如下所示:( 可见的圆形工具标记,“山脊”很好地显示) 这将CS_Flood生成的每个点(边界或其他)显示为POINTLIST: 该算法几乎总是 有效。有时,它甚至可以正常工作。其他时候,算法显然包含在正确的形状中,但是将继续无限期地输出点。如第三个屏幕截图所示,有时会感到困惑。我必须忽略另一种情况/因素。如果能找到我的疏忽或提出更简单和/或更优雅的方法来解决问题的建议,我将不胜感激。 MissingPoint!可以通过将算法检测到的每个新的BoundaryPoint添加到NextPass缓冲区中来提供帮助。在下一次传递期间,该创可贴所生成的99%的点将浪费少量的GPU时间,以确定它们无法走到无处可去。在第一遍中,发送LowestPoint以及其他NextPass点也将处理此特定情况。 我知道这是合理的,并且如果有足够的时间,我将能够为它做足够的创可贴以完成我想要的事情。如果可能的话,我想以一种更好,更聪明,更快的方式进行操作,但是我没有足够的经验来更好地了解。

6
如何使用C#在Unity3D中正确区分单击和双击?
我要在这里理解和学习的东西是非常基本的:使用C#正确区分Unity中3个主要鼠标按钮的单击和双击的最通用,最精致的方法是什么? 我对“ 正确 ”一词的强调并非一无是处。尽管令我感到惊讶的是,以前似乎从未在此网站上问过这个问题,但是我当然已经在Unity的论坛和Unity自己的问答页面上搜索并找到了许多类似的问题。但是,正如在这些资源中张贴答案的情况通常一样,它们似乎都是错误的,或者至少有点过于业余。 让我解释。提出的解决方案始终具有两种方法中的任何一种及其相应的缺陷: 每次发生单击时,请计算自上次单击以来的时间增量,如果该时间增量小于给定的阈值,则将检测到双击。但是,此解决方案导致在检测到双击之前检测到快速的单击,这在大多数情况下是不希望的,因为这样会同时激活单击和双击操作。 粗略的例子: float dclick_threshold = 0.25f; double timerdclick = 0; if (Input.GetMouseButtonDown(0) { if (Time.time - timerdclick) > dclick_threshold) { Debug.Log("single click"); //call the SingleClick() function, not shown } else { Debug.Log("double click"); //call the DoubleClick() function, not shown } timerdclick = Time.time; } 设置激活单击的等待延迟,这意味着,每次单击后,如果自上次单击以来的时间延迟超过给定阈值,则仅激活单击操作。但是,这会产生缓慢的结果,因为有可能在检测到单击之前注意到等待。更糟糕的是,这种解决方案在计算机之间存在差异,因为它没有考虑用户在操作系统级别上双击速度设置的速度或速度有多慢。 …
15 c#  unity  mouse 

1
什么是GLEW,它如何工作?
我正在寻找对初学者友好的解释。官方网站的解释太短,导致我提出的问题多于答案: 什么是GLEW? GLEW开发人员页面显示: OpenGL扩展Wrangler库(GLEW)是跨平台的开源C / C ++ 扩展加载库。GLEW提供了有效的运行时机制,用于确定目标平台上支持哪些OpenGL扩展。 但是什么是扩展加载库? OpenGL的Wiki说 OpenGL加载库是在运行时加载指向OpenGL函数,核心以及扩展的指针的库。 加载指向OpenGL函数的指针是什么意思? 什么是扩展名? “ 核心和扩展 ” 是什么意思?
15 opengl  glew 

1
*调用* =(或* =调用*)是否比编写单独的函数(对于数学库)要慢?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为话题成为Game Development Stack Exchange。 4年前关闭。 我有一些矢量类,其算术函数如下所示: template<typename T, typename U> auto operator*(const Vector3<T>& lhs, const Vector3<U>& rhs) { return Vector3<decltype(lhs.x*rhs.x)>( lhs.x + rhs.x, lhs.y + rhs.y, lhs.z + rhs.z ); } template<typename T, typename U> Vector3<T>& operator*=(Vector3<T>& lhs, const Vector3<U>& rhs) { lhs.x *= rhs.x; lhs.y *= rhs.y; …

2
您如何为特征蠕变做准备?
在预生产期间如何准备特征蠕变? 特征蠕变是指您处于生产阶段时决定“如果这是特征会很酷!” 那会增加n个小时的开发时间,而这是没有考虑的,除非您是暴雪,否则就没有时间。您无法预料它在预生产期间是很酷的功能,因为该功能仅在生产期间发现。 在预生产期间我该怎么做才能解决或防止特征蠕变或为特征蠕变做准备? 我应该允许特征蠕变并剪切较少的期望特征吗?还是由于体系结构不是为新功能设计的,这是否会带来问题?我是否应该说没有功能,除非它们适合现有架构? 我知道这是一个广泛的问题,但我希望它不会因此而告终。这是游戏开发中的主要问题,应予以考虑。


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.