首页 > 解决方案 > 当敌人快速移动精灵套件时,游戏会冻结一秒钟

问题描述

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

我正在使用 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)
        }
    }

移动动作运行顺利,但突然间,如果我以某种方式运行我的代码,游戏会冻结一秒钟,然后继续运行。

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

标签: swiftxcodesprite-kitfreezeskaction

解决方案


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

下面的链接解释了为什么它会解决这个问题。

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


推荐阅读