Обнаружение столкновения квадратов iPhone

#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