问题标签 [game-physics]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
315 浏览

iphone - 在游戏开发中查找物理教程的最佳位置是什么?

我对游戏开发非常陌生(特别是 iPhone/iPad,如果这很重要的话)并且在处理动画的物理部分时遇到了困难。具体来说,我试图给几个球(圆形 UIImageView 或 CG 圆圈)物理属性(重力、重量、摩擦力等)。

有没有关于游戏开发中物理入门的非常好的教程?教程的语言真的无关紧要,因为物理运动的机制真的没有改变。

0 投票
5 回答
3496 浏览

c# - C# 中的小行星游戏运动

我正在尝试制作游戏小行星。我现在遇到的问题是,如果您按向上箭头键,它会将“船”向上移动 10 个像素。如果你按下左箭头键,它会将“船”向左转 5 度,当你向左或向右转时,我遇到的问题就会发挥作用。然后尝试向上移动。它不会向转向的方向移动。它只会将转动的“船”沿 Y 方向移动 10 度。

我想做的是有一个名为方向的变量,把这个变量想象成一个 360 度的圆。我想要做的是每次我击中左箭头时,它会从方向中减去 5,它从 0 开始并从 360 向后退,因此将其设置为 355。然后我将 355 除以 10 并得到 35.5。然后我将 10 除以 35.5 得到 0.355。然后我会从 10 中减去 0.355(在 Y 轴上向上移动)。并从 0 中减去它(在 X 中向左移动)。所以我会在 Y 线向上移动 9.645,在 X 线向左移动 0.355。

我遇到的问题是我拥有的 Asteroids 中的“船”是 Graphics.FillPie,它需要 Ints 用作起始角和扫角,但是如您所见,我必须使用双精度或浮点数。我很确定我把它复杂化了,而且我很确定有些东西要简单 100 倍,我在想一些类似于 Bresenham 线算法的东西。如果有人可以通过建议更简单的方法或解决我的问题来提供帮助,将不胜感激。提前致谢。

0 投票
4 回答
4330 浏览

algorithm - 滑动 AABB 碰撞 - 卡在边缘

我正在开发基于 3D 瓷砖的游戏,并且正在使用 AABB 碰撞检测。对于玩家相交的每个立方体,我找到玩家与立方体相交最少的轴,然后沿着该轴将玩家推出立方体。

根据签入多维数据集的顺序,当沿多个多维数据集的边缘滑动时,这可能会导致问题。我创建了一个应该解释问题的图表:

http://imgur.com/mmK0W.png

  • 箭头 #1 是玩家的尝试移动。其他箭头是碰撞响应。
  • 在左图中,首先测试与右侧立方体的碰撞,导致玩家被推向左侧,然后向上推。(
  • 在右图中,首先测试与左侧立方体的碰撞,导致玩家被向上推,此时玩家不再与另一个立方体相交。(

关于解决此问题的最有效方法的任何想法可能是什么?或者有什么更好的方法来处理碰撞响应?

谢谢你。

0 投票
2 回答
426 浏览

c++ - 在 C++ 中计算精灵的坐标

我正在尝试计算 C++ 中精灵的移动角度。

虽然目前我只是使用控制台来输出我的结果。

我的问题是,当我的结果显示在控制台中时,我无法让 x 轴变为负数。

不幸的是,我刚刚学习了基本的三角函数,所以我不知道我是否只是做错了数学。

例如:如果我选择我的角度为 270,我的速度为 1,当我认为它应该是 (-1,0) 时,控制台将新坐标显示为 (1,-1)

同样,如果我尝试将角度设为 -90,速度设为 1,我会得到 (0,-1)

只是x不能变成负数吗?

还是我犯了一个根本性的错误?

我的代码在下面-因此,如果有人能指出我做错了什么,将不胜感激。

0 投票
1 回答
921 浏览

cocos2d-iphone - 如何使移动物体“粘”在box2D中的静止物体上

我一直在试验用于 iPhone 的 cocos2D 中的 box2D 示例项目,并且想知道 box2D 是否是合适的引擎,用于在移动对象完成沿某个方向移动时使移动对象“粘”到静止对象上。

下面是我要实现的目标的简化:我有 MovingObject,一个动态刚体,当施加足够的力时它会抵抗重力垂直移动。随着 MovingObject 移动,它可能会与静态对象 StationaryObject 重叠。当重力将 MovingObject 的速度减小到零以使其不再移动时,我希望 MovingObject 仅在与 StationaryObject 重叠时才保留在原处。如果对象不重叠,MovingObject 应该开始根据重力向下向地面移动。在下降过程中,如果 MovingObject 在任何时候与 StationaryObject 重叠,它应该停止下降并保持在该位置,就好像它卡在 StationaryObject 上一样。

我可以让 MovingObject 根据我对其施加的力移动,但不确定如何让它在到达其上升的顶部时停止并停留在那里,假设它与 StationaryObject 重叠。

目前,我正在尝试简单的方形/框对象,但最终两个 MovingObject StationaryObject 将被定义为非常不同的复杂多边形形状。

提前感谢您为实现这一目标提供的任何见解和/或建议。

0 投票
1 回答
224 浏览

game-physics - 将物体投影出碰撞

作为爱好,我正在开发一款 2D 游戏。我已经使用分离轴方法实现了一些基本的碰撞检测。当两个对象发生碰撞时,我将其中一个对象投射到重叠最少的轴上。

我遇到的问题是,当一个物体移动得相当快时,重叠最少的轴并不总是正确的方向。我最好的例子是当一个物体由于模拟的引力而向下移动(沿着+ y轴)并与靠近“边缘”的环境物体碰撞(如悬崖边缘)。如果物体下落的速度足够快,那么重叠量最少的轴最终会成为 x 轴,并且物体会被沿 x 轴侧向推。

处理快速移动物体的最佳方法是什么?我考虑过以小幅度移动下落的物体,这似乎增加了很多额外的开销。我还考虑过给环境对象一个“偏好”哪个轴来投射下落的物体,但这看起来很混乱且容易出错。

有没有办法在不增加大量额外开销的情况下做到这一点?

0 投票
2 回答
8780 浏览

2d - 二维轨道物理

我正在为游戏开发 2D 物理引擎。我有重力和质量,使用简单的迭代方法(我知道我最终必须升级);我可以手动推动群众并观察他们的移动,这一切都如我所料。

现在,我正在尝试使用围绕行星的简单圆形轨道上的卫星提前设置游戏世界。为此,我需要在给定行星质量和所需距离的情况下计算卫星的初始速度矢量;这应该是微不足道的,但我一辈子都无法让它正常工作。

标准物理教科书告诉我,围绕质量 M 的圆形轨道上的物体的轨道速度是:

然而,在应用了适当的向量之后,卫星的运行速度并没有达到足够快的速度,而是落在了一个尖锐的椭圆轨道上。随机修补表明,在一种情况下,它的误差约为 3 倍。

我的重力模拟代码使用的是传统的:

G 在我的宇宙中设置为 1。

有人可以向我确认这些方程在二维空间中仍然成立吗?我看不出有什么理由不这样做,但此时我真的很想知道问题出在我的代码中还是我的假设中……


更新:我的物理引擎的工作原理如下:

(当然,在适当的地方使用向量。)

现在我每帧做一个物理滴答,每秒发生大约 500-700 次。我知道这会很快积累错误,但它至少应该让我开始。

(顺便说一句,我找不到可以处理轨道力学的现成物理引擎 --- 大多数 2D 物理引擎,如 Chipmunk 和 Box2D 都更专注于刚性结构。有人能推荐一个我可以看的吗?)

0 投票
4 回答
486 浏览

c# - 计算需求量大的粒子系统使用什么技术?

我有一个带有 X 粒子的粒子系统。每个粒子测试与其他粒子的碰撞。这给出了每帧 X*X = X^2 碰撞测试。对于 60f/s,这对应于每秒 60*X^2 次碰撞检测。

这些密集计算的最佳技术方法是什么?我应该使用 F#、C、C++ 还是 C#,还是其他什么?

以下是约束

  1. 代码是用最新的 XNA 用 C# 编写的
  2. 可以考虑多线程
  3. 没有测试与最近邻居的碰撞或减少问题的特殊算法

最后一个约束可能很奇怪,所以让我解释一下。不管约束 3,给定一个具有巨大计算需求的问题,解决该问题的最佳方法是什么。算法减少了问题;仍然相同的算法可能会因技术而异。考虑 CLR 与原生 C 的优缺点。

0 投票
1 回答
592 浏览

flash - 带有 ActionScript 3 的过山车游戏

我正在尝试使用 ActionScript 3 模拟过山车游戏,但我不知道我应该使用 2d 引擎(如 Box2d)还是从头开始。

对于那些我想看一些代码示例的人。

任何想法,指针,建议......在此先感谢!

0 投票
1 回答
2836 浏览

physics - 子弹物理问题

对于那些使用过子弹物理的人...

我阅读并运行了 hello world 示例http://www.bulletphysics.org/mediawiki-1.5.8/index.php/Hello_World,我很困惑下一步该去哪里。

hello world 教程包含一个 btStaticPlaneShape 和一个 btSphereShape,它们都是刚体。球体在静态平面上反弹的形状没有问题。

但是,当我在不同位置制作另一个球体时,Bullet 不会记录两个球体形状之间的碰撞,但它都会自动从 btStaticPlaneShape 反弹。什么样的内部魔法会导致 btStaticPlaneShape 自动反弹与之碰撞的对象?

Bullet 中是否有设置在碰撞后自动将物体相互弹开?或者您是否必须手动测试碰撞并自己施加合力?

谢谢。