我正在使用Swift和SpriteKit制作我的第一个射击游戏,我最近遇到了setScale()
的问题。我有一个Laser
类,其实例作为子类添加到Ship
类。我现在意识到父节点的任何缩小比例也将缩放其子节点。在update
中的GameScene
方法中,我检查名为“激光”的每个孩子的位置,以确定是否应在屏幕外删除其父级。我最近更新了一些精灵 - 包括它们的相对尺寸,我注意到每个激光器的位置都是偏离的,因为它们在到达屏幕末端之前被移除,并且在调试时它们的x位置实际上要大得多比它们在屏幕上显示的位置。我还注意到每个Laser
实例的起始x相对于Ship
实例中的原始位置。所以船可能在屏幕中间,但激光x位置仍然从0开始,如果船能够通过激光,激光的位置变为负 - 有没有办法抓住它在屏幕上的位置而不是相对在其父母的开始?
这是我正在检查的代码:
self.aShip.gun.enumerateChildNodesWithName("laser",
usingBlock: { node, _ in
if let aLaser = node as? Laser { i
if(aLaser.position.x > self.size.width){
aLaser.removeFromParent()
}
}
}
)
看起来缩放比我通常假设的要多得多,所以任何对这个问题的洞察或如何管理代码和精灵之间的关系都会很棒!!
编辑:
我发现在let positionInScene = self.convertPoint(aLaser.position, fromNode: self.aShip.gun)
下添加if let aLaser = node as? Laser {
并因此使用positionInScene
而不是aLaser
位置。但是,我仍然不完全理解缩放效果继续使用aLaser
并且它的位置并且不知道是否必须以update
(每秒60次)的速率转换这样的位置。