SKSpriteNode 在 init(NSCoder) 中设置颜色

Posted

技术标签:

【中文标题】SKSpriteNode 在 init(NSCoder) 中设置颜色【英文标题】:SKSpriteNode setting color in init(NSCoder) 【发布时间】:2016-03-15 15:06:03 【问题描述】:

我使用 XCode 7.2.1 在 SceneEditor 中创建一个 SKSpriteNode(自定义 class= PlayerNode)

我发现从 SKS 文件加载的节点是使用 init(coder: NSCoder) 方法初始化的,所以这里我如何在 swift 中实现 PlayerNode 类

class PlayerNode : SKSpriteNode 
    required init?(coder aDecoder: NSCoder) 
        super.init(coder: aDecoder)
        self.initializePhysics()
    

    func initializePhysics() 
        /* blabla */
        self.color = SKColor.greenColor()
        self.colorBlendFactor = 1.0
        self.blendMode = .Replace
    

当我运行项目时,节点颜色不会改变一点。 但是当我在 GameScene 对象的方法 didMoveToView 中更改颜色时,例如:

class GameScene: SKScene 

    var player = SKSpriteNode()

    override func didMoveToView(view: SKView) 
        super.didMoveToView(view)
        self.player = (self.childNodeWithName("player") as? SKSpriteNode)!

        self.player.color = SKColor.greenColor()
        self.player.colorBlendFactor = 1.0
        self.player.blendMode = .Replace
    

现在颜色改变了。 有没有办法在 PlayerNode 类中设置颜色?

【问题讨论】:

【参考方案1】:

您创建了一个 SKSpriteNode:

var player = SKSpriteNode()

但你想要:

var player = PlayerNode()

【讨论】:

这并不重要,因为我在 didMoveToView() 方法中覆盖了播放器 @user3682658 “不重要”是什么意思?我写的是导致您的问题的原因。 100%。 @user3682658 您在 didMoveToView() 中对 SkSpriteNode 的投射也是错误的。你的 initializePhysics() 永远不会被调用 PlayerNode 在场景加载 GameScene.sks 时创建。这是带有调试消息的screenshot,以便您检查。这里是github project @Paul 是的,但是您在创建后会覆盖您的播放器。您实现 Player 的方式是错误的。当我改变我的建议时,你的项目就会起作用

以上是关于SKSpriteNode 在 init(NSCoder) 中设置颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何在 init() 之前获取屏幕尺寸?

SKSpriteNode 未更新

编辑 SKSpriteNode 自定义类的属性?

为啥 SKSpriteNode(fileNamed:) 使用 Swift 在 iOS 中生成 nil?

使用 Swift 创建 SKSpriteNode 子类

SKPhysicsBody碰撞不起作用