选择生成不同的SKSpriteNodes

时间:2016-11-16 18:31:16

标签: swift sprite-kit skspritenode

我正在制作一个游戏,我有从屏幕顶部到底部的物体。我想在对象之间选择并删除其中一个。我目前同时放弃了所有。

 func ShapePicker() -> SKSpriteNode{
    let shapeArray = [purpleOctagon, coin, greenTriangle, orangeHexagon]

    let MaxValue = self.size.width / 2 - 200
    let MinValue = self.size.width / 3 * 0.95

    let rangeMax = UInt32(MaxValue)
    let rangeMin = UInt32(MinValue)

    purpleOctagon.position = CGPoint(x: CGFloat(arc4random_uniform(rangeMin) + rangeMax), y: self.size.height)
    self.addChild(purpleOctagon)

    greenTriangle.position = CGPoint(x: CGFloat(arc4random_uniform(rangeMin) + rangeMax), y: self.size.height)
    self.addChild(greenTriangle)

    coin.position = CGPoint(x: CGFloat(arc4random_uniform(rangeMin) + rangeMax), y: self.size.height)
    self.addChild(coin)
    return shapeArray[Int(arc4random_uniform(UInt32(shapeArray.count)))]

}

我希望该程序能够随机.addChild,因为现在它只是将它们放在屏幕上。

2 个答案:

答案 0 :(得分:1)

您的代码暗示您希望所有这些代码都在屏幕上,然后随机删除...所以想要继续.addChild。你想要的是,他们不要一下子掉下来。

因此,您需要将.physicsBody.pinned更改为true,以使其保持在屏幕顶部。

然后,在update()中,您可以检查已经过了多长时间等等,经过一定的秒数后,您可以执行arc4random_uniform并使用该结果更改{{1}其中一个节点的属性(因此导致那个节点,而那个节点只有一个节点)。

因此,如果硬币为0,三角形为1,八边形为2,则在.pinned跟踪经过的时间,然后在3秒后,随机检查0-2,并且该检查将执行:

.update

只需确保您的节点在适当的范围内,以便您可以在switch result { case 0: // coin coin.physicsBody?.pinned = false // makes it drop case 1: // triangle ...

中执行逻辑

如果我读错你的Q,你只想生成然后删除只有一个,那么你仍然需要上面的switch语句,而不是改变update()你会改为physicsBody

所以你的func内部更像是:

.addChild

我仍然对您的代码和问题感到困惑,所以请在评论中说明,以便我可以在需要时更新此答案。

答案 1 :(得分:0)

您可以将addChild调用移出此功能,它会返回SKSpriteNode,然后您可以添加。{/ p>

let sprite = ShapePicker()
addChild(sprite)

或者,只需添加随机选择的一个并将其返回。您不需要使用

计划的addChild个节点