游戏开发

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

1
针对运动复杂的车辆?
以已知的恒定速度瞄准车辆很容易,并且可以确保碰撞(请参阅预测敌人的位置,以使一个物体领先于其目标,并以已知的(恒定)速度和坡度在2D中找到2个物体的交点)。不精确的AI可以通过添加较小的误差因子来建模。 但是,如何将目标对准一辆运动更为复杂的车辆呢?也许是在逃避AI或其他游戏对象。 我一直在思考如何在FPS(子弹具有有限的速度)中自己完成操作,并认为可能至少需要基于目标在前一秒左右的移动而制定两种定位方式: 如果线性模型接近线性(目标加速度在一定范围内) 如果高度不规则(也许可以使用最近位置的边界框的大小?),请以平均 现在,我可以假设二维空间,AI是固定的,弹丸是不受制导的,并且线性移动。
9 ai  aiming 

2
如何使角色从高角度的斜坡上滑下来?
我目前正在Unity3D中研究角色的动作。我设法使他相对于鼠标光标移动。我将坡度限制设置为45°,这不允许角色以更高的角度爬山。但是他仍然可以跳起来。 当他跳到坡度过高的地方时,如何使他再次滑落? 提前致谢。 编辑:我的基本动作的代码片段。使用UnityEngine; 使用System.Collections; public class BasicMovement : MonoBehaviour { private float speed; private float jumpSpeed; private float gravity; private float slopeLimit; private Vector3 moveDirection = Vector3.zero; void Start() { PlayerSettings settings = GetComponent<PlayerSettings>(); speed = settings.GetSpeed(); jumpSpeed = settings.GetJumpSpeed(); gravity = settings.GetGravity(); slopeLimit = settings.GetSlopeLimit(); } void Update() …

1
在加载屏幕期间,我应该给垃圾收集器打电话吗?
因此,出于好奇,我最近阅读了一些有关Garbage Collection的内容,并且经常重复执行某些操作:垃圾收集会导致程序突然变慢,具体取决于收集的“深度”。 但是在视频游戏中,有时用户并不能真正注意到一个小的延迟:加载屏幕。因此,我认为,在加载阶段(通过Collect())继续进行完整的垃圾收集可能会很有用,因为必须等待一两秒钟才不会真正影响用户。 我的问题是,这真的有用吗,或者这样做没有真正的好处?
9 c# 

2
可以处理多个吸引子的物理引擎?
我正在整理一款将主要在三维重力下进行的游戏。 我的意思是说,多个行星/恒星/月球表现得很真实,并且表示重力场中的路径绘制和路径预测。 我研究过各种物理引擎,例如Bullet,tokamak或Newton,但它们似乎都不适合,因为我必须在其框架中重新编写重力引擎。 您是否知道一种物理引擎能够处理多个彼此吸引的物体? 我不需要场景图管理或渲染,只需要核心物理即可。(碰撞检测和刚体动力学一样是额外的奖励)。 我的背景是物理学,因此我可以编写一个使用Verlet集成或RK4(甚至必须使用Euler集成)的引擎,但是我更愿意采用现成的解决方案。 [编辑]:有一些伟大的资源用于物理模拟N体问题的在线,并在计算器


3
延迟阴影-如何合并多个灯光?
我从GLSL开始,已经实现了简单的延迟着色,该着色输出带有位置,法线和反照率的G缓冲区。 我还编写了一个简单的点光源着色器。 现在,我为点光源绘制一个球体,输出进入照明缓冲区。 问题是,绘制多个灯光时如何合并灯光缓冲区的结果? 例如,当我使用点光源着色器将第二个光源绘制到光缓冲区时,如何将第一个光源添加到照明缓冲区中的第二个光源。我的意思是,您不能读取和写入相同的输出缓冲区吗?

4
使用XNA ContentPipeline在没有完整XNA GS的计算机上导出文件
我的游戏使用内容管道在运行时加载spriteSheet。游戏的美术师将修改后的Spritesheet发送给我,然后在计算机中进行构建并向他发送了更新的项目。因此,我正在寻找一种在他的计算机中生成xnb文件的方法(这是内容管道的输出),而无需他安装完整的XNA Game studio。 1)我不希望我的艺术家安装VS + Xna(我知道有VS的免费版本,但是一旦我们向团队中添加更多人,它将无法扩展)。2)我对在Xbox中运行此编辑器/工具不感兴趣,因此只能使用Windows解决方案。3)我知道MSBuild选项,但它们需要完整的XNA 我研究了Shawn的博客,发现使用Msbuild Sample的选项或XNA 4.0中的新选项在这里看起来很有希望,但似乎有相同的限制:需要安装完整的XNA GS,因为ContentPipeline不属于XNA redist。 那么有人找到了解决方法吗?

2
在非常简单的3D赛车游戏中,如何处理碰撞?
我想知道在一些简单的3d赛车游戏中是如何发生碰撞的(尤其是在Outrun 2 / Motoracer之类的游戏中)。 在具有复杂环境(开放世界)的经典赛车游戏中,我想这是通过一个基本的盒子(用于汽车)与飞机相撞(用于轨道,建筑其他东西)来完成的。整个过程将使用一些边界框进行优化(这是许多游戏中完成碰撞的方式)。 在《 Outrun 2 / Motoracer》这样的游戏中,游戏玩法是如此简单,以至于开发人员可能并不需要它,并且一切都可以简化很多。对于那些从未玩过的人,这里是这么具体: 汽车/自行车总是粘在道路上。 道路总是相同的大小,并且形状非常简单。 唯一的可能性是沿着这条路行驶,这不可能离开这条路,或者与其他东西发生碰撞(其他汽车/自行车除外,但我们不在乎)。 当您与道路相撞时,会发生非常基本的街机碰撞(只需将汽车从道路上推开) 这是我认为碰撞(可能)已经完成的方式: 整个轨迹可被视为3d贝塞尔曲线的巨型曲线。从该曲线可以生成道路多边形(使用从曲线生成的前,左和上向量)。其他元素(如房屋,树木等)也可以使用此方法放置和对齐。 然后,处理碰撞(并绘制汽车): 1)从当前汽车3d位置找到3d曲线上的最近位置。换句话说,将3d汽车位置转换为贝塞尔曲线位置。道路上的每个3d位置都可以视为沿着3d曲线(t)+横向位移(d)的位移。检查下面的图像是否不清楚(这是2d示例,但这很容易应用于3d)。 当t = 0轿厢在轨道段的起点时,当t = 1轿厢在终点处。当d = -1或1辆汽车在轨道边界时,当d = 0汽车在道路中间时 2)使用t和将汽车与道路对齐d(非常简单:对于t和,d我可以得到3d位置+上/前/左向量)。这辆车现在粘在路上了 3)检查d轿厢的横向位移。如果价值太大(d > 1)或太低,则(d < -1)汽车偏离轨道。只需将其夹在正确的位置即可。 这也使3d剔除非常简单,只需将轨道从当前汽车t位置绘制到即可t + some_big_enough_value_to_avoid_visible_clipping。 也许我完全错了:仅检查汽车(边界框)和代表轨道(没有建筑物等)的一组非常简化的多边形的碰撞会更快,更简单。3d世界(以及由此产生的colision模型)以前只是使用某些3rd party工具(运行游戏时不再有3d曲线,只是一堆多边形)生成的。

3
游戏前的加载时间与游戏中的加载时间
我正在开发一款包含随机迷宫的游戏。 有一些AI生物潜伏在迷宫中。我希望他们按照迷宫形状走一些路。 现在,我有两种实现方法,第一种方法(我使用的方法)是在迷宫创建后通过计算多个所需的潜伏路径。 第二种方法是,当生物开始潜伏时,计算一次需要计算的路径。 我主要关心的是加载时间。如果在创建迷宫时计算了许多路径,那么预加载时间会比较长,因此我考虑在需要时进行计算。 目前游戏还不是很“繁重”,因此在中间游戏中计算路径并不引人注目,但恐怕一旦变得更加复杂,它就会出现。 任何建议,评论,意见将有所帮助。 编辑: 就目前而言,让我们p以预先计算的路径数为准,一个生物有可能1/p选择一条新路径(这意味着进行路径计算),而不是采用一条现有路径。 当然,除非完全计算出路径,否则生物不会开始巡逻,因此无需担心他会在此过程中被杀死。
9 loading  maze 

4
具有数百名玩家的服务器端物理模拟
我目前正在开发一款面向物理的单人游戏,希望在服务器端模拟物理。这是因为游戏将具有排行榜,持续的玩家进度等,并且我想防止任何类型的作弊-基本上是纯客户端-服务器架构,客户端是“哑巴”,仅显示服务器希望您显示的内容。 但是,问题在于该游戏很可能同时由数百人(可能是数千人)玩。这使我感到担忧,因为如果我必须同时执行并维护数百个状态,它很可能会破坏服务器的处理能力。 我将所有物理模拟都移到客户端不会有任何问题,但是我真的需要一种方法来验证客户端模拟的结果是否有效。但是,我不知道如何。 我曾考虑过不时地运行模拟服务器端,以验证客户端是否仍然处于公平状态,但我确实希望服务器尽可能减轻压力。 物理将变得像Glenn Fiedler的GDC 2011演示一样复杂,甚至更简单。但是,更多总是碰撞的刚体会在一个场景中,并且它们一次都会可见。 对于这个特殊的情况,我很难回答,因为网络上的大多数资源(再次是Glenn Fiedlers站点都是很棒的站点)谈论小型网络物理(例如,具有30个播放器的FPS,例如Halo)。 对此主题的任何建议,网站,论文等将不胜感激。 我想回答以下问题: 客户-服务器模型的可行性如何?我的服务器处理能力是否合法并接地? 是否可以可靠地验证客户端在服务器上运行的物理模拟?如果是这样,怎么办?

3
如何使用Bullet Physics / Ogre3D在RPG中移动角色?
最近,我在Ogre3D游戏中移动角色时遇到了问题。基本上,我使用子弹的RigidBody->translate()功能来移动角色,但是当这样做并撞到墙上时,我会略微穿过它,然后弹回去。我想知道是否有另一种好的方法可以在一个带有墙壁的简单平面世界中移动我的角色(具有球形碰撞形状的角色)? 我正在使用的与此相对的库是“ Ogre3D”和“子弹物理学”。

3
正确“随机”生成流动地形的方法
我正在创建一个简单的自上而下的RTS游戏。我计划在需要时“随机地”即时生成地图。我计划所有这些都以“通过”的方式工作: 全草填满地形 返回并添加一些随机的砾石 磨碎碎石 在第二层上绘制山地景观 圆山 等等等 现在,请看下面的图片: 我是使用地图编辑器手动创建的,但我希望将其传递给第3步后,我基本上打算将其作为结果。 我应该如何确定何时以及将砾石放置的位置,使其至少具有不规则的形状和零星的外观,看起来自然呢? 谢谢,如果可以!任何和所有帮助表示赞赏! 附带说明: 基本上,每次通过都是遍历我所有的图块(该地图分为40x40图块),类似于以下内容: for (int x = 0; x <= GRIDMAX - 1; x++) { for (int y = 0; y <= GRIDMAX - 1; y++) { //Terrain(x, y, 0) = SomethingHere; } }

5
增加相似图块彼此相邻生成的可能性
我正在开发一个瓷砖地图系统,它看起来像这样(绿色是草,空气是白色,石头是灰色,蓝色是水): 它使用了一个简单的随机数生成器,因此瓷砖有45%的机会是草,有30%的机会是水,有25%的机会是石头。 无论如何,我是否可以增加草块/石头块结成块形成土地块,并使水块形成海洋的趋势(有点像在《我的世界》这样的游戏中看到的那样)?
9 java  algorithm  tiles  maps  lwjgl 

1
回合制游戏中世界状态和动画的分离
在回合制游戏中,您如何处理动画与世界状态的分离?我目前正在开发基于2D网格的游戏。下面的代码被简化以更好地说明。 当演员移动时,我想在生物动画并移动到新位置时暂停转弯流程。否则,屏幕可能会大大落后于世界状态,从而导致奇怪的视觉外观。我还希望动画不会阻塞游戏的流程-粒子效果可以在多个回合中展开而不会影响游戏玩法。 我要做的是介绍两种类型的动画,分别称为阻塞动画和非阻塞动画。当玩家想要移动时,执行的代码是 class Actor { void move(PositionInfo oldPosition, PositionInfo newPosition) { if(isValidMove(oldPosition, newPosition) { getGame().pushBlockingAnimation(new MoveAnimation(this, oldPosition, newPosition, ....)); player.setPosition(newPosition); } } } 然后,主更新循环执行以下操作: class Game { void update(float dt) { updateNonBlockingAnimations(dt); //Effects like particle explosions, damage numbers, etc. Things that don't block the flow of turns. if(!mBlockingAnimations.empty()) { …

3
如何计算球体和平面之间的碰撞响应?
我正在尝试创建一个简单的3D游戏,并且需要将玩家限制在游戏世界的范围内。当玩家撞到世界的两边时,我希望玩家的飞船稍微弹起。 实际上,我试图将玩家困在一个盒子里,阻止他们从侧面逃脱…… 我设法将游戏世界的界限定义为一组平面,并具有法线和距原点的距离。播放器有一个球形的边界球,通过跟踪此网站http://www.gamasutra.com/view/feature/3383/simple_intersection_tests_for_games.php,我设法检测到了碰撞。 现在,我无法完全确定检测到碰撞时该怎么办。我能管理的最好的办法是让玩家卡在飞机上,直行通过飞机,或者以非常快的速度反复跳下飞机。 常识告诉我,我需要使用其法线来计算平面上的反射角并将其应用于玩家的速度,但是我想我首先需要查看玩家是否已通过平面,这是我无法做到的锻炼。

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.