当敌人移动 sprit kit swift 时游戏冻结一秒钟

game freeze for a sec when enemy moving sprit kit swift

这是我的时间来问关于堆栈溢出的问题,所以希望你们能理解我的问题。

我正在使用 xcode 为自己开发一个游戏,这是我用来生成敌人并让他们从屏幕右向左移动的代码。

      func startHorizonLvl() {
        let spawn = SKAction.run(spawnEnemyHorizon)
        let waitForSec = SKAction.wait(forDuration: 1.2) // here is the problem
        let spawnSequence = SKAction.sequence([waitForSec, spawn])
        let spawnForever = SKAction.repeatForever(spawnSequence)
        
        self.run(spawnForever)
    }

   func spawnEnemyHorizon() {
        
        makePlaceForPlayer()
        enemies.removeAll()

        for index in 0..<possitionArray.count {
            
            if !positionForPlayer.contains(possitionArray[index]){
                let enemy = createEnemy(name: meteoriteName.randomElement()!)
                enemy.position = CGPoint(x: self.size.width * 1.20, y: possitionArray[index])
                enemies.append(enemy)
            }
        }
        
        for enemy in enemies {
            self.addChild(enemy)
            let endPoint = CGPoint(x: -self.size.width * 0.6, y: enemy.position.y)
            let moveEnemy = SKAction.move(to: endPoint, duration: 1.5)
            let deleteEnemy = SKAction.removeFromParent()
            let enemySequence = SKAction.sequence([moveEnemy, deleteEnemy])
            enemy.run(enemySequence)
        }
    }

移动动作 运行ning 很顺利,但突然间如果我 运行 我的代码不知何故游戏会冻结一秒钟然后继续 运行ning。

所以每次它生成敌人并移动它们时,都会在某个时候冻结整个屏幕一秒钟,然后继续生成。我认为“让 waitForSec = SKAction.wait(forDuration: 1.2)” 导致了问题,但我不知道为什么以及如何解决它,因为它是一个工作代码。

显然问题不是 SKAction.wait 而是我从纹理创建的物理体。

下面的 link 解释了为什么会发生并解决了问题。

https://www.hackingwithswift.com/read/36/7/optimizing-spritekit-physics