无论手指在屏幕上保持多长时间,只需在touchesBegan中注册一次?

时间:2017-07-27 14:23:31

标签: ios swift3 sprite-kit

我正在开发一款平台游戏,曾经只有一次按下静态高度跳跃。我的跳跃代码开始了:

    let zero:CGFloat = 0

    //added the if velocity greater == zero for the most part wont allow players to jump onless on ground
    if((Player.isPlayerOnGround) && (player.physicsBody?.velocity.dy)! == zero) || Player.isPlayerOnPlatform {

        player.physicsBody?.applyImpulse(CGVector(dx: 0, dy: jumpHeight))

        Player.isPlayerOnGround = false
    }

我找到了Ray Wenderlich的一个平台游戏教程,其中包含一段代码,允许玩家做一个短跳,或者一个完整的希望,取决于你是轻轻敲击屏幕还是按住屏幕。 Ray将此代码放在UPDATE方法中:

CGPoint jumpForce = ccp(0.0, 310.0);
  float jumpCutoff = 150.0;

  if (self.mightAsWellJump && self.onGround) {
    self.velocity = ccpAdd(self.velocity, jumpForce);
  } else if (!self.mightAsWellJump && self.velocity.y > jumpCutoff) {
    self.velocity = ccp(self.velocity.x, jumpCutoff);
  }

我在我的更新方法中将他的方法应用到我自己的项目中并且它有效。唯一的问题是,如果屏幕被按住,则播放器继续跳跃。

我有一个Bool检查,如果他不在地上,不允许玩家跳,但是如果屏幕点击被按住,则玩家跳跃并反复接触地面并继续跳跃。

考虑到这一点,我无法弄清楚一旦我的角色在空中而开始关闭触摸识别的逻辑,并且在我抬起手指然后再次点击之前没有重新开启。

任何建议表示赞赏!

1 个答案:

答案 0 :(得分:1)

有一个名为isJumping的布尔值,在TouchesBegan时设置为true,在TouchesEnded时返回False。如果此布尔值为true(意味着手指仍在打开),请检查跳转方法内部,如果不是,请跳转!确保将此布尔值设置为触摸中的最后一行,以便不退出第一个跳转!