如果知道起点和终点但高度是可变的,如何在cocos2d / box2d中创建预览轨迹?

时间:2012-11-28 03:35:12

标签: ios cocos2d-iphone box2d-iphone

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

我想做一些不同的事情,其中​​我设置起点(射弹在屏幕上开始位置)和终点(目标位置)。根据用户输入,抛物线的高度会有什么变化。所以在这个意义上,我并没有使用抛物线路径来预测目标将落在哪里,而是射弹撞击目标的角度(再次,抛物线始终终止于目标)。

我没有在网上看到任何符合我需求的东西。大多数可用的代码更多地与向用户展示射弹落地的地方有关。我想确定角度(矢量)和应用于身体以匹配不同抛物线振幅的脉冲,但总是在同一位置结束。一张图片胜过千言万语,所以我已经链接到一张自制图片试着帮忙解释一下(所以不要让我嵌入图片)。

Example image

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分: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预定义为与目标点的距离,因此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)*by = x*(40-x)/40并检查...

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

答案 1 :(得分:0)

尝试检查贝塞尔曲线。您可以使用它们定义所需的路径。您可以使用或不使用cocos 2d。