复制 SpriteKit 节点位置
Posted
技术标签:
【中文标题】复制 SpriteKit 节点位置【英文标题】:Replicating SpriteKit node position 【发布时间】: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 方法中向场景中添加新节点有关?
【问题讨论】:
【参考方案1】:我找到了answer。
Paweł Białecki 和 Donn 找到了它。您不能在模拟树时对其进行修改。也就是说,您不能在didBeginContact()
方法内修改树,但您可以在didSimulatePhysics()
中设置标志并修改树。
【讨论】:
以上是关于复制 SpriteKit 节点位置的主要内容,如果未能解决你的问题,请参考以下文章
SpriteKit在复制节点时留了一个巨坑给开发者,需要开发者手动把复制节点的isPaused设置为false