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)
}
}
移动动作运行顺利,但突然间,如果我以某种方式运行我的代码,游戏会冻结一秒钟,然后继续运行。
所以每次它产生敌人并移动它们时,在某些时候冻结整个屏幕一秒钟然后继续产卵。我认为“让 waitForSec = SKAction.wait(forDuration: 1.2)”导致问题,但我不知道为什么以及如何解决它,因为它是一个工作代码。
解决方案
显然问题不是 SKAction.wait 而是我从纹理创建的物理体。
下面的链接解释了为什么它会解决这个问题。
https://www.hackingwithswift.com/read/36/7/optimizing-spritekit-physics
推荐阅读
- javascript - 如何修复 React Native 错误“jest-haste-map:Haste 模块命名冲突”?
- matlab - 我应该如何在网站中指定一个标签以使用 webread() 阅读?
- sql - INNER JOIN 与两个具有相同字段的相同表
- wpf - WPF 图像周围奇怪的黑色背景
- reactjs - Reactjs:如何在单击按钮时一次显示一个切换的内容
- javascript - 期望一个字符串(用于内置组件)或一个类/函数(用于复合组件)但得到:对象
- javascript - 当“循环”为真时,无法通过其标签切换复选框
- django - TypeError:__init__() 为 reportlab django 获得了一个意外的关键字参数“as_attachment”
- javascript - readable.destroy() 不会同时发出“关闭”和“错误”事件 Node.js
- sql-server - MSSQL将名称解析为两个新列并添加到同一个表中