Swift 改变SKSpriteNode子类的纹理?
下面的类中的Swift 改变SKSpriteNode子类的纹理?,swift,sprite-kit,skspritenode,sktexture,Swift,Sprite Kit,Skspritenode,Sktexture,下面的类中的update函数是SKSpriteNode的子类,应该用来更改类的纹理。根据,更新纹理属性就足以更改SKSpriteNode的纹理。但是,此代码不起作用 你知道为什么吗 class CharacterNode: SKSpriteNode { let spriteSize = CGSize(width: 70, height: 100) var level = 0 init(level: Int) { self.level =
update
函数是SKSpriteNode的子类,应该用来更改类的纹理。根据,更新纹理
属性就足以更改SKSpriteNode的纹理。但是,此代码不起作用
你知道为什么吗
class CharacterNode: SKSpriteNode {
let spriteSize = CGSize(width: 70, height: 100)
var level = 0
init(level: Int) {
self.level = level
super.init(texture: nil, color: UIColor.clear, size: spriteSize)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func update(level: Int) {
self.level = level
self.texture = textureForLevel(level: level)
}
func textureForLevel(level: Int) -> SKTexture {
return SKTexture(imageNamed: "TestTexture")
}
您的代码运行良好。事实上,这是正确的 关于
SKSpriteNode
子类,update
方法是您添加的一个新自定义函数,因为实例方法仅对SKScene
类有效,这只是说如果未显式调用此函数,则不会执行此函数
要对类进行测试,您可以按如下方式更改代码(我只更改了textureForLevel
method以制作此示例):
正如您在启动
GameSecene
时所看到的,一个characterNode精灵将显示在屏幕中央。2秒钟后,纹理将发生变化。哈,你说得对。代码很好。只是测试中的一个bug。:)
class CharacterNode: SKSpriteNode {
let spriteSize = CGSize(width: 70, height: 100)
var level = 0
init(level: Int) {
self.level = level
super.init(texture: nil, color: UIColor.clear, size: spriteSize)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func update(level: Int) {
self.level = level
self.texture = textureForLevel(level: level)
}
func textureForLevel(level: Int) -> SKTexture {
if level == 3 {
return SKTexture(imageNamed: "TestTexture3.jpg")
}
return SKTexture(imageNamed: "TestTexture.jpg")
}
}
class GameScene: SKScene {
override func didMove(to view: SKView) {
let characterNode = CharacterNode(level:2)
characterNode.update(level:2)
addChild(characterNode)
characterNode.position = CGPoint(x:self.frame.midX,y:self.frame.midY)
characterNode.run(SKAction.wait(forDuration: 2.0), completion: {
characterNode.update(level:3)
})
}
}