【问题标题】:Using a UIPanGestureRecognizer to flick a SpriteKit sprite使用 UIPanGestureRecognizer 轻弹 SpriteKit 精灵
【发布时间】:2013-12-20 13:06:46
【问题描述】:

我正在尝试使用 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 - 可能是这段代码对于我想要实现的目标来说太简单了,我应该计算精灵在施加力之前应该移动多远,以便我可以根据它的移动给它一个特定的速度向量?

【问题讨论】:

  • 是不是像反转y方向一样简单? velocity.y * -1
  • 这与我看到的效果相反。
  • 反过来不正确吗?
  • 反过来对吗?你能解释一下什么的反面吗?谢谢
  • 您说它上升而不是下降,然后说添加* -1 会导致相反的结果。我的意思是反向不正确(向上表示向上,向下表示向下)。

标签: ios uigesturerecognizer sprite-kit uipangesturerecognizer skphysicsbody


【解决方案1】:

我就是这样解决这个问题的(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)
}

我不知道为什么这种方式有效,只是偶然发现它。但它确实适用于任何大小的视图。

【讨论】:

    【解决方案2】:
    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) 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多