像棒球棒一样用 SKShapeNode 执行触摸移动击球的最佳方法?

Best way to perform a touch moved hit with a SKShapeNode like with a baseball bat?

我想用随着用户手指移动而移动的棒球棒击球。

我尝试了以下两种方法:

(Bat = SKShapeNode(...))

1. - 使用 didBeginContact,然后将 Velocity 应用于最后一次 touchesMoved

的球
Bat.position = location
CGVectorMake(-((touch.previousLocationInNode(self).x-location.x)*30), -((touch.previousLocationInNode(self).y-location.y)*30))
body.velocity = vectorPower
(tried with .applyImpulse() aswell)

这里的问题是,它看起来不真实并且并非一直有效,您必须调整值以获得远程好的解决方案。也因为 Bat 是旋转的,这个解决方案不能正常工作。

2。 - 使用 SKPhysicsBody 将两个对象物理碰撞在一起

Ball.physicsBody?.restitution = 1
Bat.physicsBody = SKPhysicsBody(rectangleOfSize: ..)
...
Bat.position = location

这里的问题是,球员运动没有真正的速度,棒球棒有时只是穿过球而没有击中球。

我现在想知道是否有最佳实践来执行基于用户的碰撞并根据玩家的移动速度进行正确的弹跳?

提前致谢!任何帮助都会有很大帮助。

如果有人也有这个问题-我自己解决了:

  1. 根据您的运动计算速度

  2. 在您移动的所有时间将此速度应用于您的节点

  3. 通过在每次更新时重置位置来禁用速度

这样,即使您移动节点,它也会以正确的速度撞击其他节点。