Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 在DoWhile条件下迭代NSArray_Loops_Sprite Kit_Do While_Skspritenode - Fatal编程技术网

Loops 在DoWhile条件下迭代NSArray

Loops 在DoWhile条件下迭代NSArray,loops,sprite-kit,do-while,skspritenode,Loops,Sprite Kit,Do While,Skspritenode,我有一个NSArray,在我的场景中添加了SKSpriteNodes的名字。它们是线 每次触发nstimer时,我都会生成一个随机CGPoint,以便生成下一个精灵的位置。我正在使用以下代码: -(CGPoint) newLocationForPurpose{ // CGFloat randomX,randomY,xMax,xMin,yMax,yMin; CGFloat halfSize; halfSize= 20.f; xMax = self.frame

我有一个NSArray,在我的场景中添加了SKSpriteNodes的名字。它们是线

每次触发nstimer时,我都会生成一个随机CGPoint,以便生成下一个精灵的位置。我正在使用以下代码:

-(CGPoint) newLocationForPurpose{
    //
    CGFloat randomX,randomY,xMax,xMin,yMax,yMin;
    CGFloat halfSize;
    halfSize= 20.f;
    xMax = self.frame.size.width-halfSize;
    xMin =halfSize;
    yMax = self.frame.size.height-halfSize;
    yMin = halfSize;

    randomX = [[SharedInfo sharedManager] randomFloatBetween:xMin and:xMax];
    randomY = [[SharedInfo sharedManager] randomFloatBetween:yMin and:yMax];

    return CGPointMake(randomX, randomY);

}
但是,我想检查该点是否在以前绘制的精灵中

我想做的是:

do {
    randomX = [[SharedInfo sharedManager] randomFloatBetween:xMin and:xMax];
    randomY = [[SharedInfo sharedManager] randomFloatBetween:yMin and:yMax];
} while (
         ! for (NSString *name in alreadyIngame) {
    SKNode *node = [self childNodeWithName:name];
    CGRectContainsPoint(node.frame, CGPointMake(randomX, randomY));
}
         );
现在,我知道我的状态部分(while后的括号)不起作用,但这正是我想做的事情。它将遍历alreadyInGame数组中的每个字符串(每次大约有2-3个节点,不会有太多),并检查新生成的点是否在以前生成的任何sprite中

我想先做一个循环,但它不是很有效。我可以有一个布尔值,如果循环的结果为假(即数组中存在点),则再次进行随机化

你认为还有别的办法吗


非常感谢

我相信这样可以做到:

CGFloat randomX, randomY;
BOOL unique = NO;
do {
    randomX = [[SharedInfo sharedManager] randomFloatBetween:xMin and:xMax];
    randomY = [[SharedInfo sharedManager] randomFloatBetween:yMin and:yMax];
    unique = YES;
    for (NSString *name in alreadyInGame) {
        SKNode *node = [self childNodeWithName:name];
        if (CGRectContainsPoint(node.frame, CGPointMake(randomX, randomY))) {
            unique = NO;
            break;
        }
    }
} while (!unique);

太好了,谢谢。一个一般性的问题,你认为最好是有。。。在另一个方法中,从do while?@Septronic中调用它,我只会在其他地方使用代码,否则它将一事无成。是的,我同意。我在想一些与类相关的东西,或者一些处理相关方法的东西,比如组合器类。非常感谢您的帮助。