我正在制作一个游戏,我有从屏幕顶部到底部的物体。我想在对象之间选择并删除其中一个。我目前同时放弃了所有。
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
,因为现在它只是将它们放在屏幕上。
答案 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
个节点