Столкновение мяча с платформой - PullRequest
0 голосов
/ 09 декабря 2011

Я разрабатываю игру, где мне нужно обнаружить столкновение между двумя объектами (платформой и мячом):

platform = [[UIImageView alloc]initWithFrame:CGRectMake(150, 300, 60, 15)];
[platform setImage:[UIImage imageNamed:@"barrinha.png"]];
[platform setCenter:CGPointMake(150, 330)];
[platform setUserInteractionEnabled:YES];
[pit addSubview:platform];

ball = [[UIImageView alloc]initWithFrame:CGRectMake(150, 300, 15, 15)];
[ball setImage:[UIImage imageNamed:@"ball.png"]];
[pit addSubview:ball];

Я использую этот код для его обнаружения:

//EDIT FROM HERE
if (CGRectIntersectsRect(ball.frame, platform.frame)){
    pos.y = -pos.y;
}
//TO HERE

Проблема в том, что он обнаруживает столкновение на верхней и нижней стороне платформы, но по бокам от нее. При боковом столкновении мяч попадает на платформу и продолжает дрожать внутри, пока не выйдет.

Комментарий к РЕДАКТИРОВАНИЮ: Итак, как вы можете видеть, я просто заставляю его менять направление. Так что нет, мне нужна помощь в том, что было бы лучшим способом найти способ справиться с боковыми столкновениями.

Я уже пытался использовать код Джо Блоу , но он действительно работает для объектов, имеющих одинаковую ширину и высоту. Так что я хотел бы сейчас, если у вас, ребята, есть какие-нибудь идеи, чтобы помочь мне с этим вопросом.

Живи долго и процветай, парни.

1 Ответ

0 голосов
/ 09 декабря 2011

Я попробовал то же самое с двумя CGRect, и это сработало.Может быть, есть проблема с одним из кадров?В теории вы могли бы всегда использовать CGRectIntersection(ball, platform) вместо этого и проверять ширину и высоту получаемого прямоугольника как> 0.

На всякий случай вы могли бы распечатать фактические ректы до проверки на пересечение,как вы получите немного больше деталей.

РЕДАКТИРОВАТЬ: вам нужно принять во внимание оси Y и X, так что вместо того, чтобы перевернуть только один из pos, переверните их оба.

...