我想制作一个小球的轨迹线,在一个冲动之后物体将要去的地方,就像“愤怒的小鸟”中的那样。我做了一些研究,似乎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的转换是错误的吗?请帮帮我。
答案 0 :(得分:0)
要将速度从m / s转换为每秒像素,您需要将Sprite Kit速度乘以150。与加速度相同。