AND(&&)运算符在SWIFT中未按预期工作

Roh*_*mar 1 random distance range skspritenode swift

我试图在屏幕上随机生成节点而不重叠,所以我决定找到每个节点彼此的距离/距离,并连续随机生成一个位置,其中每个节点的范围大于100,一旦范围超过100它将突破while循环并将节点添加到视图中

    var p2Dp1: CGFloat = 0
    var p3Dp1: CGFloat = 0
    var p3Dp2: CGFloat = 0

    planet1.position = CGPoint(x: Int(arc4random_uniform(220) + 80), y: Int(arc4random_uniform(500) + 100))

    while p2Dp1 < 100.0 {

        planet2.position = CGPoint(x: Int(arc4random_uniform(220) + 80), y: Int(arc4random_uniform(500) + 100))
        p2Dp1 = SDistanceBetweenPoints(planet2.position, p2: planet1.position)
        print(" planet 2 distance from 1: \(p2Dp1) ")

    }

    while p3Dp1 < 100.0 && p3Dp2 < 100.0 {

        planet3.position = CGPoint(x: Int(arc4random_uniform(220) + 80), y: Int(arc4random_uniform(500) + 100))
        p3Dp1 = SDistanceBetweenPoints(planet3.position, p2: planet1.position)
        print(" planet 3 distance from 1: \(p3Dp1) ")
        p3Dp2 = SDistanceBetweenPoints(planet3.position, p2: planet2.position)
        print(" planet 3 distance from 2: \(p3Dp2) ")

    }

    self.addChild(planet1)
    self.addChild(planet2)
    self.addChild(planet3)
Run Code Online (Sandbox Code Playgroud)

它首先随机给第一个节点(planet1)一个位置在视图上,然后随机给node2(planet2)一个距行星1和2的距离大于100的位置.第一个while循环似乎工作正常,它的第二个while循环给我带来麻烦.根据控制台,"&&"运算符似乎不起作用

控制台/日志:

planet 2距离1:96.1665222413705 planet 2距离1:185.407658957229 planet 3距离1:136.30847369111 planet 3距离2:55.1724568965349 EWWWW我们正在接触

我设置了didBeginContact(联系人:SKPhysicsContact),如果发生了联系,它会打印出来

这是我用来查找距离的方法:

func SDistanceBetweenPoints(p1: CGPoint, p2: CGPoint) -> CGFloat {

    return hypot(p2.x - p1.x, p2.y - p1.y);
}
Run Code Online (Sandbox Code Playgroud)

有谁能告诉我我可能做错了什么?我计划总共添加5个行星,但现在我只用3来测试它

mtt*_*trb 5

while循环的条件是:

p3Dp1 < 100.0 && p3Dp2 < 100.0 
Run Code Online (Sandbox Code Playgroud)

这意味着while循环只会在两个条件都为真时继续.只要条件的任何一部分为假(即距离大于100),循环就会停止执行.

您可能希望将条件更改为或(||),例如:

while p3Dp1 < 100.0 || p3Dp2 < 100.0 {
Run Code Online (Sandbox Code Playgroud)

这将继续运行while循环,直到两个距离都大于100.