UIImageView在其他UIImageViews上产生

时间:2014-05-09 15:15:11

标签: ios objective-c uiimageview collision

我有一个应用程序,用户驾驶汽车并收集硬币。我有一个数组,其中包含用户试图避免的所有炸弹。基本上,问题在于,当我产生硬币时,它们经常落在炸弹上,使得游戏变得不可能。所以,我写了下面的代码来防止这种情况,但硬币仍然在炸弹上产生(注意这些都是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是我后来使用的东西,但与此问题无关。

1 个答案:

答案 0 :(得分:0)

也许这只是一个复制粘贴问题,但看起来你设置硬币框架的逻辑实际上是在你的while循环中,所以无论{的值是什么,它都会执行{1}}。您可能没有注意到这一点,因为您的缩进已关闭。尝试在for循环后立即关闭while循环,看看是否有任何改变。

编辑:刚刚意识到缩进实际上是在for循环中关闭的,并且你的大括号看起来是正确的。这里可能涉及许多其他因素。你的炸弹是'框架在不断变化,而你却没有考虑到变化?是炸弹的分层兄弟姐妹(如果它们在不同的超视图中,坐标系可能不同)?

另外,请稍等一下:为什么使用coinSpawnedtrue代替falseYES?这可能与您的问题无关,但它非常不标准。