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) 中设置颜色的主要内容,如果未能解决你的问题,请参考以下文章