Как мне удалить одну жизнь за столкновение двух 2D объектов?

Я программирую игру для развлечения и для более подробного ознакомления с режимами C и GBA 3. Хотя я столкнулся с проблемой.

У меня есть эти два блока на экране, один - хороший парень, другой - плохой парень. Когда хороший парень сталкивается с плохим парнем, это должно удалить жизнь. Вот где проблема приходит.

У меня есть это в течение цикла, который запускает игру:

    if (plyr_row < enemy_row + enemy_size && plyr_ row 
    + plyr_size > enemy_row && plyr_col < enemy_col + enemy_size
    && plyr_size + plyr_col > enemy_col) 
    {
      lives--;
    }

Жизнь падает, но много жизней отнимается, когда игрок вступает в контакт с врагом. Другими словами, во время контакта жизни очень быстро падают, и я просто хочу удалять их каждый раз, когда они сталкиваются, как я могу это сделать?

2 ответа

Решение

Вы должны использовать флаг, чтобы запомнить, происходит ли столкновение в настоящее время или нет. Что-то вроде:

int in_collision = 0; // global flag, initialized to 0 once at start

...

if (plyr_row < enemy_row + enemy_size &&
    plyr_row + plyr_size > enemy_row &&
    plyr_col < enemy_col + enemy_size &&
    plyr_size + plyr_col > enemy_col) {
   if (!in_collision) {
       in_collision = 1;
       lives--;
   }
} else {
   in_collision = 0;
}

Теперь бегущее столкновение должно прекратиться до того, как в следующем столкновении будет удалена другая жизнь.

Самое простое решение - поддерживать флаг IN_COLLISION, Вы хотите удалить жизнь, когда происходит столкновение и IN_COLLISION ложно

Затем нужно переключить его на true при первом обнаружении столкновений и затем на false, когда вы больше не сталкиваетесь.

Другие вопросы по тегам