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)
它首先随机给第一个节点(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);
}
有谁能告诉我我可能做错了什么?我计划总共添加5个行星,但现在我只用3来测试它
while循环的条件是:
p3Dp1 < 100.0 && p3Dp2 < 100.0 
这意味着while循环只会在两个条件都为真时继续.只要条件的任何一部分为假(即距离大于100),循环就会停止执行.
您可能希望将条件更改为或(||),例如:
while p3Dp1 < 100.0 || p3Dp2 < 100.0 {
这将继续运行while循环,直到两个距离都大于100.