【问题标题】:Replicating SpriteKit node position复制 SpriteKit 节点位置
【发布时间】:2014-11-24 22:54:17
【问题描述】:

我无法将新节点添加到现有节点所在的场景中。添加它们时,我将.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。我可以在println()insertAsteroids() 之后立即看到它们的位置,并看到它们是相同的,但是当它们显示时,它们出现在场景的左下角(原点)。

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

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

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

【问题讨论】:

    标签: sprite-kit


    【解决方案1】:

    我找到了answer。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多