[提前发帖。]
我真的很困惑为什么会这样。
我有一个游戏,其中精灵(SKSpriteNodes)以正常的间隔从屏幕右侧产生并向左移动。
产卵精灵是一个世界的孩子。 SKSpriteNode,是游戏场景的孩子。这里宣布世界(didMove(to: view)
):
world = self.childNode(withName: "world") as! SKSpriteNode
产卵被添加到世界'像这样:
nowSpawn.position = CGPoint(x: 350, y: 0)
world.addChild(nowSpawn)
nowSpawn.run(SKAction.moveBy(x: -1000, y: 0, duration: 10))
此生成添加位于函数addSpawn()
内,该函数在另一个名为spawnDelays()
的函数中调用,该函数计算添加生成的间隔的微小变化。 spawnDelays()
中调用了didMove(to : view)
:
func spawnDelays () {
let randDuration = Double(arc4random_uniform(UInt32(2))) + (universalDuration/8)
let rerunSpawnDelays = SKAction.run{spawnDelays()}
run(SKAction.sequence([
SKAction.run(addSpawn),
SKAction.wait(forDuration: Double(randDuration)),
rerunSpawnDelays,
]), withKey: "spawning"
)
}
spawnDelays()
然而,发生了一些奇怪的事情。对于大约前10-15个产卵,它按预期工作,产生于屏幕右侧并向左移动。然而,不久之后,产卵开始进一步向左(即在屏幕上)出现,并继续向左前方显示,直到它们完全离开屏幕的左侧。
为了尝试查看正在进行的操作,每次出现新的生成时,我都会打印每个spawn的.position
以及世界精灵的http://finance.google.com/finance/
。然而,即使产卵产生在错误的位置(例如在屏幕中间,其位置将接近(0,0)),控制台仍然将其位置打印为(350,0) - 即位置在哪里我添加了产卵。
为了检查世界精灵是否移动,我每次产生一个产卵时都会打印它的位置 - 它始终是(0.0000 ...,0.0 ....)。< / p>
我唯一可能的解释是,世界的父母 - 即游戏场景 - 向左移动,因此所有儿童精灵的相对位置向左移动。但这没有任何意义。