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) 
}