У меня есть 4 элемента: зеленый, желтый, оранжевый и красный, которые падают сверху экрана.
У меня также есть элемент blueball, который следует за моим прикосновением.
Все это отлично работает! : D
Однако я хочу определить, когда зеленый шар пересекается с синим шаром.
мой синий шар помещается в представление в viewDidLoad, 4 шара размещаются в представлении на основе nstimer, который вызывает onTimer.
Все 5 шаров созданы на одном слое:
[self.view insertSubview:greenImage belowSubview:bottomBar]
Я могу определить, когда сталкиваются красный и зеленый шар:
if (CGRectIntersectsRect(greenImage.frame, redImage.frame)) {
UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"title" message:@"points" delegate:nil cancelButtonTitle:@"cool" otherButtonTitles:nil];
[message show];
[message release];
}
Если я заменю «redImage» на «blueball», я не получу предупреждения. Я предполагаю, что это может быть потому, что они не объявлены в одном методе.
Есть идеи, как обнаружить это столкновение?
Благодарность!
--- ИЗМЕНИТЬ ---
Используя предложение ниже, я делаю следующее:
greenImage = [[UIImageView alloc] initWithImage:green];
greenImage.frame = CGRectMake(startX,0,43,43);
[self.view insertSubview:greenImage belowSubview:bottomBar];
[UIView beginAnimations:nil context:greenImage];
[UIView setAnimationDuration:5 * speed];
greenImage.frame = CGRectMake(startX, 500.0, 43,43);
CGFloat r1 = greenImage.frame.size.width * .5;
CGFloat r2 = blueBall.frame.size.width * .5;
if(CGPointDistance(greenImage.center, blueBall.center) < (r1 + r2)){
UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"notice" message:@"hit!" delegate:nil cancelButtonTitle:@"cool" otherButtonTitles:nil];
[message show];
[message release];
}
ниже этого метода у меня есть:
CGFloat CGPointDistance(CGPoint p1, CGPoint p2)
{
return sqrtf((p1.x-p2.x)*(p1.x-p2.x) + (p1.y-p2.y)*(p1.y-p2.y));
}
получить ошибку:
конфликтующие типы для 'CGPointDistance'
и предупреждение:
неявное объявление функции 'CGPointDistance'