【发布时间】:2020-06-28 16:02:04
【问题描述】:
我正在尝试将 enumerateChildNode 包含在 For 循环中。我的代码如下。
func movement() {
scene?.enumerateChildNodes(withName: "//enemy") {
(node, stop) in
enemyArray.append(node as! SKSpriteNode)
}
for i in enemyArray {
if enemy.position = player.position + 1 {
player.position = player.position + 1
}
continue
}
上面的代码所做的是检查屏幕上的每个敌人 SKSpriteNode(假设它找到了 6 个),然后检查它们相对于玩家的位置。如果玩家的位置靠近敌人的位置,它会移动玩家的位置,然后从原来的位置继续 for 循环,并从剩余的敌人中检查玩家的位置。
但是,如果玩家移动到一个 for 循环已经检查过的敌人位置附近(当时这是错误的),它将错过玩家靠近该敌人的情况。 EG:for 循环检查敌人 1,2,3(发现 3 靠近玩家并将玩家移动到 2 附近)然后检查 4,5,6。它会错过 2...
我想让代码做什么
If enemy.position = player.position + 1 {
//move player
*stop the loop, and check the players position from the beginning of the for loop*
}
【问题讨论】:
-
目前,这个问题对未来的读者的使用有限。我认为如果您包含完整的问题,包括您打算如何更改
i,这将有很大帮助。这将使当前的答案无效,这通常是不鼓励的。不过,在这种情况下,我个人认为这是对您的问题的必要改进。 -
在您的示例中,
position似乎是一维的,因此可以对其进行排序,然后您也许可以使用更智能的方法来确定移动播放器时会发生什么。跨度> -
我认为你是对的。我需要一种不同的方法:(位置不是问题,在我移动我需要考虑的玩家之后再次检查所有敌人的位置。也许 for 循环不是解决方案。
标签: swift xcode loops sprite-kit