触摸并移出节点(按钮)边界时如何停止精灵移动

时间:2019-06-03 15:04:53

标签: ios swift sprite-kit

我正在研究一个简单的亚军游戏,我只有3个shapenode,一个玩家节点,它只是一个shapenode(redbox,30 x 30),带有左右两个按钮,基本上是两个shapenode。

我设法设置了标志并增加了玩家节点的位置X,并在 touchesBegan 方法中使用按钮向左和向右移动,并在 touchesEnded 方法中停止了移动,一切正常

问题是,如果我触摸让我们说出右键,则播放器将按预期向右移动。但是,如果我沿任意方向触摸并将手指移出按钮边界,只要我再次触摸该按钮,播放器就会一直持续移动,然后它停止。否则它会继续移动,而另一个按钮也不会停止它。

我使用 touchesMoved 方法在移动手指时停止播放器的移动,但这不能解决问题,因为 touchesMoved 方法以最小的移动触发即使我的手指稍微摇动也可以触摸。 我希望在手指移离按钮而不是移到按钮上时调用 touchesMoved 方法。

当我触摸精灵并将其移出节点(按钮)边界时,如何停止其移动?

2 个答案:

答案 0 :(得分:0)

您有3个触摸事件:

  • touchesBegan;检查用户点击是否在移动按钮上(如果是,则移动玩家,否则,返回)
  • touchesMoved;检查用户点击是否仍在移动按钮的边界内(如果是,请继续移动播放器,否则请停止移动)
  • touchesEnded;停止玩家移动

您可以通过检查用户手指是否在按钮区域上方来解决问题。

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?)
{
    // nothing here

    let touch = touches.first
    let position_in_scene = touch!.location(in: self)

    check_button(position: position_in_scene)
}

func check_button(position : CGPoint)
{

    if right_button.contains(position)
    {
        // the tap was inside button boundaries
        player.move_left()
    }
    else
    {
        // the tap was outside button boundaries
        player.stop()
    }
}

答案 1 :(得分:0)

我正在运行此代码:

GameScene类:SKScene {

(number - number1) / number

当我触摸向左或向右按​​钮时,播放器开始按预期移动,但问题出在播放器正在移动时,如果我触摸跳转按钮,请向右说,播放器在应移动和跳跃的位置暂停了移动 简单来说,我不能同时移动和跳跃