swift - 在 SKReferenceNode 中转换 SKSpriteNode

标签 swift casting skspritenode skreferencenode

我在 Xcode 的场景编辑器中构建了一个 Scene1。我已经引用了另一个场景,该场景具有此 Scene1 的动画。

现在,我正在尝试排除 SKReferenceNode 内的 SKSpriteNode。 在引用的场景中,我尝试转换的 SKSpriteNode 的名称是:“sc01eyelid”。

有什么建议我在这里可能做错了什么吗?

提前致谢。

import SpriteKit
import GameplayKit

class Scene1: SKScene {
    var misha: SKReferenceNode = SKReferenceNode()
    var eyelidForScene1:SKSpriteNode = SKSpriteNode()

override func didMove(to view: SKView) {        
    castMishaForScene1()
    castOutEyelid()
}

//Casting out misha
func castMishaForScene1() {
    if let someSpriteNode:SKReferenceNode = self.childNode(withName: "mishaRefNode") as? SKReferenceNode {
        misha = someSpriteNode
        print("CASTED\(misha)")
    }
    else {
        print("could not cast\(misha)")
    }
}

//Casting out eyelid
func castOutEyelid() {
    if let someSpriteNode:SKSpriteNode = misha.childNode(withName: "sc01eyelid") as? SKSpriteNode {
        eyelidForScene1 = someSpriteNode
        print("CASTED\(eyelidForScene1)")
    }
    else {
        print("could not cast\(eyelidForScene1)")
    }
}
}

最佳答案

为了访问 SKReference 的任何节点,需要在 withName 语句中添加额外的“//”:

if let someSpriteNode:SKSpriteNode = misha.childNode(withName: "//sc01eyelid") as? SKSpriteNode {}

因此 withName: "//sc01eyelid"可以访问 sc01eyelid 节点。

更多信息在这里: https://developer.apple.com/documentation/spritekit/sknode

关于swift - 在 SKReferenceNode 中转换 SKSpriteNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45366452/

相关文章:

ios - Swift 2.2 - SpriteKit - 子类 SKSpriteNode 类

c++ - 如何在 C++ 中转换指针

c - 使用 %lu 打印 int 类型 - C+XINU

c++ - const 和 static 一起转换

swift - 如何使用 SpriteKit 与已创建的 SKSpriteNode 创建碰撞?

Swift字符串截取前一段字符

ios - 通过代码添加多个 ImageView

ios - 选择要在 didEndDisplaying 中使用的单元格类

multithreading - 纯 Swift 并发

swift - 如何将物理体添加到 SKAtlasTexture 或通过 Images.xcassets 创建动画?