Swift:环绕/循环/重复相机边界外的节点?
Swift: Wrap / loop / repeat nodes outside camera bounds?
我正在制作一款游戏,其相机设置可以与 Agar.io 中的游戏进行比较。它可以向上、向下、向左和向右移动。但是,在 Agar.io 中,您仅限于地图的 space。如果你 运行 进入地图的一侧,那么你必须返回。
但是,在我的游戏中,我希望相机 'wrap' 到地图的另一侧。
我找不到任何例子所以我自己做了:
// 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
}
}
}
令人惊讶的是,由于我糟糕的数学技能,这似乎有效。
但是,这样做有两个问题。
首先是对自己完全不信任,总觉得自己哪里做错了。
第二个是循环遍历场景中的所有节点需要相当长的时间,所以我希望有更快的方法,但我找不到。所以,我想知道是否有人知道更快的方法。
如有任何想法,我们将不胜感激!
目前我想不出任何可以更快或更好的方法,所以我想我会把这个 post 留在这里,以防将来有人需要它
我正在制作一款游戏,其相机设置可以与 Agar.io 中的游戏进行比较。它可以向上、向下、向左和向右移动。但是,在 Agar.io 中,您仅限于地图的 space。如果你 运行 进入地图的一侧,那么你必须返回。
但是,在我的游戏中,我希望相机 'wrap' 到地图的另一侧。
我找不到任何例子所以我自己做了:
// 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
}
}
}
令人惊讶的是,由于我糟糕的数学技能,这似乎有效。
但是,这样做有两个问题。
首先是对自己完全不信任,总觉得自己哪里做错了。
第二个是循环遍历场景中的所有节点需要相当长的时间,所以我希望有更快的方法,但我找不到。所以,我想知道是否有人知道更快的方法。
如有任何想法,我们将不胜感激!
目前我想不出任何可以更快或更好的方法,所以我想我会把这个 post 留在这里,以防将来有人需要它