gpt4 book ai didi

ios - 在 SpriteKit 场景之间传递数据 (Swift)

转载 作者:可可西里 更新时间:2023-11-01 01:56:42 24 4
gpt4 key购买 nike

我一直在关注旧的 Ray Wenderlich 教程:https://www.raywenderlich.com/1514-introduction-to-the-sprite-kit-scene-editor并且遇到了问题。我已经多次遇到这个问题,甚至在 stackoverflow 网站上找到了一个“解决方案”:Passing Data Between Scenes (SpriteKit)

这是与教程相同的代码(因为它是用 Swift 2 编写的,所以有一些调整)。我觉得这是一个非常简单优雅的解决方案,并没有使用 NSdefaults 等充满代码。

这是对新场景的调用,请注意soundToPlay对象:

func gameOver(didWin: Bool) {
let menuScene = MenuScene(size: self.size)
menuScene.scaleMode = .aspectFill
menuScene.soundToPlay = didWin ? "fear_win.mp3" : "fear_lose.mp3"
let transition = SKTransition.flipVertical(withDuration: 1.0)
self.view?.presentScene(menuScene, transition: transition)
}

这就是我调用的场景:

import SpriteKit

class MenuScene: SKScene {

var soundToPlay: String!

override func sceneDidLoad() {

self.backgroundColor = SKColor(red: 0, green:0, blue:0, alpha: 1)

// Setup label
let label = SKLabelNode(fontNamed: "AvenirNext-Bold")
label.text = "Press anywhere to play again!"
label.fontSize = 55
label.horizontalAlignmentMode = .center
label.position = CGPoint(x: self.frame.midX, y: self.frame.midY)

addChild(label)

// Play sound
if let soundToPlay = soundToPlay {
run(SKAction.playSoundFileNamed(soundToPlay, waitForCompletion: false))
}
}

数据永远不会传递,对象的值为nil

我怀疑它在 Swift 中发生了一些变化,因为教程已经很老了,上一个 stackoverflow 问题的建议“解决方案”也是如此。

如果是这样,现在实现这一目标的最佳方法是什么?

最佳答案

你的声音的问题是你在调用 sceneDidLoad 之后设置变量(这发生在初始化期间),所以声音不会播放。

要解决此问题,请在您的 didMove 方法中执行以下代码:

override func didMove(to view: SKView) {
guard let soundToPlay = soundToPlay else {fatalError("Unable to find soundToPlay")}
run(SKAction.playSoundFileNamed(soundToPlay, waitForCompletion: false))

}

导致崩溃的实际问题在此处不可见。

SKTransition 在您使用 SKLightNode 时会出现错误,因此通过调用带有过渡的场景,它会崩溃。 SKTransition 一直在引入 Metal 时被窃听,所以你唯一能做的就是向 apple 报告它并祈祷他们不会告诉你这是故意的。

截至目前,跟踪所有光源,并在转换时将 isEnabled 属性设置为 false

您可能需要在禁用光源之前创建场景的屏幕截图,以免看起来很傻。

关于ios - 在 SpriteKit 场景之间传递数据 (Swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52650353/

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