gpt4 book ai didi

swift - 将 SKReferenceNode/SKScene 添加到 SpriteKit 中的另一个 SKScene

转载 作者:可可西里 更新时间:2023-11-01 00:03:47 25 4
gpt4 key购买 nike

我想在我的主要 GameScene 中添加一个 SKScene。 SKReferenceNode 似乎是一个很好的解决方案。

我有:- GameScene.sks(主场景)- Countdown.sks(添加到 GameScene 的场景)- Countdown.swift(自定义类,如何初始化它?SKScene?SKReferenceNode?SKNode)

我不知道如何使用我的倒计时类以编程方式添加我的倒计时。

我试过:

 let path = Bundle.main.path(forResource: "Countdown", ofType: "sks")
let cd = SKReferenceNode (url: NSURL (fileURLWithPath: path!) as URL) as! Countdown
cd.name = "countdown"
self.addChild(cd)

但是我有以下错误:

 Could not cast value of type 'SKReferenceNode' (0x10d97ad88) to 'LYT.Countdown' (0x10a5709d0

我还尝试了一些更简单的方法,例如:

 let cd=Countdown(scene:self) 
self.addChild(cd)

但我不知道如何使用 Countdown.sks 文件初始化类。

我知道我也有可能创建一个 SKNode 类,并以编程方式 100% 初始化它,但为了使用 Xcode 场景编辑器,使用关联的 .sks 文件对我来说真的很重要。

最佳答案

我这样做了,我不知道这是否是最好的方法,但是有效:

我有 2 个文件 Dragon.swift 和 sks

enter image description here

我添加了一个“主”节点,例如 DragonNode 和它的其他节点子节点

enter image description here

现在,DragonNode 是一个自定义类,在 sks 文件中设置它:

enter image description here

DragonNode是一个普通的SKSpriteNode

class DragonNode: SKSpriteNode, Fly, Fire {

var head: SKSpriteNode!
var body: SKSpriteNode!
var shadow: SKSpriteNode!
var dragonVelocity: CGFloat = 250

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)

//Example other node from sks file
body = self.childNodeWithName("Body") as! SKSpriteNode
head = body.childNodeWithName("Head") as! SKSpriteNode
shadow = self.childNodeWithName("Shadow") as! SKSpriteNode
shadow.name = "shadow"
}

//Dragon Func
func fireAction () {}
func flyAction () {}
}

在场景中,添加一个 SKReferenceNode:

enter image description here

在 SKScene 代码中:

    let dragonReference = self.childNodeWithName("DragonReference") as! SKReferenceNode

let dragonNode = dragonReference.getBasedChildNode() as! DragonNode
print(dragonNode)
//Now you can use the Dragon func
dragonNode.flyAction()

getBasedChildNode() 是用于查找您的基础节点(第一个)的扩展

extension SKReferenceNode {
func getBasedChildNode () -> SKNode? {
if let child = self.children.first?.children.first {return child}
else {return nil}
}
}

关于swift - 将 SKReferenceNode/SKScene 添加到 SpriteKit 中的另一个 SKScene,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39390375/

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