2
我有一个NSArray,其名称为SKSpriteNodes,添加到我的场景中。他们是NSString。在DoWhile条件下迭代一个NSArray
我每次触发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));
}
);
现在,我知道我的条件的一部分(而之后的括号内)不工作,但是这就是我想要做这样的事情。它将遍历alreadyInGame数组中的每个字符串(每次大约2-3个节点,不会有太多),并检查新生成的点是否位于以前生成的精灵中。
我正在考虑先制作循环,但效率并不高。我可以有一个布尔值,并且如果循环的结果是假的(即,数组中存在点)来再次进行随机化。
您认为还有其他方法吗?
非常感谢
完美,谢谢。一个普遍的问题,你认为有更好的办法...在一个单独的方法,并从这个做的内部调用它? – Septronic
@Septronic我只会这样做,如果我在其他地方使用代码,否则它什么都没有实现。 – trojanfoe
是的,我同意。我正在考虑一些类或类似的东西来处理相关的方法,比如组合器类。 – Septronic