Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 为什么在我的update()方法中多次调用runAction()函数?_Swift_Sprite Kit - Fatal编程技术网

Swift 为什么在我的update()方法中多次调用runAction()函数?

Swift 为什么在我的update()方法中多次调用runAction()函数?,swift,sprite-kit,Swift,Sprite Kit,在Sprite Kit中的func update(currentTime:CFTimeInterval)方法中,我有一个gameTicker,它在每次游戏更新时递增一个整数 当gameTicker可被500整除时,我暂停该代码,通过删除didMoveToView()中调用的原始操作来禁止敌人繁殖,并启动一个作为短暂延迟的nextLevelDelayTicker。一旦nextLevelDelayTicker达到100,我开始再次增加原始的gameTicker,将nextLevelDelayTick

在Sprite Kit中的
func update(currentTime:CFTimeInterval)
方法中,我有一个
gameTicker
,它在每次游戏更新时递增一个整数

gameTicker
可被500整除时,我暂停该代码,通过删除
didMoveToView()
中调用的原始操作来禁止敌人繁殖,并启动一个作为短暂延迟的
nextLevelDelayTicker
。一旦
nextLevelDelayTicker
达到
100
,我开始再次增加原始的
gameTicker
,将
nextLevelDelayTicker
重置为0,然后运行一个动作再次开始繁殖敌人

基本上,一旦
nextLevelDelayTicker
等于
100
,我只想运行一次条件的内容。我在其中添加了一个
print(“yolo”)
,以查看在满足条件时是否只调用了一次,而且确实是这样。但是,由于某些原因,
runAction(spawnAction,带键:“spawnAction”)
被多次调用。只要满足self.nextLevelDelayTicker.getTimePassed()==100的条件,就会在很短的时间内产生大量的敌人

如何多次调用
runAction(spawnAction,带key:“spawnAction”)
,但只调用一次
print(“yolo”)

override func update(currentTime: CFTimeInterval) {
    /* Called before each frame is rendered */
    if gameTicker.isActive == true {
        gameTicker.increment()
    }

    // If gameTicker is equal to 5 seconds, increase enemy amount
    if gameTicker.getTimePassed() % 500 == 0 {
        self.enemyAmount += 1
         self.removeActionForKey("spawnAction")

        gameTicker.isActive = false
    }

    // If level has been completed and last ghost has been killed, activate next level scene
    if gameTicker.isActive == false && enemyArray.count == 0 {
        self.nextLevelDelayTicker.increment()

        if self.nextLevelDelayTicker.getTimePassed() == 100 {
            print("YOLO")
            self.gameTicker.isActive = true
            self.nextLevelDelayTicker.reset()

            let spawnAction = SKAction.repeatActionForever(
                SKAction.sequence([
                    SKAction.waitForDuration(2),
                    SKAction.runBlock({
                        [unowned self] in
                        self.spawnEnemy()
                        })
                    ])
            )

            runAction(spawnAction, withKey: "spawnAction")
        }
    }
}

原来我是个渡渡鸟头<代码>运行操作(spawnAction,withKey:“spawnAction”)没有被多次调用,它是:

if gameTicker.getTimePassed() % 500 == 0 {
     self.enemyAmount += 1
     self.removeActionForKey("spawnAction")

    gameTicker.isActive = false
}
被多次调用,将大量敌人添加到
self.enemyAmount
全局变量,该变量用于确定运行
spawnAction
时有多少敌人产卵

我在条件中添加了一个标志,每个关卡周期只调用一次,而每个游戏周期大约调用300次:

if gameTicker.getTimePassed() % 500 == 0 && gameTicker.isActive == true{
    self.enemyAmount += 1
    self.removeActionForKey("spawnAction")

    gameTicker.isActive = false
    print("STOP SPAWNING")
}