我们说我有一个表节点。此节点正在水平移动通过场景,如此
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)
首先,还有其他更简单或更短的方式来执行这种无尽的产卵吗?但我的主要问题是如何在桌子上放一个水果? 它应该在桌子的随机点上,但不能在空中。 因此,我需要以某种方式将水果粘在桌子上,并在每个桌子出现时随机将它放在桌子上。怎么做?
答案 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)