我目前正在尝试创建一个可以改变纹理的节点,但它在模拟器上不可见。我知道它在那里,因为我将showNodesCount设置为true并且它显示场景中有2个节点。它显示的是一个加农节点,但不是rgyBox节点,如果我点击加农节点,它应该改变它的纹理。这是我的代码:
class GameScene: SKScene {
var gameOver = false
let cannon = SKSpriteNode(imageNamed: "cannon")
let rgyArray = ["redBox", "greenBox", "yellowBox"]
var rgyBlock = SKSpriteNode()
func changeRgyColor() {
var randomRGY = Int(arc4random_uniform(3))
rgyBlock.texture = SKTexture(imageNamed: rgyArray[randomRGY])
}
override func didMoveToView(view: SKView) {
/* Setup your scene here */
cannon.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame))
self.addChild(cannon)
rgyBlock.texture = SKTexture(imageNamed: rgyArray[1])
rgyBlock.position = CGPointMake(self.cannon.position.x, self.cannon.position.y + 20)
self.addChild(rgyBlock)
rgyBlock.zPosition = 10
}
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
for touch: AnyObject in touches {
let location = touch.locationInNode(self)
if self.nodeAtPoint(location) == self.cannon {
changeRgyColor()
}
}
}
我做错了什么?
答案 0 :(得分:0)
您需要通过调用rgyBlock
重新创建rgyBlock = SKSpriteNode(imageNamed: rgyArray[1])
。在顶部定义的地方,它被定义为什么都没有。然后,您需要在didMoveToView
中重新创建它。您可以删除didMoveToView
中rgyBlock
的纹理集。
您可以采用不同的方式,并将imageNamed: "aTextureNameHere"
放入rgyBlock
的定义中。这将为rgyBlock
提供一个值。然后你可以在didMoveToView
中设置纹理(就像你已经做的那样)。这种方式可能更快更容易。