#iphone #objective-c #cocoa-touch #uikit #collision-detection
#iPhone #objective-c #cocoa-touch #uikit #обнаружение столкновения
Вопрос:
У меня есть игра, в которой мне нужно знать, ударился ли мяч о стену сбоку (чтобы отскочить назад по оси x) или сверху (чтобы отскочить назад по оси y, как при отскоке от земли). Они отлично работают по отдельности, но когда я раскомментирую их оба, это не сработает. (Я думаю, это потому, что код «перекрывается»?). В любом случае, вот код, и любая помощь будет фантастической:
if (CGRectIntersectsRect(guy.frame, wall_01.frame)) {
if (guy.frame.origin.y guy.frame.size.height >= wall_01.frame.origin.y amp;amp; guy.frame.origin.y <= wall_01.frame.origin.y wall_01.frame.size.height) {
iJump *= kRestitution;
}
if (guy.frame.origin.x guy.frame.size.width >= wall_01.frame.origin.x amp;amp; guy.frame.origin.x <= wall_01.frame.origin.x wall_01.frame.size.width) {
jJump *= kRestitution;
}
}
Комментарии:
1. каково поведение с двумя раскомментированными ifs?
2. как вы используете переменные iJump и jJump?
3. они применимы к движениям шара по оси x и y.
Ответ №1:
предположим, что стена находится с левой стороны, а y увеличивается сверху вниз
CGFloat leftWall = someXPosition;
CGFloat ground = someYPosition;
CGFloat ballLeft = CGRectGetMinX(guy.frame);
CGFloat ballRight = CGRectGetMaxX(guy.frame);
CGFloat ballBottom = CGRectGetMaxY(guy.frame);
if (ballLeft <= leftwall amp;amp; ballBot >= ground){
//ball hit corner ?
} else if (ballLeft <= leftWall){
//passed or touched wall
} else if (ballBot >= ground){
//passed or touched ground
}
Комментарии:
1. я изменил это, я никогда не делал ничего подобного, вот как я буду определять два фрейма, взаимодействующих друг с другом
2. Вы только что спасли мой бекон! Большое спасибо за информацию о cgrectget