如何"胶水" SpriteKit中的一个节点到另一个节点?

时间:2015-06-27 19:50:58

标签: swift sprite-kit

我们说我有一个表节点。此节点正在水平移动通过场景,如此

func newPlace() {
table.position = CGPointMake(self.size.width + 100, CGRectGetMidY (self.frame)
}
var moveTable = SKAction.moveToX(-50, duration: 1)
var placeTable = SKAction.runBlock(newPlace)
var moveAlong = SKAction.moveToX(-100, duration: 2)
var seq = SKAction.sequence([placeTable, moveAlong])
var repeatTable = SKAction.repeatActionForever(seq)
var sequenceTable = SKAction.sequence([ moveTable, placeTable, moveAlong, seq, repeatTable])
table.runAction(sequenceTable)

首先,还有其他更简单或更短的方式来执行这种无尽的产卵吗?但我的主要问题是如何在桌子上放一个水果? 它应该在桌子的随机点上,但不能在空中。 因此,我需要以某种方式将水果粘在桌子上,并在每个桌子出现时随机将它放在桌子上。怎么做?

1 个答案:

答案 0 :(得分:2)

要将水果“粘合”到桌子上,您应该使用SKNode中的addChild方法。例如:

table.addChild(fruit)

对于随机定位,您首先需要在一个区间内生成一个随机CGFloat

func randomCGFloat(#min: CGFloat, max: CGFloat) -> CGFloat {
    let p = CGFloat(arc4random()) / CGFloat(UInt32.max)
    return (max - min) * p + min
}

对于Swift 2,函数将是

func randomCGFloat(min min: CGFloat, max: CGFloat) -> CGFloat {
    // ... 
}

然后您可以使用它随机定位水果。重要的是要记住SKSpriteNode的锚点默认为(0.5, 0.5),因此原点位于表精灵的中间。

对于x轴上的随机位置,假设表格和水果的anchorPoint(0.5, 0.5),您可以这样做:

let minX = (-table.size.width + fruit.size.width) / 2
let maxX = ( table.size.width - fruit.size.width) / 2
fruit.position.x = randomCGFloat(min: minX, max: maxX)