簡體   English   中英

使用UIPanGestureRecognizer輕拂SpriteKit Sprite

[英]Using a UIPanGestureRecognizer to flick a SpriteKit sprite

我正在嘗試使用UIGestureRecognizers來在SpriteKit場景內移動精靈。 到目前為止,它可以正常移動,但是只要我將手指從屏幕上移開,它就會停止。 我現在想做的就是將手勢末端轉換為輕拂樣式的動作,使其在精靈上移動,使其繼續沿我在手指移動的方向上施加一定程度的力。

這就是到目前為止,我似乎可以進行水平移動,但是會一直在錯誤的Y軸方向上發送精靈。

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

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

更新-有關我當前滑動時會發生什么的更多信息。 搖攝和釋放產生的效果會導致精靈沿正確的方向傳播,但會附加一個向下的角度。 向下滑動會導致行程向上運動,向上滑動會導致行程向下運動。

更新2-可能對於我想要實現的代碼來說,此代碼太簡單了,我應該計算在施加力之前精靈應該移動多遠,以便可以根據其運動給定特定的速度矢量?

我只是通過這種方式(快速)解決了這個問題:

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

我不知道為什么這種方法有效,只是偶然發現它。 但這實際上適用於任何大小的視圖。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM