Как мне удалить одну жизнь за столкновение двух 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, когда вы больше не сталкиваетесь.