游戏开发

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

3
您如何为内存不足情况做准备?
对于范围界定明确的游戏而言,这可能很容易,但是问题是关于沙盒游戏,允许玩家创建和构建任何东西。 可能的技术: 使用上限的内存池。 删除不再需要的对象。 在开始时分配额外的内存,以便以后可以将其作为恢复机制释放。我会说大约2-4 MB。 这在移动/控制台平台上更可能发生,在该平台上,内存通常受到限制,与您的16 GB PC不同。我假设您完全控制了内存分配/释放,并且不涉及垃圾回收。这就是为什么要将其标记为C ++。 请注意,我并不是在谈论有效的C ++项目7“为内存不足的情况做准备”,尽管这很相关,但我希望看到一个与游戏开发更相关的答案,您通常会对游戏开发有更多的控制权发生。 总而言之,当您针对内存控制台/移动设备有限的平台时,如何为沙盒游戏的内存不足情况做准备?


1
游戏引擎设计– Ubershader-着色器管理设计
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2年前关闭。 我想实现一个带有延迟着色的灵活的Ubershader系统。我目前的想法是从模块中创建着色器,以处理某些功能,例如FlatTexture,BumpTexture,位移映射等。也有一些模块可以解码颜色,进行色调映射等。这具有我可以如果GPU不支持某些类型的模块,请更换它们,以便我可以适应当前的GPU功能。我不确定这种设计是否良好。我担心我现在可能会做出错误的设计选择,以后再为此付出代价。 我的问题是,在哪里可以找到有关如何有效实施着色器管理系统的资源,示例和文章?有谁知道大型游戏引擎是如何做到的?

4
什么是“工具开发”?
我一直在寻找游戏行业中的不同职位,而我看到的很多招聘职位都是“工具开发人员”职位。我不知道这到底是什么。 有人可以向我解释这是什么吗?而且,如果任何人都有任何链接到材料可以帮助我更多地理解它,那么我们将不胜感激。


3
添加或删除单元时,如何保持矩形形状?
我有带有行和列的矩形形式的机器人。在从地层中添加或删除机器人时会出现问题。发生这种情况时,漫游器必须重新布置自己,以使矩形形状的纵横比仍大致相同,并尽可能地为矩形。这该怎么做? 一些想法: 添加或删除机器人时,请使用新的机器人总数和所需的恒定长宽比来计算最适合该长宽比的地层的新宽度和高度。然后以某种方式重新调整机器人以适应新的尺寸。 移除机器人后,将其后面的机器人移到其位置,然后继续直到到达编队的尽头。然后通过以某种方式改组后排机器人来尽可能地使后排保持平衡。 另一个完全不同的想法是模仿分子结构保持在一起的方式。通过吸引四个最接近的机器人,然后排斥其余所有机器人,使每个机器人都希望被其他四个机器人包围。击退所有机器人(包括四个机器人),它们太近以至于无法使用平方反比法确保分离。您还需要额外的力来塑造整个结构。但是,这听起来非常昂贵。 更新:因此,研究萨拉赫姆的答案,我想出了一个很好的通用函数,它给出了良好的尺寸。 首先,我解决了下面的宽度和高度联立方程,然后对答案进行了四舍五入。 width/height=aspect ratio of your choice width*height=number of bots 这为您的机器人数量提供了最接近该纵横比的整数矩形。最接近的矩形一半时间太大,一半时间太小(当然,有时会恰到好处,但谁在乎那些矩形)。在矩形是一个案件有点过大,需要做什么需求。后排最终将几乎满,这是理想的。在矩形是一个案件有点太小了,你有问题,因为极小的微小溢出将不得不去到它自己的等级创建了一个等级上它只有几个机器人,它并不十分好看。在某些情况下,差异也很大(大于宽度的一半),在这种情况下,相加或减去一级即可使差异变小。然后,当矩形太小时,添加一列以使其稍大一点。这样做之后,看起来后排机器人将始终至少具有其他排机器人的一半。 更新 获得尺寸后,将其与当前尺寸进行比较。如果新维度的边界较大,则对于每个等级,从下面的等级弹出bot,并将它们推入当前等级,直到该等级上的bot数量等于正面。继续执行该算法,直到获得第二名。使用此算法,机器人将可以有效地适应新的维度。在那之后,我只是将新旧的推到后排。对于新的门面较小的情况,该算法略有不同,但是您可以弄清楚! 接下来还有两个问题。删除,以及一种更灵活的添加方法,其中不必将新漫游器分配给后排,而是在添加新漫游器时最接近它们的位置。


2
使用C ++ 11进行跨平台游戏引擎开发
注意:这不是有关C ++ 03和C ++ 11的“给出您的意见”问题。 我们的游戏引擎是用C ++ 03编写的,旨在在Windows,OSX和iOS上进行编译。计划在不久的将来为Linux提供支持。关于控制台,我们的经验有限,这就是为什么我要问这个问题。 当前,我们正在争论是否需要在不久的将来切换到C ++ 11并使用C ++ 11标准的不兼容功能而将引擎移植到任何当前gen控制台上的问题(也许一些控制台支持的编译器尚不支持C ++ 11?我们不知道...)。 因此,拥有跨平台和游戏机经验的游戏开发人员,您认为我们应该坚持使用C ++ 03,直到新一代游戏机问世,并且大多数人都已转换为C ++ 11标准(他们已经这样做了吗?)。还是大多数控制台都在使用/支持已经支持C ++ 11功能的编译器(VC ++,GCC或变体?)?

2
通过Unity3D中的门户时如何融合两个摄像机
在提出问题之前,我知道最明显的解决方案是使用规范化的视口矩形,但是我需要比矩形更复杂的形状,并且我考虑使用视口矩形,但似乎没有是我的解决方案。 编辑:有些人对我的问题感到困惑,让我再详细一点。 发生的情况是,随着玩家进入一个门户,我创建了一个克隆的FPS控制器,然后将其移出了另一个。这给了我两个摄像头,以及您在右上方看到的视图。它只是显示一台摄像机,并剪辑门户。我想要的是与此类似的东西摄像机融合在一起,创造出平滑过渡的错觉。我想做的是删除所有绿色底纹图像中的所有内容,并将其替换为其他相机。这样一来,您可以获得摄像机A的视图从门户中移出的峰值,并与摄像机B的视图在另一个门户中移出的峰值相融合,以获得一个完整的图像。随着您在门户中的移动,切割也会相应地更改。 我一直在设计门户网站系统,但我的所有工作都陷入了困境,包括让玩家流畅地通过门户网站。我现在的主要问题是获得Valve的相机混合效果。我需要两个摄像头将它们无缝融合在一起,就好像您正在通过门户戳头一样。它不能只是一个矩形,它必须匹配,但是玩家正在通过门户进行查找。 我目前最好的方法是在每个门户后面投影一个深度蒙版着色器,然后将您正在旅行的门户中的相机制作成仅深度的。然后以某种方式混合两个摄像机。我的主要问题是弄清楚我该怎么做,如何使第二台摄像机仅渲染门户网站之外的内容,而其余默认设置为摄像机1来获得一个全屏投影。 如果您可以给我一些想法,或者解释一下如何使用深度蒙版着色器来实现这一点,那将是极大的帮助。我将继续努力,并在取得突破时进行更新。
18 c#  unity  camera  valve  portals 

4
为什么MMORPG仍然使用多台服务器?
MMORPG,一些英雄联盟甚至是《星际争霸2》之类的MOBA通常会迫使您选择服务器。通常,它们是美国,欧盟和东南亚国家/地区(MMORPG),每个地点都有很多。我可以看到几年前这是必须的,但是现在随着AWS和类似产品的问世,它们使您可以无缝地扩展“服务器能力”,为什么还需要单独的服务器? 我的思路是这样的(以《星球大战:旧共和国》为例):-您始终处在一个星球上,与其他星球是孤立的“实例”。-如果一个星球上的人数过多,SW:TOR会创建一个新的世界实例,并将玩家放置在那里。-如果您离开世界/切换实例,则会显示一个加载屏幕 那么,为什么游戏不能为这个星球创建一个实例。这个执行个体(只有这个执行个体)在您的资料库中拥有您目前的资料,并管理x个播放器。x-50播放器进入该实例后,将启动一台新服务器,并在该实例上生成新的人员。保留50个位置以切换到您的组等。 在所有三个主要区域都可能有一个实例来将等待时间保持在较低的水平,但是如果您可以忍受140ms的延迟,那它将允许您仍然与SEA等其他玩家一起玩(这仍然没什么大不了的)。 无论何时切换实例或前往另一个世界,当前服务器都会将所有数据提供给下一台服务器,从而确保您不需要一个大型的集中式数据库。您仍然可以定期获取更新以进行分析。 当您注销或服务器失去连接时,然后可以将数据传输到针对存储数据进行了优化的海量数据库中。然后可以优化实例服务器以实现高吞吐量。 是否有任何特定原因无法解决?我还有其他问题吗?
18 architecture  mmo 

3
我可以从版本控制中忽略哪些libgdx项目文件?
在自动创建的libgdx项目中,我可以安全地告诉Git(或其他版本控制系统)忽略哪些文件? 我正在考虑这些: *-android/.settings/ *-android/bin/ *-desktop/.settings/ *-desktop/bin/ *-html/.settings/ *-html/gwt-unitCache/ *-html/war/WEB-INF/classes/ *-html/war/WEB-INF/deploy/ *-html/war/assets/ *-html/war/ */.settings/ */bin/ 我想念一些吗?哪里有完整的清单?

1
如何检测壁架?
在我的游戏中,我希望我的角色能够抓住并抓住壁架,并有足够的空间提拔自己。 如何检测是否有壁架,以及角色是否有足够的空间爬上去?
18 physics 

7
我需要一个Point和一个Vector对象吗?还是仅使用Vector对象表示一个点就可以了?
在构造与朋友一起开发的引擎组件时(出于学习目的),我对此产生了疑问。 最初,我们有一个Point构造函数,如下所示: var Point = function( x, y ) { this.x = x; this.y = y; }; 但是他们开始向其中添加一些Vector数学,他们决定将其重命名为Vector2d。 但是现在,有些方法(至少在我看来)有点令人困惑,例如下面的方法,这些方法用来做一行: //before the renaming of Point to Vector2, the parameters were startingPoint and endingPoint Geometry.Line = function( startingVector, endingVector ) { //... }; 我应该为Point对象创建特定的构造函数,还是将点定义为向量没有问题? 我知道矢量具有大小和方向,但是我看到很多人使用矢量来表示对象的位置。

2
如何为图块网格生成导航网格?
我实际上还没有开始为此编写程序,但是我想看看我将如何去做。 假设我有一块瓷砖,所有尺寸都是相同的,有些是可穿越的,有些不是。我将如何从该网格创建多边形的导航网格? 我的想法是取出不可遍历的图块,并从那里的边缘延伸线以制成多边形……这就是我到目前为止所要做的。有什么建议吗?

4
如何获得平滑的2D照明效果?
我正在XNA中制作基于2D瓦片的游戏。 目前,我的闪电看起来像这样。 我怎样才能使它看起来像这样? 并非每个块都有自己的色彩,而是具有平滑的覆盖层。 我假设使用某种着色器,并将周围瓷砖的照明值传递给着色器,但是我是着色器的初学者,因此我不确定。 我当前的照明计算光,然后将其传递到a SpriteBatch并使用tint参数进行绘制。每个图块都有一个Color在绘制之前在我的照明算法中计算出的,用于着色。 这是一个有关我当前如何计算光照的示例(我也从左,右和下进行此操作,但是我真的厌倦了逐帧进行此操作...) 因此,到目前为止,获取和吸引人们的光是没有问题的! 我看过无数关于战争迷雾的教程,并使用渐变圆形叠加创建平滑的闪电,但是我已经有了一个不错的方法为每个瓦片分配一个闪电值,只需在它们之间进行平滑即可。 所以要复习 计算照明(完成) 绘制图块(完成,我知道我需要为着色器进行修改) 阴影图块(如何传递值和应用“渐变”)

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.