复制精灵套件节点位置



我在将新节点添加到现有节点所在的场景中时遇到问题。 添加它们时,我将 .position 属性设置为相同,但它们出现在场景的原点而不是现有节点的位置。

我正在SpriteKit中构建一个非常简单的小行星游戏。 我的GameScene上有一种方法可以添加小行星:

// MARK: - Asteroids
func insertAsteroids(count: Int, size: AsteroidSize, newPosition: CGPoint?) {
    for i in 0 ..< initialAsteroidCount {
        let asteroid = Asteroid(size: size)
        if let position = newPosition {
            asteroid.position = position
        } else {
            asteroid.position = randomPositionOnScene()
        }
        self.addChild(asteroid)
    }
}

在我的GameScene中,我称之为insertAsteroids(initialAsteroidCount, size: AsteroidSize.Big, newPosition: nil)newPosition设置为nil,所以他们去一个随机的地方。

当我拍摄一颗小行星时,我有一个联系人处理程序,它调用相同的方法,但略有不同:

func didBeginContact(contact: SKPhysicsContact) {
    [...]
    //make new asteroids
    if let newSize = oldAsteroid.smallerAsteroidSize() {
        let newAsteroidCount = Int(arc4random_uniform(2)) + 2
        self.insertAsteroids(newAsteroidCount, size: newSize, newPosition: oldAsteroid.position)
    }
    [...]
}

关键是oldAsteroid.position. 我可以在insertAsteroids()后立即println()位置,并看到它们是相同的,但是当它们显示时,它们出现在场景的左下角(原点)。

即使我强迫它们进入已知位置,它们仍然出现在原点:

self.insertAsteroids(newAsteroidCount, size: newSize, newPosition: CGPoint(x: 40, y: 50))

我是否在坐标系上犯了错误,或者这与在 SKPhysicsContactDelegate 方法中向场景添加新节点有关?

我已经找到了答案。

Paweł Białecki和Donn找到了它。 在模拟树时,您无法对其进行修改。 也就是说,您不能在 didBeginContact() 方法中修改树,但可以在 didSimulatePhysics() 中设置标志并修改树。

最新更新