0

我试图使用UIGestureRecognizers能够在SpriteKit场景内移动一个sprite。到目前为止,它移动得很好,但只要我把手指从屏幕上移开,它就会停下来。我现在想做的事情是将手势结尾转换为精灵的轻弹式运动,这样它就继续朝着我根据该运动以一定程度的力量移动手指的方向。使用UIPanGestureRecognizer轻弹SpriteKit sprite

以下是我目前为止似乎适用于水平移动但仍在Y轴上以错误方向发送精灵的内容。

if (recognizer.state == UIGestureRecognizerStateEnded) { 
    CGPoint velocity = [recognizer velocityInView:self.view]; 
    velocity = [self convertPointFromView:velocity]; 

    [touchedNode.physicsBody applyForce:CGVectorMake(velocity.x, velocity.y)]; 
} 

更新 - 更多关于当我滑动当前会发生什么。平移和释放所产生的效果会导致精灵以正确的方向行进,但会向下添加角度。向下滑动会导致行程向上移动,向上滑动会导致行程向下移动。

更新2 - 这可能是这个代码太简单了,我想要实现,我应该计算精灵在应用力之前应该移动多远,以便我可以根据它的运动给它一个特定的速度矢量?

+0

它是如颠倒y方向一样简单吗? 'velocity.y * -1' –

+0

这反转了我看到的效果。 –

+0

是不是正确的? –

回答

0

我只是通过这种方式(SWIFT)解决了这个问题:

let transformerX = 1024/self.view!.frame.size.with 
let transformerY = 768/self.view!.frame.size.height 

if (recognizer.state == .ended) { 
    let velocity = recognizer.velocity(InView:self.view) 
    touchedNode.physicsBody?.applyForce:CGVector(dx:velocity.x* transformerX, dy: velocity.y* transformerY) 
} 

我不知道为什么这样的作品,只是偶然发现它。但它确实适用于任何大小的视图。

0
let transformerX = 1024/self.view!.frame.size.width 
let transformerY = 768/self.view!.frame.size.height 
if (recognizer.state == .ended) { 
    let velocity = recognizer.velocity(InView:self.view) 
    touchedNode.physicsBody?.applyForce:CGVector(dx:velocity.x* transformerX, dy: velocity.y* transformerY) 
}