gpt4 book ai didi

ios - Sprite kit Sprite 加载性能改进

转载 作者:搜寻专家 更新时间:2023-10-30 23:02:17 25 4
gpt4 key购买 nike

我正在制作一个 sprite 套件游戏,我正在使用 plist 文件来设置每个级别的属性。我的 plist 文件中的一个属性是一个名为 patterns 的字典,它包含 n 个项目,其中每个项目都是一个 block ,手写 x 和 y 位置。该模型非常适合我正在制作的游戏类型,因为它可以非常方便地快速正确设置关卡。但是,由于缺乏编码经验,我面临一个无法自行解决的缺点:有些关卡有多达 290 个 block ,因此当应用程序尝试读取关卡时,应用程序会卡住大约 5 秒钟。这对用户来说非常烦人。一开始我的方法是:读取 plist 文件,并为每个项目调用使用其 imageNamed ""方法将 block 创建为 SKSpriteNode 的方法。我认为这就是它如此滞后的原因,我试图在运行时加载 300 个 Sprite 的事实似乎是问题的一个有前途的原因。然后我尝试了以下方法:当游戏第一次开始时,我制作了最初加载 block 池的方法。这是我的方法

    func addObsticles1ToPool() {

for i in 0...300 {

let element = SKSpriteNode(imageNamed: "obsticle1")
element.hidden = true
obsticle1Pool.append(element)

}

}

然后,我的代码读取 plist 文件,并为每个 block 调用以下命令:

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 秒左右,但显然仍然不够好。我想要一款没有延迟的游戏。但是,我不确定是否有另一种比使用 Sprite 池更有效的方法来做我想做的事情。有谁知道如何减少这个滞后时间?

最佳答案

我遇到了同样的问题!问题出在这一行......

let element = SKSpriteNode(imageNamed: "obsticle1")

SpriteKit 不够智能,无法知道已经使用该图像创建了纹理。所以它正在做的是一遍又一遍地创造这种纹理,这是昂贵的。

而是先在循环外创建一个纹理,然后再创建带有纹理的 Sprite 节点。像这样的……

let elementTexture = SKTexture(imageNamed: "objstical1")

for i in 0...300 {

let element = SKSpriteNode(texture: elementTexture)
element.hidden = true
obsticle1Pool.append(element)

}

这不仅会快很多,还会大量减少您的应用程序内存...假设这与我遇到的问题相同。希望对您有所帮助。

关于ios - Sprite kit Sprite 加载性能改进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30428220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com