获取子SKSpriteNode位置

时间:2015-06-07 22:20:30

标签: swift sprite-kit

我目前正在尝试创建一个游戏,当平台离开场景时会在场景中自动生成平台。

我创建了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)
    }
}

1 个答案:

答案 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