Долгое время ищу одну 2,5d платформер игру на psp. Дело в самом начале происходит зимой в полуфантастическом мире. Есть несколько игральных персонажей на которых можно переключаться во время боя. У главного героя есть орудие, которое позволяет цепляться за уступы и тем самым преодолевать препятствия
Это мрачный приключенческий экшен в стиле панк-нуар, действие которого разворачивается в мире, зависящем от ценного природного ресурса, запасы которого близки к истощению. Нам предстоит играть за сурового дровосека, ищущего мести.
Сюжет игры довольно банальный, особо ничем не выделяющийся. Пока протагонист собирал грибы у него убили жену и похитили ребёнка. Наша задача — найти виновных и наказать их по пути к цели. Сделанные выборы будут менять ход истории, в основном это вариативность ответов в диалогах. Разветвления есть и они будут приводить к незначительным последствиям. Всего концовок в игре 2.
Графически игра выполнена в очень хорошей пиксельной графике, точно не режущей глаза, а больше о ней сказать в принципе и нечего.
Геймплей игры довольно простой, вам предстоит бегать и стрелять во врагов. Зонт выступает не только как огнестрел, но и как способ передвижения, позволяя совершать рывки, парировать снаряды и непосредственно парить в воздухе. Механика с зонтом сделана действительно классно, а вот остальное… Врагов слишком мало. Вы буквально стреляете в одного, двух противников на локации и так, пока не перейдете на следующую. Битвы с боссами выглядят, как просто напихай ему как можно быстрее, даже на высокой сложности.
В общем и целом, Gunbrella не привносит каких-то новых идей в жанр платформинга, но благодаря грамотной реализации классических механик играется и ощущается очень комфортно.
И снова здравствуйте. На сей раз прошу вспомнить один платформер на PC: старый двухмерный (вероятно, на движке Flash), главным героем является какой-то зеленокожий гуманоид в солнцезащитных очках с большой прямоугольной головой. Среди противников есть нежить и огромные белые черепа.
Для тех кто первый раз читает мой гоблинский блог - расскажу кратко что тут происходит. Я сам являюсь зеленым новичком в разработке игр и в своем блоге описываю этапы изучения столь сложного дела. На данный момент - это работа с движком Godot 4.
Чтобы не мучать вас длинными статьями, я разбиваю этот путь на кучу мелких блоков. Один пост - одна механика движка. Все гоблинские заумные слова расшифровываются на человеческий, так что даже пациент из Кащенко поймет о чем речь. Погнали!
● Создание сцены с персонажем:
В прошлой статье мы создали редактор карт с автоматическим заполнением, кто не читал - почитайте, будет полезно. Теперь нам нужно сделать персонажа, которым мы будем бегать по данной карте. Для этого нам нужен узел типа "CharacterBody2D", на основе которого мы и создаем новую сцену. Сделать это можно выбрав вкладку "Другой узел".
Как выглядит узел "CharacterBody2D"
● Визуальное изображение персонажа:
Узел это конечно хорошо, но мы пока ни черта не видим - нам нужен визуальный образ. Добавляем дочерний узел "Sprite2D". В его настройках находим вкладку текстуры и добавляем иконку Godot. В будущем мы заменим спрайт на анимацию, но пока нам хватит такой затычки.
Узел "Sprite" -> Texture -> Быстро загрузить
● Настройка зоны столкновения:
Чтобы наш персонаж не проваливался в текстуры и реагировал на поверхности мы должны настроить зоны столкновения. В прошлом уроке мы работали со слоем Collision в нашем TileMap. Тут же мы добавляем узел "CollisionShape2D", который представляет из себя выделение зоны столкновения в виде простой геометрической фигуры. Вид этой фигуры мы выбираем во вкладке "Shape".
Узел "CollisionShape2D" -> Shape -> Новый RectangleShape2D
● Начальные данные для физики и управления:
Создаем скрипт для нашей сцены и первым делом зададим константы. Константа - это постоянное значение, которое не будет меняться в ходе работы программы.
Чтобы создать константу мы пишем: const название_константы = значение
Переменные же создаются по другому: var название_переменной = значение
Давайте разберемся за что отвечают указанные нами значения:
speed и acceleration - от этих значений будет зависеть скорость передвижения по оси X (влево-вправо)
jump_velocity - это значение влияющее на высоту прыжка. Ось Y в Godot перевернута с ног на голову и отрицательное значение означает вверх.
friction - значение влияющее на скорость остановки при прекращении передвижения.
Так выглядят наши константы в коде
Так же мы добавляем значение гравитации, однако оно выставляется из внутренних настроек проекта.
var gravity = ProjectSettings.get_setting("physics/2d/default_gravity")
● Общая функция для управления персонажем:
Задав исходные данные мы можем приступать к настройкам функций нашего персонажа. Для этого мы пишем стандартную функцию Godot:
func _physics_process(delta):
Для тех кто не знает - эта функция вызывается перед каждым физическим кадром, который привязан к физическому fps, он по умолчанию равен 60 раз в секунду.
var input_axis = Input.get_axis("ui_left","ui_right")
Get_axis - это функция которая присваивает переменной одно из двух значений при нажатии одной из двух кнопок. Первое значение равно -1 и задается при нажатии клавиши "влево". Второе же равно 1 и задается при нажатии клавиши "вправо". Если на момент кадра не нажата ни одна из этих кнопок, значение равно 0. Это позволяет нам определить нужное направление для изменения координат персонажа.
Влево = -1 | Вправо = 1 | Стоим на месте = 0
● Движение по оси X (влево-вправо), создаем новую функцию:
handle_acceleration (input_axis, delta)
В нее мы добавляем условие, что должна быть нажата одна из клавиш - влево или вправо.
if input_axis !=0:
Если данное условие выполнено, то мы совершаем перемещение в заданном направлении. Для этого используется функция move_toward.
velocity.x - это переменная отвечающая за перемещение по оси X.
В move_toward мы задаем три параметра через запятую. Изначальная точка, точка в которую мы должны прийти, шаг в сторону нужной точки за один кадр.
Каждый кадр мы двигаемся в выбранную сторону, начальная точка меняется и это создает замкнутый круг движения. А чтобы его запустить, мы добавляем нашу функцию под physics_process и в конце пишем move_and_slide().
move_toward ( начальная точка, точка прибытия, расстояние шага за один кадр )
▸ А где тормоза то !?
● Как сделать остановку?
Мы начали двигаться и если не нажмем кнопку в противоположную сторону - улетим за край карты. Чтобы разорвать наш круг постоянного движения мы должны сделать функцию тормоза.
Копируем нашу прошлую функцию и переименовываем ее:
handle_friction (input_axis, delta):
Так же меняем заданное условие, input_axis должен быть равен нулю. Главное помнить, что знак равенства при сравнении выглядит вот так "==".
if input_axis == 0:
В функции move_toward заменяем значения. Первое остается прежним, на втором ставим ноль, а на третьем стираем acceleration и пишем friction. Все это в сумме обеспечит нам быструю остановку.
Функции обратные друг другу
● Движение по оси Y (прыжок, гравитация), создаем новую функцию:
aplay_gravity(delta):
Если мы не на земле, то бишь в воздухе - нас должно тянуть вниз.
if not is_on_floor():
velocity.y += gravity * delta
Ставим именно "+=", так как это сделает плавное падение с нарастающим ускорением. Не забудьте умножить на delta, иначе все произойдет за долю секонды.
● Следующая функция для прыжка:
handle_jump(delta):
Для нас важны два условия - нахождение на земле в момент прыжка и нажатие нужной клавиши.
if is_on_floor() and Input.is_action_just_pressed("ui_accept"):
Если данное условие соблюдено мы приравниваем параметр оси Y к значению высоты прыжка.
velocity.y = jump_velocity
Добавляем эти функции под physics_process, а после переходим на сцену "world". Туда из общего списка ресурсов перетаскиваем сцену "player".
.tscn - это формат сцены в Godot
Как выглядит наш блок с функциями
● Что у нас получилось в итоге?
✓ Если вы нажимаем клавишу влево или вправо - персонаж двигается в выбранном направлении.
✓ Если ни одна из клавиш направления не нажата - мы останавливаемся.
✓ Если мы находимся в воздухе - нас тянет вниз с каждой секундой все сильнее.
✓ Если находясь на земле, мы жмем прыжок - нас подкинет вверх.
▸ Оно живое!
Вот так при помощи четырех простых функций мы создали основу физики и управление персонажем. Надеюсь разобрал каждый шаг максимально подробно и понятно.
✓ Зеленые новички - крепитесь и подписывайтесь, скоро новая статья. На очереди две темы - "анимация персонажа" или "двойные прыжки и прыжки от стены".
✓ Опытные шаманы - запасайтесь успокоительным, ибо дальше будет еще куча попыток освоить gamedev.
✓ Ну и все кто имеет свое мнение, поддержку или усмешку - пишите комменты!
Приключенческая игра в жанре 3д платформер, которая отправит нас в отважное приключение двух маленьких Героев Энни и Ани. Их крепкая дружба смелость и отвага способна покорить любые преграды, чтобы достичь успеха. Захватывающая история наполненная множеством ярких красок и событий позволит насладиться динамичным игровым процессом и погрузится в трогательный Мир двух маленьких друзей.
ищу игру на андроид, помню как то играл, платформер пиксельный(или воксельный) на выбор дают рыцаря лучника и мага, и ты персонажем прыгаешь в перед, три дороги, прыжки совершаются по диагонале, по квадратам, на каких то бандюги стоят, на каких то ловушки, что это за игра я устал искать?
Давно собиралась сюда выложить и показать-рассказать про эту маленькую игру, которую сделала сама на простом конструкторе игр Stencyl.
Играем за солнечного зайчика, собираем радугу по частичкам, и она материализуется на фоне.
По жанру это платформер - прыгаем по облачкам, иногда можно провалиться или навернуться на молнию.
Всего в игре 7 уровней - столько же, сколько цветов радуги.
Наверное, некоторым она покажется черезчур приторной или девчачьей, ну уж извините, захотелось сделать что-нибудь эдакое.
Изначально я ее делала на джем на сайте Gamin. Конечно, ничего она не выиграла, но опыт интересный.
Скриншот одной из самых первых версий (ужас, да и только), и это на RPG Maker
RPG Maker совсем не предназначен под платформеры, так что решила переносить на другой движок, а тут как раз джем подвернулся на Stencyl .Сделала где-то за месяц основную часть игры - Stencyl довольно простой конструктор в освоении и поддерживает HTML5, и при этом он с бесплатной лицензией (нужна только регистрация на их сайте). Вот, например, "код" портала, который переносит зайку на следующий уровень:
В общем, движок весьма своеобразный, не думаю, что буду его использовать ещё когда-нибудь. Но потом я ещё периодически возвращалась к игре и дорабатывала некоторые явные косяки. Да, она и сейчас не идеальна, но должна быть уже вполне играбельна и проходима.
Благодарности
Отдельная благодарность Naarassusi Game и Жене Власовой за помощь с графикой (всё окружение рисовала сама, но вот с зайкой и его анимацией они мне помогли).
Первая версия зайки полупрозрачная и немного кривая - моя, второй заяц - это Валера рисовал, третьего я собирала из запчастей второго зайца, то есть смешанная версия, ну и моську его маленько перерисовала. В итоге получилось мило, я надеюсь!