当对脉冲施加脉冲时,计算SpriteKit中物体的轨迹

时间:2018-01-27 23:51:46

标签: swift sprite-kit game-physics

我想制作一个小球的轨迹线,在一个冲动之后物体将要去的地方,就像“愤怒的小鸟”中的那样。我做了一些研究,似乎spriteKit中的物理学与现实生活中的si单位和其他东西一样计算。使用位移公式Δx=ViΔt+ 1 /2aΔt^ 2我使用这个公式来设置九个球的位置,即物体在冲动后的位置。

这是我到目前为止所尝试的:

func calculateTrajectory(mass: CGFloat, force1: CGFloat, force2: CGFloat){

    for i in 0...8{

        var x = CGFloat()
        var y = CGFloat()

        let a1 = CGFloat(force1/mass)//I am taking the force applied to the object and calculating the acceleration from that 
        let a2 = CGFloat((force1/mass) - 10)//I am subtracting 10 for y because of the -10m/s/s of gravity
        let t = CGFloat((i/16)^2)//I am taking the number that the ball is in the line and dividing it by 16 so the line can show where the object will be from 0-0.5 secnds

        x = 0.5 * a1 * t
        y = 0.5 * a2 * t

        trajectory.copiedNodes[i].position = CGPoint(x:ball.position.x + x, y: ball.position.y + y)

    }



}

我也在触摸中使用这个移动来做拖拽吊索射击的事情。

calculateTrajectory(mass: (ball.physicsBody?.mass)!, force1: startPositionDrag.x - movedLocation.x, force2: startPositionDrag.y - movedLocation.y)

计算的力量与我将用于在接触结束时射球的冲动相同:

ball.physicsBody?.applyImpulse(CGVector(dx:startPositionDrag.x - endPositionDrag.x, dy:startPositionDrag.y - endPositionDrag.y ))

当我计算这个时,球并不接近物体所在的位置,当我通过将i除以更多时间来改变球的时间时,即使我正在计算它们的位置,球也会变得更远经过较少的时间。我有什么办法做错了吗?我对CGFloat的转换是错误的吗?请帮帮我。

1 个答案:

答案 0 :(得分:0)

要将速度从m / s转换为每秒像素,您需要将Sprite Kit速度乘以150。与加速度相同。