游戏开发

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

2
多人FPS服务器端性能
这与MMO的性能有关,除了有关带宽的问题。这与cpu负载有关。 我使用node.js和webGL编写了一个简单的FPS。这非常简单,就像MIDI Maze的BuddyMaze克隆一样。发生的事情很少,每个人都可以二维移动(没有高度),发射简单的弹丸,然后撞到墙壁上。 现在,如果我与服务器建立多个连接,每个玩家在旋转时迅速射击,那么在服务器最大化核心并放慢速度之前,我可以在游戏中获得约15-20名玩家。这是在服务器上以30 fps的速度运行时。在10 fps下,我获得约25-30个连接。这是非常糟糕的,因为游戏很快将有更多工作要做,而我需要让更多的玩家适应这一点,这是可行的努力。 我的兄弟刚刚指出了有关其同事的TF2服务器的一些统计信息。他的服务器的规格低于我们的服务器,但它运行的是TF2,显然是一个复杂得多的游戏,每秒高达500滴答声,每个核心36个用户。另外,我们目前消耗的带宽比它们消耗的要多得多,但是我们还没有试图降低太多带宽。 这怎么可能?有什么样的技巧可以将服务器性能提高到这种程度?我知道的一些东西包括: 降低服务器上的帧速率,并在客户端上插入位置。我得到了一些好处,但是显然TF2服务器甚至都没有为此烦恼。 在客户端上执行诸如冲突检测之类的昂贵工作,并在服务器上很少进行验证。我还没有搬过来,今晚我会。即使这样,我也不希望获得如此巨大的收益。 将运动场划分为区域(四叉树)以最小化计算。还没有机会。 我考虑过不幸的是,node.js的速度比TF2正在使用的速度慢得多,并且可能不适合这种高强度任务。 这一切都在服务器配置魔术中吗? 那么,行业中的其他窍门是什么,即仅执行服务器上的最低要求,又具有完美的游戏体验?“推迟到客户端以节省CPU时间”与“不信任客户端”之间存在很大的冲突,因此也许有助于了解在各种情况下的界​​限如何? 更新资料 剖析确实是我所发现的唯一绝对可靠的咒语。我很快在代码周围包装了一些计时功能(感谢FP!),发现了我从未想到的东西:将数据广播到客户端的行为几乎占了整个执行时间。具体来说,约占90%。进一步的测试表明,这段时间取决于客户端数量和数据大小,而后者则更多。在20位用户的负载下,我只发送“ {}”而不是全部数据,从而将广播时间从24ms缩短为2ms,降低了90%。但是只有5个用户,广播大约需要0.5毫秒。因此,我显然需要在此处进行一些优化。 最明显的改进是视线检查。这样既可以减少关心数据的人数,也可以减少发送给感兴趣的各方的数据量。我可以尝试一下这个领域中的其他技巧,以便将广播操作的成本降至最低吗?

7
您如何通过html5游戏(即赞助)赚钱?
我使用Flash制作游戏,并且我对使用html制作游戏感兴趣,但是我还没有看到任何愿意购买这些游戏(即游戏赞助)的公司或网站。我希望有人能告诉我一家公司会这样做的原因,或者为什么人们不购买html游戏?

7
其他采用机制的游戏,例如“外交”游戏
我在做的一点点研究,我希望你能帮助我追查任何游戏,比其他外交(网络版在这里全部),雇用或一些力学的外交(规则,缩写形式)。我正在寻找的示例: 在执行订单之前同时发出订单 在外交中,玩家“写下”他们的举动并“同时”执行 在支持攻击者或防御者“占领”领土方面的支持。 在“外交”中,没有一个单位比另一个单位更强大,您需要结合多个单位的力量来进攻其他领土。 解决移动冲突的规则 例如,有2个单位进入一个空间,但只允许一个单位,这会发生什么。 稍后我可能会添加到此列表中,但这是我要寻找的主要内容。如果您需要任何澄清,请告诉我。 注意:我尝试在GamingSE上提问,但被拒绝了。因此,我不确定我还能在哪里发布此内容。由于我出于游戏开发目的而对此进行研究,因此我认为本文是关于主题的。如果不是这种情况,请告诉我。也请随时重新分类。谢谢!

5
使用大量的多维数据集。改善效能?
编辑:总而言之,我有一个基于体素的世界(《我的世界》风格(感谢共产主义鸭子)),其性能不佳。我对消息来源并不满意,但希望获得关于如何摆脱它的任何建议。 我正在一个项目中,世界由大量的多维数据集组成(我会给你一个数字,但这是用户定义的世界)。我的测试之一是(48 x 32 x 48)块。 基本上,这些块本身不会做任何事情。他们只是坐在那里。 当涉及到玩家互动时,便开始使用它们。 我需要检查用户鼠标与哪些多维数据集交互(鼠标悬停,单击等),以及在玩家移动时进行碰撞检测。 现在我一开始有大量的滞后,遍历每个块。 我设法通过遍历所有块并找到哪些块在字符的特定范围内,然后仅遍历那些块以进行碰撞检测,来减少这种滞后。 但是,我仍然要压低2fps。 有人对我如何减少这种滞后有其他想法吗? 顺便说一句,我正在使用XNA(C#),是的,它是3d。
12 xna  3d  frame-rate  voxels 


1
游戏编程中存在哪些研究领域?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 我目前在一个研究网络优化和各种分布式应用程序的小组中,对游戏更感兴趣,但对研究的兴趣更多。是否有资源专注于游戏开发特定的研究主题以及一些常见领域研究? 注意:我了解游戏开发是由经过深入研究的各个主题组成的,我的问题是针对游戏应用程序专有的或至少仅对游戏重要的领域。 一个例子可能是“角色技能发展的遗传算法方法”。这将专注于建立最适合玩家回报的技能进步。等等等等...随机的想法,但是你明白我的意思。我也指开发的技术方面,但我不想限制这一点。

2
如何复制“几何战争”中的扭曲效果?
我正在努力实现您在《几何战争》等游戏中看到的扭曲效果。 有人可以帮忙解释一下发生了什么吗?我觉得网格的z轴是由程序员以某种方式进行任何操作的,但是是否存在一些已知的数学方程式才能真正获得正确的翘曲效果? 编辑:更具体地说,我的意思是网格扭曲。一切看起来都朝着负Z轴拉动然后反弹。

5
边缘上的Skybox纹理伪像
我在Mac上绘制Skybox纹理时遇到奇怪的问题。在iPhone上,一切正常。我尝试更改近端和远端的值没有成功。 它是一个包含六个纹理的天空盒,对于每个纹理,我都设置为: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 可能是什么问题呢? 屏幕截图: 编辑: 我尝试将背景色设置为红色,以确保其是否通过纹理渗出 我还尝试将纹理的坐标更改为: float err_corr = 0.5 / TEXTURE_SIZE; GLfloat vertices[24] = { -1.0f - err_corr, -1.0f - err_corr, 1.0f + err_corr, 1.0f + err_corr, -1.0f - err_corr, 1.0f + err_corr, -1.0f - err_corr, …
12 opengl  textures  macos  sky 

4
不同插值公式的动画示例:有链接吗?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 我记得曾经发现过一个链接到一个巨大页面的链接,该页面包含与非线性插值曲线不同的方程式,例如,如果您想平稳地停下汽车等。 有时在没有物理引擎帮助的情况下模拟某些真实世界的加速/速度行为可能很有用,这可以真正简化代码。 你知道这个页面在哪里吗?我无法为Google提供正确的关键字... 编辑:我只是搜索我以前的笔记本电脑书签,我发现它:http : //sol.gfxile.net/interpolation/

3
物理引擎所需的建议
我最近开始了一个项目,构建了一个物理引擎。我希望您能给我一些有关文档和/或最佳技术的建议。 首先,我发现强烈建议将Game-Physics-Engine-Development用于手头的任务,我想知道您是否可以给我第二个意见,我应该得到吗?另外,在浏览Amazon时,我偶然发现了 Game Engine Architecture,并且由于我想为游戏构建物理引擎,因此我认为这可能也是一本好书。 其次,我知道模拟物理是高度计算密集型的,所以我想使用CUDA或OpenCL。现在我倾向于OpenCL,因为它可以在NVIDIA和ATI芯片组上使用。 PS:我将在Linux上用C ++实现。


4
为什么不显示成就/徽章方面的进展?
成就无处不在-Xbox Live,iOS Game Center,许多个人游戏,甚至在具有Stack Overflow等游戏元素的社交社区中。 一个常见的用户请求堆栈溢出的是表现出对徽章的进展。 如该uservoice请求所示,SO已拒绝了此请求,Jeff Atwood在其中做出了以下声明: 这是基于xbox实时成就模型建模的,并且也没有显示进度。 当拒绝显示进度的请求时,Jeff遵循Xbox Live的设计。当然,从技术上讲,SO与Xbox Live完全不同,因此可以推断出这是设计决定,而不是技术决定。 我正在开发一款具有成就的游戏,现在的目的是展示进步。因此,我有两个问题: 如果已知“按设计” Xbox Live成就未显示进度,是否有相关资料? 为什么这是“设计使然”?换句话说,就游戏设计而言,有什么理由故意不显示成就进度?

3
如何生成类似焦土的地形?
我是一名网络开发人员,我渴望开始编写自己的游戏。 为了熟悉起见,我canvas现在选择了JavaScript和element。 我想生成一些像焦土中的地形。 我的第一次尝试使我意识到,我不能只是随机分配y值。高峰和低谷必须有一定的理智。 我已经用Google搜索了一下,但是我找不到足够简单的东西或者使用了错误的关键字。 能否请您告诉我示例中将使用哪种算法生成某些东西,同时牢记我对游戏编程是完全陌生的(因为无论如何,2003年还是使用Visual Basic制作Breakout)?

5
精灵作为演员
我没有游戏开发方面的经验,但是是一名程序员。据我所知,在Scala语言中,您可以使用Actors进行可扩展的多任务处理,非常稳定。您甚至可以立即运行成千上万个它们,而不会出现问题。 所以我想,也许您可​​以将它们用作2D精灵的基类,以突破需要遍历所有精灵并移动它们的游戏循环事物。他们基本上会移动自己,受事件驱动。 这对游戏有意义吗?像这样多任务吗?毕竟,它将在JVM上运行,尽管如今这应该不成问题。 编辑: 摸索了一段时间之后,我注意到该想法只有一个真正的优势:多核支持。一个简单的游戏循环将仅在一个内核上运行,并将依次处理所有事情。 由于现代计算机,即使是现在的家用计算机,如今都内置了两个或多个内核,我认为让游戏程序员有效地使用其他内核是一个好主意。毕竟,我认为通常玩家只会在他的八核计算机上运行游戏,所以为什么不这样做呢。 我看到的另一个优点是,在Scala中,您可以拥有RemoteActors,可以用相同的方式来对待它,但可以在另一台计算机上运行。因此,这也许也可以简化网络游戏。 我打算尽快将其构建到我的Scala 2D引擎中。

3
如何存储shmup级别?
我正在开发2D shmup(即Aero Fighters),我想知道存储关卡的各种方法是什么。假设在自己的xml文件中定义了敌人,那么您将如何定义何时在关卡中产生敌人? 是基于时间吗?更新?距离? 目前,我基于“关卡时间”(关卡运行的时间量-暂停不会更新时间)来执行此操作。这是一个示例(序列化由XNA完成): <?xml version="1.0" encoding="utf-8"?> <XnaContent xmlns:level="pekalicious.xanor.XanorContentShared.content.level"> <Asset Type="level:Level"> <Enemies> <Enemy> <EnemyType>data/enemies/smallenemy</EnemyType> <SpawnTime>PT0S</SpawnTime> <NumberOfSpawns>60</NumberOfSpawns> <SpawnOffset>PT0.2S</SpawnOffset> </Enemy> <Enemy> <EnemyType>data/enemies/secondenemy</EnemyType> <SpawnTime>PT0S</SpawnTime> <NumberOfSpawns>10</NumberOfSpawns> <SpawnOffset>PT0.5S</SpawnOffset> </Enemy> <Enemy> <EnemyType>data/enemies/secondenemy</EnemyType> <SpawnTime>PT20S</SpawnTime> <NumberOfSpawns>10</NumberOfSpawns> <SpawnOffset>PT0.5S</SpawnOffset> </Enemy> <Enemy> <EnemyType>data/enemies/boss1</EnemyType> <SpawnTime>PT30S</SpawnTime> <NumberOfSpawns>1</NumberOfSpawns> <SpawnOffset>PT0S</SpawnOffset> </Enemy> </Enemies> </Asset> </XnaContent> 每个敌人元素基本上都是特定敌人类型的浪潮。该类型在EnemyType中定义,而SpawnTime是该波形应出现的“级别时间”。NumberOfSpawns和SpawnOffset分别是显示的敌人数和两次刷新之间所花费的时间。 这可能是一个好主意,或者可能还有更好的主意。我不确定。我希望看到一些意见和想法。 我有两个问题:正确产生一个敌人并创建一个关卡编辑器。关卡编辑器的问题是一个完全不同的问题(我可能会在以后的:P中发布)。 至于正确生成,问题在于我的更新时间可变,因此我需要确保不会错过敌人的生成,因为生成偏移量太小,或者更新花费了更多时间。我在很大程度上修复了它,但是在我看来,问题出在我如何存储水平上。 那么,有什么想法吗?注释? 先感谢您。
12 levels  data  xml  shoot-em-up 

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.