我有一个应用程序,用户驾驶汽车并收集硬币。我有一个数组,其中包含用户试图避免的所有炸弹。基本上,问题在于,当我产生硬币时,它们经常落在炸弹上,使得游戏变得不可能。所以,我写了下面的代码来防止这种情况,但硬币仍然在炸弹上产生(注意这些都是uiimageviews)。这是我的代码:
UIImageView *one = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"goldCoin.png"]];
CGRect rectOne = CGRectMake(arc4random() % (900), arc4random() % (700), 40, 40);
BOOL coinSpawned = false;
while (coinSpawned == false) {
rectOne = CGRectMake(arc4random() % (900), arc4random() % (700), 40, 40);
coinSpawned = true;
for (UIImageView *two in bombArray) {
if (CGRectIntersectsRect(rectOne,two.frame)) {
coinSpawned = false;
}
}
}
[one setFrame:rectOne];
[self.view addSubview:one];
levelCount = levelCount + 1;
coinFrame = one.frame;
[NSTimer scheduledTimerWithTimeInterval:0.01
target:self
selector:@selector(coinIntersection:)
userInfo:one
repeats:YES];
进一步注意,* two是数组bombArray中的uiimageviews,而coinFrame是一个我不太常用的全局变量。另外,levelcount是我后来使用的东西,但与此问题无关。
答案 0 :(得分:0)
也许这只是一个复制粘贴问题,但看起来你设置硬币框架的逻辑实际上是在你的while循环中,所以无论{的值是什么,它都会执行{1}}。您可能没有注意到这一点,因为您的缩进已关闭。尝试在for循环后立即关闭while循环,看看是否有任何改变。
编辑:刚刚意识到缩进实际上是在for循环中关闭的,并且你的大括号看起来是正确的。这里可能涉及许多其他因素。你的炸弹是'框架在不断变化,而你却没有考虑到变化?是炸弹的分层兄弟姐妹(如果它们在不同的超视图中,坐标系可能不同)?
另外,请稍等一下:为什么使用coinSpawned
和true
代替false
和YES
?这可能与您的问题无关,但它非常不标准。