Если бы ты писал Башня обороны игра, не придет ли вам в голову использовать для этого физический движок, например Коробка2D ? Как бы вы реализовали движение юнитов, поведение башен? Какие еще преимущества вы бы получили от физического движка в такой игре?
Над этими и другими вопросами я начал думать несколько месяцев назад, в результате чего на свет появилась довольно интересная игра.
Я большой поклонник игр в жанре Tower Defense. Все началось очень давно с Green TD, карты для Warcraft 3, тогда я перепробовал много игр на flashtowerdefense.com , а после появления Android-смартфона он часто проводил время за играми из маркета.
Идея
Однажды я подумал, что было бы неплохо самому написать такую игру.Мне хотелось придумать что-то необычное, но, как говорит один мой друг, «роботы уже устали от них».
С ним трудно не согласиться; по сути, роботы, зомби и мифические существа в этой категории присутствуют на рынке почти повсюду.
Мне хотелось чего-то более легкого и спокойного.
Еще у меня была навязчивая идея использовать в игре физический движок, во-первых, чтобы было проще обрабатывать столкновения, а во-вторых, чтобы добавить что-то нестандартное и интересное.
В итоге был придуман следующий сюжет: вместо гуляющих по карте монстров и зомби у меня были падающие с деревьев фрукты, вместо башен роботов у меня были башни животных.
Траектория падения плодов определялась ветвями, растущими на дереве, и силой тяжести.
По пути вниз плоды несколько раз отскакивали от ветвей, менялась их скорость и направление, и за время падения животным башням приходилось их ломать.
Я сделал пять типов башен:
Белка.
Кидает орехи в фрукты, обычная башня, хорошая скорость атаки и урон.
Несмотря на то, что никаких особых способностей у башни нет, без нее очень сложно пройти любой уровень; это полезно как в самом начале игры, так и в конце.
Белая лиса.
Запускает в плоды замораживающий вихрь, тем самым замедляя скорость их падения.
Без этой башни практически невозможно пройти любой уровень на сложности, отличной от легкой.
И все же я не мог полностью обойтись без магии; Мне очень хотелось, чтобы в моей игре была морозная башня.
Рыжая лиса.
Стреляет из лука стрелой, которая пролетает через все фрукты на своем пути.
Эту башню нужно размещать с умом, чтобы она поразила максимальное количество фруктов за один выстрел.
На некоторых уровнях под этой башней есть ключевые места, и задача игрока — разглядеть их.
Еж.
Стреляет иголками во все стороны.
Имеет небольшую дальность атаки и урон, но из-за большого количества иголок очень помогает на участках, где образуются большие гроздья фруктов или где они кружатся по кругу.
Медведь.
Бросает камни, которые при ударе отталкиваются и меняют траекторию полета плода.
На некоторых уровнях его можно разместить внизу таким образом, чтобы он подбрасывал уцелевшие плоды вверх, давая возможность остальным башням их добить.
Это может доставить массу неприятностей, если разместить его в начале уровня.
Коробка2D
Должен признать, движок Box2D значительно облегчил мне жизнь.Благодаря ему у меня появилось в игре красивое падение фруктов, обнаружение их вышками, а также другие проверки коллизий.
Без Box2D не было бы медведя.
У меня есть несколько идей для новых башен с использованием физического движка, например лиса со стрелами, которые привязаны к ветке веревкой, если такая стрела попадет в фрукт, то она будет болтаться на веревке, пока ее не сломают другие башни.
.
Можно придумать еще много интересного.
Далее я опишу, в каких объектах я использовал Box2D и какие свойства нужно было задать:
Имя | Свойства Box2D | Изображение |
---|---|---|
Фрукты | b2КругФорма b2_dynamicBody индекс группы = -1 | |
Ветвь | b2_staticBody b2МногоугольникФорма | |
Башня | b2_staticBody b2КругФорма isSensor = правда | |
Стрелка | b2_dynamicBody b2МногоугольникФорма isSensor = правда | |
Камень | b2_dynamicBody b2КругФорма | |
Стены, пол, потолок | b2_staticBody b2МногоугольникФорма | |
Это касается башен, ветвей и бордюров.
b2_dynamicBody определяет подвижный объект, который может перемещаться и отскакивать от других объектов.
Все фрукты и пули — b2_dynamicBody. isSensor = правда говорит, что предмета как будто не существует; при столкновении с ним другие предметы не отскакивают, а проходят сквозь него.
При возникновении такого события библиотека сообщает об этом, что как раз и нужно для ситуации, когда фрукт попадает в зону действия башни или стрела проходит сквозь яблоко.
Все фрукты имеют одинаковое негативное значение групповой индекс , благодаря этому они никогда не сталкиваются друг с другом, а успешно отскакивают от ветвей и границ.
b2КругФорма объект имеет круглую форму, b2МногоугольникФорма — форма многоугольника, в моем случае все такие объекты — прямоугольники.
Должен признать, что внедрение Box2D в игру Tower Defense было непростой задачей, я столкнулся со многими проблемами, например, есть ли у кого-нибудь из вас идеи, как реализовать замораживающую башню с помощью Box2D? (на самом деле ответ на этот вопрос требует решения задачи по физике 9 класса и заслуживает отдельного поста).
Подбор подходящих физических параметров для всех объектов занял немалое время.
Но в итоге все получилось, и я могу с уверенностью сказать: «Tower Defense + Box2D = Да!»
Результат
Я позвонил в свою игру Защита Лесной Башни и разместил на андроид маркете .Желающие могут скачать его бесплатно.
Там же вы можете увидеть скриншоты и видео по игре.
Графика получилась мультяшной, поэтому детям игра тоже может понравиться.
Советую всем любителям игр Tower Defense попробовать, ведь это единственная игра такого жанра с подобной механикой.
Мне очень интересно услышать ваше мнение, советы по улучшению и идеи для новых функций.
УПД: Разработка игры велась по описанному принципу В этой статье , следовательно, существует версия для Windows используя Qt. Теги: #tower Defense #физика #box2d #Android #Разработка игр
-
4 Правила Бизнеса Дэвида Яна
19 Oct, 24 -
Веселье…
19 Oct, 24