4

我是一位经验丰富的 iPhone 开发人员,但对 Cocos2D 和 Box2D 不熟悉,我完全承认我需要物理复习。我要构建的是预览轨迹(一条弧线表示基于输入变量的弹丸飞行路径 - 类似于在许多愤怒的小鸟风格游戏中看到的)。

不过,我想做一些不同的事情,在其中设置起点(屏幕上的弹丸开始位置)和终点(目标位置)。然而,基于用户输入的抛物线高度会发生变化。所以从这个意义上说,我不是使用抛物线路径来预览目标将降落的位置,而是使用弹丸击中目标的角度(同样,抛物线总是在目标处终止)。

我还没有在网上看到任何完全满足我需求的东西。大多数可用代码更多地与向用户显示弹丸将降落的位置有关。我想确定角度(矢量)和施加到身体以匹配不同抛物线幅度的脉冲,但总是在同一位置结束。一张图片值一千字,所以我已经链接到一张自制的图片来尝试帮助解释(所以不会让我嵌入图片)。

示例图片

任何帮助,将不胜感激。

4

2 回答 2

1

让我们用数学模型来表示......Angle抛物线的方向是输入变量,抛物线在0和中穿过 x 轴target pointheight将被计算。

抛物线看起来像这样:y = x*(a-x)*b,其中a定义到目标点的距离,b是一些(与a)影响起始角度和高度的值。我们可以通过atan (x/y)原点中心计算角度。我们知道,正切表示抛物线的导数。导数是y' = a*b - 2*x*b,并且在原点中心y=0x=0,我们得到[derivative in origin center] = a*ba被预定义为到目标点的距离,因此angle受变化b:的影响angle = atan(a*b)

此时我们有抛物线方程y = x*(a-x)*b,预定义a=[distance to target point]*4和角度方程angle=atan(a*b),其中b是输入值。例如:

  • 到点的距离是 10 ->a=40
  • 用户输入 45* -> tan(45*) = 1, b = tan(45*)/a->b=1/40
  • 将这些值放入等式中y = x*(a-x)*by = x*(40-x)/40并检查...

至于最大高度,它是根据a*x^2+b*x+c = 0条件为的方程计算的х=-b/2а。我想,自己计算应该不难:)

于 2012-12-07T10:53:14.790 回答
0

Try checking Bezier curves. You can define the path you need using them. You can use them with or without cocos 2d.

于 2012-12-07T07:33:58.493 回答