为什么我的节点是不可见的

时间:2015-08-18 08:02:34

标签: sprite-kit textures

我目前正在尝试创建一个可以改变纹理的节点,但它在模拟器上不可见。我知道它在那里,因为我将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()
        }    
    }    
}

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您需要通过调用rgyBlock重新创建rgyBlock = SKSpriteNode(imageNamed: rgyArray[1])。在顶部定义的地方,它被定义为什么都没有。然后,您需要在didMoveToView中重新创建它。您可以删除didMoveToViewrgyBlock的纹理集。

您可以采用不同的方式,并将imageNamed: "aTextureNameHere"放入rgyBlock的定义中。这将为rgyBlock提供一个值。然后你可以在didMoveToView中设置纹理(就像你已经做的那样)。这种方式可能更快更容易。