В создаваемой нами игре уже есть главный герой, которым мы можем управлять, есть враги, которые летят по экрану сверху вниз, мы уже создали фон для игры и вообще всё хорошо ) Но теперь пришла пора сделать игру игрой. А в нашем случае это означает, что нам нужно, что бы мы могли стрелять, что бы враги стреляли в нас и все эти выстрелы кого-то поражали и убивали. Заодно имеет смысл сделать, что бы при столкновении корабля игрока и корабля противника так же происходил бы взрыв и оба корабля теряли жизни (либо сразу погибали). Давайте всеми этими вопросами и займёмся в этом уроке по созданию игр.
Первым делом решим, как будем проверять столкновения кораблей друг с другом и со снарядами. Давайте выберем простейший способ – будем считать корабли окружностями, а снаряды точками, так вычисления упростятся максимально…
Зададим радиус окружности для живых объектов:
Теперь выстрелы. Создадим класс снаряда:
Дополним основной цикл приложения. Кстати, в прошлом примере забыл одну вещь – надо удалять корабли противника, когда они вылетают за экран, иначе будут утечки памяти и они будут впустую считаться (чем дольше играем, тем больше игра будет требовать памяти и больше тормозить). Собственно, вот код:
Осталось только создать практически идентичный код для врагов – что бы они так же могли стрелять в игрока, как он стреляет в них. Думаю, как это сделать понятно, потому код приводить не буду. В конце-концов, кому интересно – можете попробовать сделать сами и потом сравнить с тем, что получилось у меня.
RomU4, спасибо за отзыв, рад что Вам понравилось. Своими уроками я как раз хочу показать, что игры делать совсем не сложно – надо лишь иметь немного желания и планировать свою работу. Уроки по ОГЛ + SDL, к сожалению, обещать не могу – я достаточно давно с ними не работаю, т.к. последние годы сосредоточился именно на DirectX. А вот статьи по физике будут уже в самое ближайшее время.
Вячеслав, уроки безусловно отличны! Хотелось бы узнать, есть ли способы апроксимации по проверки столкновений? Так как если в игре будет множество объектов, допустим 50 кораблей, каждый из них будет вести стрельбу, допустим 10 выстрелов за время жизни одного выстрела, то получится слишком накладно с точки зрения просчетов.
Обычно коллижены считаются сначала на уровне ААББ, а потом уже на уровне масок. Таким образом обычно можно без проблем считать сотни и иногда даже тысяч пересечений каждый кадр. При этом часто можно “выстрел” упростить до точки, либо до отрезка, что ещё больше упрощает ситуацию и ускоряет расчёты.
Классные уроки, с нетирпением жду продолжения…
игрушка такая компактная получается, я поначалу думал что кода будет куда больше.
Также хотелось бы на сайте увидеть уроки по GL в связке с SDL.
И еще непомешали бы уроки по физике. Спасибо =)…
RomU4, спасибо за отзыв, рад что Вам понравилось. Своими уроками я как раз хочу показать, что игры делать совсем не сложно – надо лишь иметь немного желания и планировать свою работу. Уроки по ОГЛ + SDL, к сожалению, обещать не могу – я достаточно давно с ними не работаю, т.к. последние годы сосредоточился именно на DirectX. А вот статьи по физике будут уже в самое ближайшее время.
Неплохо!
А разве пули противников и врагов не надо удалять?
Конечно же надо.
Вячеслав, уроки безусловно отличны! Хотелось бы узнать, есть ли способы апроксимации по проверки столкновений? Так как если в игре будет множество объектов, допустим 50 кораблей, каждый из них будет вести стрельбу, допустим 10 выстрелов за время жизни одного выстрела, то получится слишком накладно с точки зрения просчетов.
Обычно коллижены считаются сначала на уровне ААББ, а потом уже на уровне масок. Таким образом обычно можно без проблем считать сотни и иногда даже тысяч пересечений каждый кадр. При этом часто можно “выстрел” упростить до точки, либо до отрезка, что ещё больше упрощает ситуацию и ускоряет расчёты.