Swift:在摄像机边界外包装/循环/重复节点?

时间:2017-07-27 08:32:43

标签: ios swift sprite-kit skscene skcameranode

我正在制作一款带有相机设置的游戏,可以与Agar.io中的相机进行比较。它可以向上,向下,向左和向右。但是,在Agar.io中,你只限于地图的空间。如果你遇到地图的一侧,那么你必须回去。

然而,在我的游戏中,我希望相机“包裹”到地图的另一侧。

我找不到任何例子,所以我自己做了:

// This is in an SKScene

private func wrapNodes() {

  let camPos = camera!.position // SKCameraNode of current scene

  for node in self.children {

    let nodePos = node.position

    let x = camPos.x - nodePos.x
    if x > spawnRect.width * 0.5 {
      node.position.x = nodePos.x + spawnRect.width // spawnRect = map size
    } else if x < -spawnRect.width * 0.5 {
      node.position.x = nodePos.x - spawnRect.width // spawnRect = map size
    }

    let y = camPos.y - nodePos.y
    if y > spawnRect.height * 0.5 {
      node.position.y = nodePos.y + spawnRect.height // spawnRect = map size
    } else if y < -spawnRect.height * 0.5 {
      node.position.y = nodePos.y - spawnRect.height // spawnRect = map size
    }
  }
}

令人惊讶的是,由于我糟糕的数学技能,这实际上似乎有效。

然而,这有两个问题。

首先,我完全不相信自己,我觉得我一定是在某个地方犯了错误。

第二个是循环遍历场景中的所有节点需要相当长的时间,所以我希望有更快的方法,但我找不到一个。所以,我想知道是否有人知道更快的方法来做到这一点。

任何想法都将不胜感激!

1 个答案:

答案 0 :(得分:0)

我现在无法想到任何可能更快或更好的方式,所以我想我会留下这篇文章以防将来有人需要它