我目前正在尝试创建一个游戏,当平台离开场景时会在场景中自动生成平台。
我创建了5个SKSpriteNodes并将它们作为子项添加到Platform SKNode。
然后我在更新功能
中使用platformGroupNode.position.x--
在屏幕上移动它们
但是,我想检测其中一个孩子何时离开屏幕,以便我可以生成一个新的平台。
我已经尝试了下面的内容,但它似乎只给了我在父节点
中的那个孩子的位置for child in shipGroupNode.children {
println(child.position.x)
}
是否有更好的方法可以将Sprite Nodes分组以允许我查看与场景相关的各个属性并控制有一个组?
代码------------
mport SpriteKit
// Globals
let platformGroupNode = SKNode()
var platformX:CGFloat = 200
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
platformGroupNode.position = CGPoint(x: 0, y: 0)
addChild(platformGroupNode)
// Add platforms
addPlatform(platformX)
// Add platforms
for i in 1...4 {
addPlatform(platformX)
//println(platformX)
}
}
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
/* Called when a touch begins */
}
override func update(currentTime: CFTimeInterval) {
/* Called before each frame is rendered */
platformGroupNode.position.x--
for child in platformGroupNode.children {
println(child.position.x)
println(convertPointToView(CGPoint(x: child.position.x, y: child.position.y)))
}
}
func addPlatform(platformx:CGFloat) {
let platform = SKSpriteNode(imageNamed:"Spaceship")
platform.xScale = 0.5
platform.yScale = 0.5
platform.position = CGPoint(x: platformx, y: self.size.height/2)
platformX = platformx + 200
platformGroupNode.addChild(platform)
}
}
答案 0 :(得分:1)
您可以使用intersectsNode
上的SKScene
方法检查子节点是否可见; <{1}}会在孩子们可见的情况下返回intersectsNode
。
true
删除然后创建新平台的另一种方法是重新定位刚刚移出屏幕的平台,这样它就会移回屏幕上。例如:如果从右向左滚动,当平台离开左边缘时,它将在右侧重新定位。这样做的好处是只需要在开始时创建一些平台。
为了使其正常工作,您的for child in platformGroupNode.children {
if let sprite = child as? SKSpriteNode where !intersectsNode(sprite) {
child.removeFromParent()
// Generate new platform...
}
}
的{{1}}等于其SKScene
大小至关重要。有关这方面的信息,请查看SpriteKit Coordinates differ between iPad and iPhone