arrays - 如何更改此数组以将物理体赋予每个单独的节点(位掩码)?

标签 arrays swift sprite-kit skphysicsbody

我的骰子从屏幕顶部掉下来。有五个不同的面孔,它们都是随机生成的,如下所示:

   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/

相关文章:

ios - 为什么 SKEmitterNode 会破坏累积的帧?

ios - 在 SpriteKit 游戏中每 n 秒添加一个 "life"(钢琴 block 的方式)

c# - 如何填充在每个索引中都有唯一数字的int数组?

c - 在 C 中作为函数传递的结构体数组

C : Access violation reading location 0x00000044

ios - 类的实例只返回 nil

ios - 有没有办法检测一个 UIView 是否正在接触另一个 UIView? swift 4

ios - 如何在 Swift 中从 GameScene 移动到 View Controller

Ruby 风格提示 : Avoid eval, 并保持清晰有序

ios - 我应该使用哪个文件系统目录来存储文件?