【发布时间】: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