gpt4 book ai didi

swift - 更改 SKSpriteNode 子类的纹理?

转载 作者:行者123 更新时间:2023-11-28 06:29:49 24 4
gpt4 key购买 nike

下面类中的update 函数是 SKSpriteNode 的子类,应该会更改类的纹理。根据this SO answer , 更新 texture 属性足以改变 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")
}

最佳答案

您的代码运行良好。事实上这个SO answer是正确的。

关于SKSpriteNode子类,update方法是你自己新增的自定义函数,因为实例方法update(_:)仅对 SKScene 类有效,这只是说如果未显式调用此函数则不会执行。

要对您的类(class)进行测试,您可以按以下方式更改代码(我只更改了 textureForLevel 方法来制作此示例):

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)
})
}
}

正如您在启动 GameScene 时看到的那样,一个角色节点 Sprite 将显示在屏幕中央。 2 秒后,纹理会发生变化。

关于swift - 更改 SKSpriteNode 子类的纹理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40648501/

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