游戏开发

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

1
学习图形硬件的好资源[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2年前关闭。 我正在寻找有关图形硬件(和相关的底层软件)的良好学习资源。基本上,我想了解更多关于opengl / direcx API层下的实现方式。 我熟悉渲染管线各个阶段(查看,投影,裁剪,光栅化等)中发生的原理变化。 我的目标是在针对以下问题进行图形/着色程序编程时,能够就折衷和潜在的优化做出更好,更明智的决策; 批处理 视图剔除 咬合 签单 避免状态变化 三角形vs点数 纹理采样 等等 基本上,图形程序员需要了解现代图形硬件以提高效率。 我并不是真正在寻找特定的优化技术,而是需要更多的一般知识,以便自然地编写更有效的代码。

3
冲动跳跃
有一件事情一直困扰着我,那就是如何在平台游戏机中实现“人造脉冲”跳跃。如果您不知道我在说什么,请考虑一下《马里奥》,《柯比》和《洞穴物语》中的《名言》。他们有什么共同点?好吧,跳跃的高度取决于按住跳跃按钮的时间。 知道这些角色的“冲动”并不是像实际物理学中那样在跳动之前就已经建立的,而是在空中时建立的,也就是说,您可以很好地将手指抬起至最大高度的中途,即使在它和句号之间的减速;这就是为什么您可以轻松地跳一跳并保持跳远的原因-我对它们如何保持轨迹成弧形着迷。 我当前的实现方式如下: 按下跳转按钮时,重力将关闭,并且化身的Y坐标系将因重力的恒定值而减小。例如,如果事物跌落到每刻度Z个单位,它将增加每勾Z个Z单位。 释放按钮或达到限制后,虚拟化身会减速,使其覆盖X个单位,直到其速度达到0;一旦完成,它就会加速直到其速度与重力匹配-坚持这个例子,我可以说它从0加速到Z单位/刻度,同时仍然覆盖X单位。 但是,此实现会使跳跃变得过于对角,并且除非化身的速度快于重力,否则这将使其在我当前的项目中变得太快(它在大约每跳动4像素处移动,而重力在每跳动10像素处移动) 40FPS的帧率),它也使它比水平更垂直。那些熟悉平台游戏的人会注意到,角色的弧形跳跃几乎总是使他们能够跳得更远,即使它们的速度不如游戏的重力那么快;如果游戏不正确,即使玩法不正确,也会证明自己是正确的。非常违反直觉的。我知道这一点是因为我可以证明我的实现非常烦人。 有没有人尝试过类似的机制,甚至可能成功了?我想知道这种平台游戏跳跃的背后是什么。如果您以前没有任何经验,并且想尝试一下,那么请不要尝试纠正或增强我所解释的实现,除非我采取了正确的方法-尝试从以下方面弥补您的解决方案刮。我不在乎您是否使用重力,物理学或其他方法,只要它能显示出这些伪脉冲的工作原理即可。 另外,我希望它的显示避免特定语言的编码。例如,为我们分享一个C ++示例或Delphi ...就像我在我的项目中使用XNA框架一样,并且不介意C#的东西,我没有太多的耐心来阅读别人的代码,某些使用其他语言的游戏开发人员可能会对我们在此处获得的成就感兴趣,因此不要介意使用伪代码。 预先谢谢你。

3
《 Dont Starve》中使用了哪种动画技术?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Game Development Stack Exchange 的主题。 6年前关闭。 在业余时间玩一些游戏时,我偶然发现了2D / 3D生存游戏。该游戏显然是用SDL和GLUT(不要挨饿)制作的,但真正令我惊讶的是游戏中的动画。 动画非常流畅流畅。动画时没有变形,通常在手工制作的动画中会发生以下情况:删除像素,动画变得锯齿,而且根本不那么平滑。那让我思考他们如何设法完成如此高质量的动画。他们是真的是手工制作的吗(如果是的话,那一定是一个非常有才华的艺术家),是骨骼动画还是他们在使用另一种技术?
12 animation  sdl  glut 

2
如何使用累积矩阵变换解决万向节锁定问题
我正在阅读Jason L. McKesson的在线“学习现代3D图形编程”书 到目前为止,我要解决万向节锁定问题以及如何使用四元数来解决它。 然而,就在这里,在四元数页面上。 问题的一部分是,我们试图将方向存储为一系列3个累积的轴向旋转。方向是方向,而不是旋转。方向当然不是一系列旋转。因此,我们需要将船舶的方向视为方向,作为特定数量。 我想这是我开始感到困惑的第一个地方,原因是因为我看不到方向和旋转之间的巨大差异。我也不明白为什么方向不能通过一系列旋转来表示... 也: 为此,首先想到的是将方向保持为矩阵。当需要修改方向时,我们只需对此矩阵进行转换,将结果存储为新的当前方向。 这意味着应用于当前方向的每个偏航,俯仰和横滚都将相对于该当前方向。正是我们所需要的。如果用户应用正偏航,则希望该偏航相对于它们当前指向的位置而不是相对于某个固定坐标系旋转它们。 我理解这个概念,但是我不理解如果累积矩阵变换可以解决此问题,那么上一页中给出的代码不仅如此。 这是代码: void display() { glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClearDepth(1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glutil::MatrixStack currMatrix; currMatrix.Translate(glm::vec3(0.0f, 0.0f, -200.0f)); currMatrix.RotateX(g_angles.fAngleX); DrawGimbal(currMatrix, GIMBAL_X_AXIS, glm::vec4(0.4f, 0.4f, 1.0f, 1.0f)); currMatrix.RotateY(g_angles.fAngleY); DrawGimbal(currMatrix, GIMBAL_Y_AXIS, glm::vec4(0.0f, 1.0f, 0.0f, 1.0f)); currMatrix.RotateZ(g_angles.fAngleZ); DrawGimbal(currMatrix, GIMBAL_Z_AXIS, glm::vec4(1.0f, 0.3f, 0.3f, 1.0f)); glUseProgram(theProgram); …

1
我如何干净,优雅地处理类之间的数据和依赖关系
我正在研究SFML 2中的2d自上而下的游戏,需要找到一种优雅的方式来使一切正常工作并融合在一起。 请允许我解释一下。我有许多类都继承自抽象基础,该基础为所有类提供了draw方法和update方法。 在游戏循环中,我调用update然后在每个类上绘画,我认为这是一种非常常见的方法。我有瓷砖,碰撞,播放器和包含所有瓷砖/图像/纹理的资源管理器的类。由于SFML中输入的工作方式,我决定让每个类在其更新调用中处理输入(如果需要)。 到目前为止,我一直根据需要传递依赖关系,例如,在按下播放键时在玩家类中,我在碰撞类上调用了一个方法来检查玩家想要移动到的位置是否是碰撞,并且只有在没有碰撞的情况下才移动播放器。 这在大多数情况下都可以正常工作,但是我相信可以做得更好,但我不确定如何做。 现在,我需要执行一些更复杂的事情,例如:玩家能够走到地面上的某个物体,按一下键来捡起/掠夺它,然后它就会显示在库存中。这意味着需要发生一些事情: 在按键时检查播放器是否在可放物范围内,否则不要继续。 查找项目。 将项目上的精灵纹理从其默认纹理更新为“掠夺”纹理。 更新项目的碰撞:它可能已更改形状或已完全移除。 需要使用添加的项目更新库存。 我如何使一切交流?在我当前的系统中,我的类将超出范围,并且方法调用到处都是。我可以将所有类捆绑在一个大管理器中,并为每个类提供对父管理器类的引用,但这似乎只好一点。 任何帮助/建议将不胜感激!如果有什么不清楚的地方,我很乐于扩展。
12 c++  2d  architecture  sfml 


2
三位相互竞争的英雄的公式,每位都有一个可以击败的英雄和一个被击败的英雄
我正在尝试为我拥有的项目设计游戏,主要思想是: 3种英雄类型 每个英雄3个统计 不涉及任何级别,因此差异必须位于统计数据上。 战斗逻辑-战斗的逻辑是,类型1英雄有很大的机会赢得类型2英雄,类型2英雄有很好的机会赢得类型2英雄,类型3英雄有很好的机会赢得类型2英雄。 一个多星期以来,我试图找到一个基于统计信息的公式,可以解决这个问题,但是我不能,昨天我正在干预数字,它很不错,但是我无法从中提取公式。 您能否指导我或给我一些提示,我应该如何开始在满足战斗逻辑的非lvl游戏上创建公式?


2
球体的任意旋转
我正在编写一种机制,允许用户在球体表面周围移动。球面上的位置当前存储为theta和phi,其中theta是当前位置的z轴和xz投影之间的角度(即围绕y轴的旋转),并且phi是从y轴到该位置的角度。我解释得很差,但实际上theta = yaw,phi = pitch Vector3 position = new Vector3(0,0,1); position.X = (float)Math.Sin(phi) * (float)Math.Sin(theta); position.Y = (float)Math.Sin(phi) * (float)Math.Cos(theta); position.Z = (float)Math.Cos(phi); position *= r; 我相信这是正确的,但是我可能是错的。我需要能够在半径为的世界空间的起点处围绕球体表面在任意伪二维方向上移动r。例如,握持区W应相对于玩家的方向在球体上方向上移动。 我相信我应该使用四元数来表示球体上的位置/方向,但是我想不出正确的方法。球形几何不是我的强项。 本质上,我需要填写以下内容: public void Move(Direction dir) { switch (dir) { case Direction.Left: // update quaternion to rotate left break; case Direction.Right: // update …

5
隧道效应cocos2d
我正在寻找在COCOS2D(iOS)中创建类似的隧道效果。有人可以提出任何建议吗? 参考视频1 参考视频2 到现在为止,我已经尝试使用比例减小的多个环形精灵,并将中心定位到同一点,并且对于每个较小的精灵,Z也会保持递减。 这样,使用CCScaleTo对其进行动画处理,并随着动画持续时间将其大小更改为2.0,但是无论如何它都不会接近参考文献中所示的隧道效果。 谢谢,山姆

3
如何决定对开发收取多少费用?
所以我和另外两个朋友是一个很小的游戏开发工作室。到目前为止,我们还没有发布游戏,但我们几乎有2款游戏准备发布。一个更大的工作室看到了我们的工作,现在他们想和我们一起工作。他们需要人们为他们开发手机游戏(iOS,Android)。 他们希望我们为项目定价(无法告知我们签署了保密协议的细节)。它们将为我们提供所有资产(图形/声音),因此我们仅需编码即可。并且因为它们仅与Unity3D一起使用,所以我们必须学习它。 我们如何决定对项目收取多少费用?
12 android  ios  sales 

3
曲线碰撞检测
我正在开发2D游戏,其中我想在运动的圆和某种静态曲线(可能是贝塞尔曲线)之间进行碰撞检测。 目前,我的游戏仅以直线作为静态几何图形,并且我正在通过计算从圆到线的距离进行碰撞检测,并在距离小于圆半径的情况下将圆投影到线外。 如何以相对简单的方式进行这种碰撞检测?例如,我知道Box2D具有Bezier曲线的碰撞检测功能。我不需要功能齐全的碰撞检测机制,只需执行我描述的操作即可。 更新:非常感谢您的出色回答!我必须阅读Bezier曲线才能完全理解您所描述的方法。那我会回覆您。

1
有关渲染,批处理,图形卡,性能等的信息+ XNA?
我知道标题有点模糊,但是很难描述我真正想要的东西,但是这里有。 当涉及到CPU渲染时,性能通常很容易估计和直接,但是当涉及到GPU时,由于缺乏技术背景信息,我一无所知。我正在使用XNA,所以如果理论可以与之相关将非常好。 所以我真正想知道的是,当您执行特定的绘制动作时,何时何地(CPU / GPU)会发生什么?什么是批次?效果,预测等有什么影响?数据是否保留在图形卡上或是否在每个步骤中传输?当谈论带宽时,您是在谈论图形卡的内部带宽,还是从CPU到GPU的管道? 注意:我实际上并不是在寻找有关绘制过程如何进行的信息,这是GPU的业务,我对在此之前的所有开销都感兴趣。 我想了解执行动作X时发生了什么,以适应我的体系结构和实践。 非常感谢任何文章(可能带有代码示例),信息,链接,教程,它们提供了有关如何编写更好的游戏的更多见解。谢谢 :)

2
多人物理网络
我很好奇赛车游戏中如何实现具有物理功能的多人网络。我们拥有一个物理世界,其中有多个由不同人员控制的快速行驶的车辆。假设车辆拥有武器并且可以相互射击(扭曲金属,Vigilante v8) 我担心撞车和撞车。权威服务器还是更好的选择?

2
促进非程序员的XNA游戏部署
我目前正在开发RPG,以XNA的RPG入门套件为基础。(http://xbox.create.msdn.com/zh-CN/education/catalog/sample/roleplaying_game)我正在与一个小团队(两名设计师和一名音乐/声音艺术家)合作,但我是唯一的团队程序员。当前,我们正在使用以下(不可持续的)系统:团队创建新的图片/声音以添加到游戏中,或者他们修改现有的声音/图片,然后将其工作提交到存储库中,我们将在此存储最新版本一切。(代码,图像,声音等)每天,我都会创建一个新的安装程序,以反映新的图像,代码更改和声音,然后每个人都进行安装。 我的问题是:我想创建一个系统,团队的其他成员可以替换战斗声音,例如,他们可以立即看到更改,而不必等待我建立。如果我发布的话,XNA的设置方式将对所有图像和声音文件进行编码,因此团队无法进行“热插拔”。我可以在每个人的计算机上设置Microsoft VS,并向他们展示如何快速发布,但是我想知道是否有更简单的方法来执行此操作。 与使用XNA的团队合作时,有人反对吗?
12 xna  rpg 

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.