当起点和终点已知但高度可变时,如何在cocos2d/box2d中创建预览轨迹



我是一名经验丰富的iPhone开发人员,但我是Cocos2D和Box2D的新手,我完全承认我需要一次物理复习。我想要构建的是一个预览轨迹(一个基于输入变量指示投射物飞行路径的弧线,类似于许多愤怒的小鸟风格的游戏)。

不过,我想做一些不同的事情,设置起点(屏幕上投射物的起始位置)和终点(目标位置)。不过,改变的是基于用户输入的抛物线的高度。因此,从这个意义上说,我不是用抛物线路径来预览目标将落在哪里,而是用炮弹击中目标的角度(同样,抛物线总是终止于目标)。

我在网上没有看到任何能完全满足我需求的东西。大多数可用的代码更多地与向用户显示炮弹将落在哪里有关。我想确定应用于物体的角度(矢量)和脉冲,以匹配不同的抛物线振幅,但总是在同一位置结束。一张图片胜过千言万语,所以我链接到了一张自制的图片,试图帮助解释(所以不会让我嵌入图片)。

示例图像

如有任何帮助,我们将不胜感激。

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

抛物线看起来是这样的: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预定义为到目标点的距离,因此angleb: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)*b:y = x*(40-x)/40中,并检查

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

尝试检查贝塞尔曲线。您可以使用它们定义所需的路径。你可以在有或没有cocos 2d的情况下使用它们。

最新更新