gpt4 book ai didi

ios - 在场景之间切换而不初始化场景

转载 作者:行者123 更新时间:2023-11-30 14:19:37 24 4
gpt4 key购买 nike

我对 Swift 相当陌生,在处理多场景 spritekit 情况时遇到了巨大的麻烦。

让我介绍一下背景:

我的游戏正在尝试拥有三个屏幕;介绍、升级场景和游戏场景。我的介绍场景只是根据用户触摸初始化升级场景或初始化播放场景(介绍屏幕上有两个按钮,选择播放或转到升级场景)。在升级屏幕上,您可以按各种按钮来更改影响 Sprite 速度、纹理和各种其他内容的变量。完成后,用户可以按下一个按钮来初始化播放场景。当 Sprite 触摸游戏场景中的另一个节点时,简介屏幕会再次初始化。

我一直在研究的棘手部分是尝试让升级屏幕对播放屏幕产生影响,而不声明所有全局变量(这适用于第一次播放,但在尝试按播放屏幕上的任何内容时)再次屏幕上我收到大量 EXC 和 SIGABRT 错误,可能是由于内存访问错误)。

例如:

升级场景:

class UpgradeScene: SKScene, SKPhysicsContactDelegate {

var groundspeed = 5.0
var hero = SKSpriteNode(imageNamed:"Hero")

override func touchesBegan(touches: NSSet, withEvent event: UIEvent){

for touch: AnyObject in touches{

let location = touch.locationInNode(self)

if self.nodeAtPoint(location) == self.sbutton1 {
groundspeed = 25.0
}

if self.nodeAtPoint(location) == self.sbutton2 {
hero.texture = SKTexture(imageNamed:"Hero2")
}

if self.nodeAtPoint(location) == self.playscenebutton {
var scene = PlayScene(size:self.size)
let skView = self.view! as SKView
scene.scaleMode = .ResizeFill
scene.size = skView.bounds.size
skView.presentScene(scene)
}
}
}

所以希望当我按下第三个按钮时,前两个按钮带来的变化将在下一个场景中承载它的函数中起作用:

游戏场景:

class PlayScene: UpgradeScene{

override func update(currentTime: NSTimeInterval) {

runningbar.position.x -= CGFloat(groundspeed)

//SO THE GROUNDSPEED CHANGE FROM THE OTHER SCENE WOULD WORK HERE...
//BUT IT JUST INITIALIZES THE ORIGINAL DECLARED VALUES
}
}

PlayScene 继承自 UpgradeScene,并将使用原始值运行地面速度,但无法识别按下按钮时所做的更改。

问题

如何让我的升级场景影响我的游戏场景而不导致一堆内存错误?我可以以不同的方式打开它,而不是初始化它并丢失升级场景中对原始变量值、纹理等所做的更改...吗?

最佳答案

我的建议是不要让 PlayScene 继承 UpgradeScene,特别是如果您的唯一目的是使用更新的值。事实上,正如您自己发现的那样,这些更改不会显示在 PlayScene 中。

您误解了继承的概念。您的评论 //BUT IT JUST INITIALIZES THE ORIGINAL DECLARED VALUES 正如我所期望的那样。您无法继承更改。继承不是这样工作的。

您避免全局变量是正确的。

您可能想要做的是设置一个类来保存和管理更改。我建议您使用 NSUserDefaults 来跟踪更改,并使用类来解释更改。

例如,赛车游戏可能允许您自定义不同速度的引擎。我会将速度存储为整数,并且对于他们在自定义屏幕中选择的任何选项,我将更新 NSUserDefaults 中的值。当玩家玩游戏时,我将有一个类来解释存储在 NSUserDefaults 中的数字并为汽车提供适当的速度。

关于ios - 在场景之间切换而不初始化场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30648519/

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