【发布时间】:2015-05-24 20:53:46
【问题描述】:
我正在制作一个精灵套件游戏,我正在使用 plist 文件来设置每个级别的属性。我的 plist 文件中的一个属性是一个名为 patterns 的字典,其中包含 n 个项目,其中每个项目都是一个块,手动键入 x 和 y 位置。这个模型非常适合我正在制作的游戏,因为快速设置关卡非常方便。但是,由于缺乏编码经验,我面临一个我无法解决的缺点:一些关卡有多达 290 个块,所以当应用程序尝试读取关卡时,应用程序会冻结 5 秒。这对用户来说非常烦人。一开始我的方法是:读取 plist 文件,并为每个项目调用方法,该方法使用其 imageNamed "" 方法将块创建为 SKSpriteNode。我认为这是它滞后这么多的原因,我试图在运行时加载 300 个精灵这一事实似乎是问题的一个有希望的原因。然后我尝试了以下方法:当游戏第一次开始时,我制作了最初加载块池的方法。这是我的方法
func addObsticles1ToPool() {
for i in 0...300 {
let element = SKSpriteNode(imageNamed: "obsticle1")
element.hidden = true
obsticle1Pool.append(element)
}
}
然后,我的代码读取 plist 文件,并为每个块调用以下内容:
func block(x: CGFloat, y: CGFloat, movingUp: Bool, movingSide: Bool, spin: Bool, type: Int16) {
var block: SKSpriteNode!
for obs in obsticle1Pool {
if obs.hidden {
block = obs
break
}
}
block.hidden = false
// Further down the properties of the block are set, such as actions it should perform depending on the input values, also its physics body is set.
我还有一些方法可以处理这样一个事实,即新元素应该作为游戏的收益添加到池中,所有这些都可以正常工作。延迟时间下降到 3.5 - 4 秒左右,但这显然还不够好。我想要一个没有延迟的游戏。但是,我不确定是否有另一种更有效的方法来做我想做的事情,而不是使用精灵池。 有谁知道如何减少这个延迟时间?
【问题讨论】:
-
添加加载画面?
-
简单的解决方案,但这不在我的 UI 设计要求中:/
-
你预加载了你所有的图片吗?
-
U 将耗尽所有系统 RAM,尝试在开始时加载 300 个图像。操作系统将在具有这种使用模式的真实手机上杀死您的应用程序。此外,还有一个启动计时器,可以查看您的应用程序启动多长时间,如果启动时间过长,它将被终止。总体而言,您需要一种更好的方法,以便不需要加载太多图像或不那么大的尺寸。
标签: ios swift sprite-kit