我的骰子从屏幕顶部掉下来。有五个不同的面孔,它们都是随机生成的,如下所示:
var imageNames = ["Dice", "Dice2", "Dice3", "Dice4"]
let imageIndex=Int(arc4random_uniform(UInt32(imageNames.count)))
let die=SKSpriteNode(imageNamed: imageNames[imageIndex])
die.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(45, 45))
die.physicsBody?.dynamic = true
die.physicsBody?.affectedByGravity = false
let positions = [
CGPointMake(150, 600),
CGPointMake(300, 600),
CGPointMake(100, 600),
]
let randomPositionIndexs = Int(arc4random_uniform(UInt32(positions.count)))
die.position = positions[randomPositionIndexs]
die.size = CGSizeMake(45, 45)
die.runAction(
SKAction.moveByX(0, y: -900,
duration: NSTimeInterval(10.8)))
addChild(die)
所以我的问题是,有没有一种方法可以使节点仍然随机生成,但每个节点都被单独调用,以便我可以唯一地标识每个节点?先感谢您。
最佳答案
首先,在[0, diceCount-1]中生成一个随机数:
let diceCount = 4
let index=Int(arc4random_uniform(UInt32(diceCount)))
接下来,使用字符串插值来构造骰子的文件名(即 Dice1、Dice2...)
let die = SKSpriteNode(imageNamed: "Dice\(index+1)")
并创建和配置物理体
die.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(45, 45))
die.physicsBody?.dynamic = true
die.physicsBody?.affectedByGravity = false
最后,根据随机数(0 - diceCount-1)设置类别位掩码。使用index
和按位左移运算符计算相应的位值(即1、2、4...)
die.physicsBody?.categoryBitMask = UInt32(0x1 << index)
还有一件事......
die.physicsBody?.contactTestBitMask = UInt32(0x1 << index)
关于arrays - 如何更改此数组以将物理体赋予每个单独的节点(位掩码)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34867280/