游戏开发

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

7
多线程2D重力计算
我正在开发一个太空探索游戏,目前我已经开始研究重力(在XNA的C#中)。 重力仍然需要调整,但是在我能够做到这一点之前,我需要在物理计算中解决一些性能问题。 这使用了100个对象,通常不进行物理计算就可以渲染其中的1000个对象,而FPS则超过300 FPS(这是我的FPS上限),但是超过10个左右的对象会将游戏(及其运行的单线程)带入在进行物理计算时会屈膝。 我检查了我的线程使用情况,发现第一个线程正在杀死所有工作,因此我认为只需要对另一个线程进行物理计算即可。但是,当我尝试在另一个线程上运行Gravity.cs类的Update方法时,即使Gravity的Update方法中没有任何内容,游戏仍然会降低到2 FPS。 Gravity.cs public void Update() { foreach (KeyValuePair<string, Entity> e in entityEngine.Entities) { Vector2 Force = new Vector2(); foreach (KeyValuePair<string, Entity> e2 in entityEngine.Entities) { if (e2.Key != e.Key) { float distance = Vector2.Distance(entityEngine.Entities[e.Key].Position, entityEngine.Entities[e2.Key].Position); if (distance > (entityEngine.Entities[e.Key].Texture.Width / 2 + entityEngine.Entities[e2.Key].Texture.Width / 2)) …


4
游戏状态管理技巧?
首先,我不是指场景管理;我将游戏状态大致定义为游戏中涉及到是否应启用用户输入或是否应暂时禁用某些参与者等方面的任何状态。 举一个具体的例子,假设它是经典《 Battlechess》的游戏。在我采取另一名球员的棋子之后,便进行了短暂的战斗。在此序列中,不应允许玩家移动棋子。那么,您将如何跟踪这种状态转换?有限状态机?一个简单的布尔检查?看起来后者只会对状态变化很少的游戏有效。 我可以想到许多使用有限状态机来处理此问题的简单方法,但我也可以看到它们很快就变得一发不可收拾。我只是想知道是否还有一种更优雅的方式来跟踪游戏状态/过渡。
24 state 

2
如何在两个游戏状态之间进行插值?
创建在两个更新状态之间插值所有对象位置的系统的最佳模式是什么? 更新将始终以相同的频率运行,但是我希望能够以任何FPS渲染。因此,无论每秒帧数是低于还是高于更新频率,渲染都将尽可能平滑。 我想将1帧更新为从当前帧到将来帧的将来插值。这个答案有一个讨论此操作的链接: 半固定或全固定时间步长? 编辑:如何在插值中使用最近和当前速度?例如,仅使用线性插值,它将在位置之间以相同的速度移动。我需要一种方法来对两点之间的位置进行插值,但是要考虑到插值在每个点的速度。这对于诸如粒子效果之类的低速率模拟将很有帮助。

2
以视觉上吸引人且直观的方式传播标签的算法
简洁版本 是否存在一种设计模式,用于以不重叠的方式分配车辆标签,并使其尽可能靠近其所指的车辆?如果没有,我建议的任何一种方法可行吗?您将如何自己实施? 扩大的视野 在我写的游戏中,我对空中载具有鸟瞰图。在每辆车旁边,我还带有一个小标签,上面标有有关该车的关键数据。这是一个实际的屏幕截图: 现在,由于车辆可能在不同的高度飞行,它们的图标可能会重叠。但是,我永远都不要让它们的标签重叠(或者,车辆“ A”的标签与车辆“ B”的图标重叠)。 目前,我可以检测到小精灵之间的碰撞,并且只需沿与否则重叠的小精灵相反的方向推开有问题的标签即可。这在大多数情况下都可行,但是当空域变得拥挤时,即使有其他“更智能”的选择,标签也可能被推离其飞行器很远。例如我得到: B - label A -----------label C - label 在哪个地方会更好(=标签离车辆更近): B - label label - A C - label 编辑:还必须考虑到,在重叠车辆的情况下,可能还有其他配置,其中车辆的标签可能会重叠(例如ASCII艺术示例显示了三辆非常接近的车辆,其中的标签A会与的图标重叠B和C)。 我有两个关于如何改善当前状况的想法,但是在花时间实施它们之前,我曾想过向社区征询建议(毕竟,这似乎是一个“常见的问题”,可能存在一种设计模式)。 对于它的价值,这是我在想的两个想法: 标签空间的插槽化 在这种情况下,我会将所有屏幕划分为标签的“插槽”。然后,每辆车始终将其标签放置在最近的空车上(空=该位置没有其他精灵。 螺旋搜索 从屏幕上车辆的位置开始,我将尝试将标签以递增的角度放置,然后以递增的半径放置,直到找到不重叠的位置。在以下方面: try 0°, 10px try 10°, 10px try 20°, 10px ... try 350°, 10px try 0°, 20px try …

5
如何在2D平铺游戏中快速计算视野?
我有一个图块矩阵,在某些图块上有对象。我想计算哪些图块对播放器可见,而哪些则不可见,所以我需要非常有效地做到这一点(因此即使我有一个大矩阵(100x100)和很多对象,它也可以足够快地进行计算)。 我尝试使用Bresenham的line算法来做到这一点,但是速度很慢。另外,它给了我一些错误: ----XXX- ----X**- ----XXX- -@------ -@------ -@------ ----XXX- ----X**- ----XXX- (raw version) (Besenham) (correct, since tunnel walls are still visible at distance) (@ is the player, X is obstacle, * is invisible, - is visible) 我敢肯定这是可以做到的-毕竟,我们有NetHack,Zangband,他们都以某种方式解决了这个问题:) 您可以为此推荐什么算法? 对于我的需求,我将定义可见这样的:瓷砖是可见的,当在瓷砖的至少一部分(例如角落)可以连接到播放器瓷砖的中心用一条直线,其不相交任何的障碍。

5
市场营销:愤怒的小鸟-运作方式[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 为什么有些应用程序(例如《愤怒的小鸟》)在市场上占主导地位,而其他酷/趣/上瘾的应用却从未听说过? 我正在尝试找出最佳的营销策略,或向大众市场销售应用程序的最佳方法。 是否有人对大型热门应用(例如《愤怒的小鸟》)的营销有任何想法或发现,为什么它们如此受欢迎并保持在榜首。 感谢您的任何想法,评论...
24 iphone  marketing 

3
任何适用于Android的开源游戏引擎?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 有开源的Android游戏引擎吗?
24 android 

5
目标跟踪:什么时候可以加速和减速旋转炮塔?
假设我有一个移动的通知,target定义为: Vector2 position; Vector2 velocity; float radius; 旋转的turret(安装在某种移动的车辆上)定义为: Vector2 position; Vector2 velocity; float angle; // radians float angularVelocity; // radians per second const float maxAngularVelocity; // radians per second const float maxAngularAcceleration; // radians per second per second (或沿这些方向移动。请注意,两者的位置和速度都在其他位置控制-假设速度是恒定的,并且位置根据速度而变化。) 我试图在给定的框架上编写两个相关的AI函数来确定: 要对转塔的角度施加什么角加速度(以及朝哪个方向),以使转塔指向目标? 如果目标当前处于可见状态,是否可以将其(半径范围内的任何部分)保持可见状态x几秒钟,哪怕x是几分之一秒?(或者:是否有另一种策略可以确保目标实际上是“锁定在”目标,而不是简单地飞越景点?) 我可以帮忙...
24 ai  aiming 

7
如何在没有访问开发套件的情况下获得PS3 / Xbox 360体验?
我是一个崭露头角的游戏程序员,试图进入PS3,Xbox 360的行业编程。我看到的主要问题是需要向潜在的雇主证明我的技能,但是却无法获得PS3或Xbox 360的开发套件,这直接是不可能的。 我的问题是,向控制台开发人员展示我的技能的最佳替代方法是什么? Windows DirectX中的C ++编程似乎接近于展示Xbox 360编程技能,而OpenGL中的C ++编程则相对接近于展示PS3编程技能。不幸的是,从网络研究看来,Xbox 360和PS3实际上都拥有自己的专有库,因此,这似乎并不是100%富有成果的努力。这种方法似乎最接近,但也最耗时。另外,您实际上并没有使任何内容在控制台上运行。 另一方面,使用XNA编程的好处是您的游戏实际上是在控制台上,尽管我的印象是这不是“真正的交易”,因为它只是DirectX的包装,并且使用C#代替C ++。 有没有人具有行业内的知识或经验,从而知道哪种游戏演示对向潜在雇主展示最有用?DirectX,OpenGL,XNA,虚幻引擎,Unity3d,Flash等中的C ++?一天只有几个小时,我很想知道如何指导我的努力。 我的直觉是,DirectX是最好的选择,因为它似乎更接近Xbox 360上使用的东西,但是如果以另一种语言/引擎进行出色的演示同样好,那么显然花费的时间会更少另一条路线。 预先感谢您的帮助和建议!


4
冲突检测应该在服务器端还是在客户端/服务器之间协同进行?
我正在开发一个在线游戏,该游戏将具有非常重的碰撞检测处理。播放器模型将与仅存在于服务器端(不存储在客户端数据文件中)的其他播放器,生物,建筑物,地形和实体对象发生冲突。 为了安全起见,我应该在服务器端进行所有冲突检测吗?还是应该让客户端进行检测,然后让服务器以某种方式进行跟进?我觉得服务器本身无法完成太多工作(我正在为一台服务器上的数百个播放器设计引擎)。 有谁知道主流MMO如何做到的?我知道目前几乎所有MMO都容易受到物理攻击,并且通常通过检测黑客和禁止人员来对其进行处理。我希望这些技巧根本不起作用,至少对于物理组件而言。

10
最常用的编程语言是什么?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 一年前,当我参加Java课程时,我被告知Java主要在海外游戏公司中使用,而C ++在美国这里使用。我应该专注于哪些语言进行深入学习?

9
有没有一种简单的方法可以阻止敌人站在同一地点?
所以:自上而下的游戏,我的敌人追赶玩家,当他们在一定距离之内时便站着不动并开火。如果它们都来自同一方向,则它们最终都将站在同一位置(即彼此“站在”内部),因为我目前不在敌人之间进行碰撞检测-它们可以自由越过彼此。 解决这个问题的简单方法是什么?某种形式的碰撞检测还是某种方式?

11
您最喜欢的游戏特定编码宝石是什么?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我将从约翰·卡马克(John Carmack)的《雷神之锤3》中的快速逆平方根开始: float Q_rsqrt(float number) { long i; float x2, y; const float threehalfs = 1.5F; x2 = number * 0.5F; y = number; i = * ( long * ) &y; i = 0x5f3759df - ( i >> 1 ); y = * ( float * ) …
24 algorithm 

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.