ios - 无论手指在屏幕上停留多长时间,只在 touchesBegan 中注册一次点击?

标签 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 检查,不允许玩家在不在地面上时跳跃,但是如果按住屏幕点击,则玩家会跳跃并反复接触地面并继续跳跃。

鉴于此,我无法弄清楚一旦我的角色在空中就开始关闭触摸识别的逻辑,并且在我抬起手指并再次点击之前它不会重新打开。

欢迎任何建议!

最佳答案

有一个名为 isJumping 的 bool 值,它在 TouchesBegan 时设置为 true,在 TouchesEnded 时返回 False。如果此 bool 值为真(意味着手指仍在打开),请在跳转方法内部检查,如果是,则不要跳转!确保将此 bool 值设置为 touches 的最后一行开始只是为了不退出第一次跳转!

关于ios - 无论手指在屏幕上停留多长时间,只在 touchesBegan 中注册一次点击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45353614/

相关文章:

IOS 静态表格 View 单元无法本地化

ios - Swift : value of optional type '[Int : Int]?' not unwrapped; did you mean to use '!' or '?' ? 问题

ios - 在 UINavigationController 子类中设置 UINavigationBar 子类

ios - 从 InterfaceBuilder 和通过代码设置时获得不同的颜色

ios - SKSpriteNode 脱离屏幕

swift - SKSpriteNode加了一次,莫名其妙出现了,加了六次

iOS 11 UITableView 错误

ios - 在 iPhone SE 上恢复 iPhone 4 备份后的 Web App 具有 iPhone 4 大小

swift - 将数据从自定义 UIView 传递到主 VC

ios - SKAction scaleBy : duration: SpriteKit