Ios 在touchesbeated函数期间随时间减少整数

Ios 在touchesbeated函数期间随时间减少整数,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,我想在调用ToucheSBegind函数后随时间减少该函数中的一个值。我已为此值UpdateCumpMotion创建了一个函数。该函数经过测试可以正常工作 但是,由于在触摸结束前只调用一次,因此在整个触摸过程中,它只会减少一次,而不是只增加一次 如何在touchesBegind函数中随时间减少整数 这是我的touchesbearth代码和我的减少整数的函数: override func update(currentTime: NSTimeInterval) { // Character

我想在调用ToucheSBegind函数后随时间减少该函数中的一个值。我已为此值UpdateCumpMotion创建了一个函数。该函数经过测试可以正常工作

但是,由于在触摸结束前只调用一次,因此在整个触摸过程中,它只会减少一次,而不是只增加一次

如何在touchesBegind函数中随时间减少整数

这是我的touchesbearth代码和我的减少整数的函数:

override func update(currentTime: NSTimeInterval) {
    // Character
    updateCharacterPosition()
    updateJumpMotion()
  }


override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {

    var timer = NSTimer.scheduledTimerWithTimeInterval(0.02, target: self, selector: Selector("updateJumpMotion"), userInfo: nil, repeats: true)

    if onGround && !gameOver {
        if self.initialJumpY == nil {
            self.initialJumpY = self.character.position.y
        }


        if self.character.position.y - self.initialJumpY! < 175 {
            self.character.physicsBody?.applyImpulse(CGVectorMake(0, self.jumpVelocity))
        }

    }

    self.onGround = false

}


func updateJumpMotion() {
  if onGround {
        self.frameCounterY = 0
        self.negativeVelocity = 0
    } else {
        self.frameCounterY = self.frameCounterY + 0.15
        self.negativeVelocity = CGFloat(self.frameCounterY * self.frameCounterY)
    }
  self.jumpVelocity = 125 - self.negativeVelocity
 }

启动一个重复的NSTimer,并让该计时器在每次计时器启动时降低您的值。如果要在用户释放视图时停止降低值,请将代码放入touchesend,使计时器无效。

首先,您可以在touchesbented函数中创建一个SKAction,然后使用属性SKAction.waitForduration///some value。接下来编写此代码以确保它永远重复Forever self.runActionyourAction.repeatActionForever


在另一个线程上循环,直到调用touchesend?因为触摸只能开始一次,所以这并不奇怪。。。您可能需要设置一个NSTimer,当触碰开始时触发,当触碰结束时失效。@holex我已经尝试过了,但到目前为止还没有成功。它会在跳转机制中造成很大的延迟。将重复计时器设置为0.02,这样您就有机会以50 FPS的速度更新该值;这就足够了。@NGAFD,你只需要重新组织你的代码,因为你已经知道代码的哪部分需要重复调用,哪部分只调用一次。我添加了self.jumpTimer=NSTimer.scheduledTimerWithTimeInterval1,target:self,selector:SelectorupdateJumpMotion,userInfo:nil,重复:忠实于我的触控功能,但我不知道如何将其与jumpVelocity联系起来?用户正在使用spritekit,我认为他正在制作一个游戏。最好使用SKAction.waitForDuration,因为NSTimer忽略事件暂停,在使用spritekit时可能会导致未知的错误ToucheSBegind函数只允许其中的所有内容运行一次。如果我添加SKAction,它确实会减少该值,但它不会链接到SKAction之外的self.jumpVelocity。不过,我可能做错了什么。touches开始运行一次,这会触发您的操作运行。由于该操作被配置为永久运行,因此它将运行多次。你能详细说明一下它是如何不喜欢动作之外的自我跳跃速度的吗?它不起作用吗?显示你的代码我已经编辑了我的文章,但是当XCode说它不能识别repeatActionForever时,问题就开始了。我必须承认我还没有和SKActions合作过,所以我真的需要一些帮助。
//Example working code
let waitAction = SKAction.waitForDuration(some duration)
let waitActionRun = SKAction.runBlock {
// do something that you want to do here

}
runAction(SKAction.repeatActionForever(SKAction.sequence([waitAction,waitActionRun])))