如何使节点按时间顺序替换另一个节点?

时间:2016-01-17 15:30:05

标签: swift sprite-kit sktexture

假设我有五个骰子:enter image description here

当我点击时,我喜欢带有一个点的模具面以替换带有两个点的那个(并且将1个模具移动到行上,同时将另一个模具移动到行中)并且如果最后一个模具在最后,得到它来替换行中的第一个骰子。更换SKTextures会与此有关吗?先感谢您。

编辑:

     override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    for touch: AnyObject in touches {

        let touchLocation = touch.locationInNode(self)
        let touchedNode = self.nodeAtPoint(touchLocation)
       let texRight = SKAction.setTexture(SKTexture(imageNamed: "DieFace1"))
        DieFace2.runAction(texRight)


    }

}

编辑2:

    import SpriteKit

     var arrayOfDieFaces = [onE, twO, threE, fouR, fivE]


    class GameScene: SKScene {



      }



    func replace() {
    var count = 1
    while count <= 5 {
        let changeTexture = SKAction.setTexture(SKTexture(imageNamed: "Dice\(count)"))
        if count == 5 {
            arrayOfDieFaces[0].runAction(changeTexture)
        }
        else{
            arrayOfDieFaces[count].runAction(changeTexture)
        }
        count += 1
    }
    arrayOfDieFaces.append(arrayOfDieFaces[0])
    arrayOfDieFaces.dropFirst()

}

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {





    for touch: AnyObject in touches {

        let touchLocation = touch.locationInNode(self)
        let touchedNode = self.nodeAtPoint(touchLocation)

        replace()

    }


}

2 个答案:

答案 0 :(得分:1)

我认为这应该有效(未经测试),假设您的DieFaces是1到6:

var arrayOfDieFaces = [DieFace1, DieFace2, DieFace3, DieFace4, DieFace5, DieFace6]


func changeTextures() {
    var count = 1
    while count <= 6 {
        let changeTexture = SKAction.setTexture(SKTexture(imageNamed: "DieFace\(count)"))
        if count == 6 {
            arrayOfDieFaces[0].runAction(changeTexture)
        }
        else{
            arrayOfDieFaces[count].runAction(changeTexture)
        }
        count += 1
    }
    arrayOfDieFaces.append(arrayOfDieFaces[0])
    arrayOfDieFaces.dropFirst()
}

只需在touchesBegan()函数中调用此函数。

答案 1 :(得分:1)

这种方法改变了每个骰子的位置,而不是改变它的纹理。通过改变位置,它保持唯一识别每个骰子的能力(例如,通过名称)。

首先,创建一个名为SKNode的{​​{1}},并定义每个骰子之间的大小和间距。

dice

其次,创建骰子节点并按顺序将它们添加到let dice = SKNode() let diceSize = CGSizeMake(10, 10) let spacing:CGFloat = 2 dice并使用

设置每个骰子的位置
SKNode

请注意,每个骰子的位置取决于数组中节点的位置。

最后,将以下内容添加到您的代码中。

for i in 0..<6 {
    let sprite = SKSpriteNode ...
    sprite.physicsBody = SKPhysicsBody( ...
    sprite.physicsBody?.categoryBitMask = UInt32(0x1 << i)
    sprite.position = CGPointMake(CGFloat(i)*(diceSize.width+spacing) , 0)
    dice.addChild (sprite)
}
// Center SKNode in the view
dice.position = CGPointMake (CGRectGetMidX(view.frame),CGRectGetMidY(view.frame))
addChild (dice)