Воскресенье, 22.12.2024, 17:23
Главная Регистрация RSS
Приветствую Вас, Гость
Поиск по сайту
Авторизация

Меню сайта
Game Maker
Если вы только-только начали изучать игрострой и еще даже не успели скачать сам Game Maker, предлагаем вам на выбор следующие версии программы:

Game Maker 8.1
Классика. Идеально подходит для создания простых 2D игр на PC. Требует активации.
Game Maker for Mac
Абсолютно та же программа, но только для пользователей Mac. Требует активации.
Game Maker Studio
Самая новая версия с возможностью кроссплатформенной разработки. Бесплатна.
Топ 5 игр
Агент Green 4.2 / 5.0
FeDo 4.2 / 5.0
To Mars: Sec... 4.2 / 5.0
To Mars+MapE... 3.9 / 5.0
Paintball 3.8 / 5.0

Топ игр составлен путем пользовательского голосования.

Если вы не согласны с какой-либо оценкой, примите участие и поставьте свой балл игре. Ваша оценка очень важна для нас ;)
Статистика



На сайте: 3
Гостей: 3
Пользователей: 0
Главная » Статьи » Разработка игр

Ходьба по неровной поверхности

Преждем чем читать статью, учтите, я ее не писал. Источник внизу.

Всем привет! Сегодня я Вам расскажу о том, как реализовать ходьбу по неровной поверхности в плаформере.

С
пособ данной реализации.
Для работы приведенного ниже способа, у вас ходьба в платформере должна быть осуществлена следующим образом: при движении спрайт игрока должен отражаться соответственно направлениям, т.е. если игрок движется влево, то image_xscale = -1;, иначе image_xscale = 1;.
Каким же образом мы будем перемещать игрока вдоль неровной поверхности? К нам на помощь приходят циклы. Циклом мы проверяем кажду свободную позицию впереди
игрока и чуть выше, и если эта эта позиция свободна, то перемещаем туда игрока.

Давайте теперь рассмотрим код.
(Данный код помещать в Step)

var Dir, D, xn, yn;
if image_xscale == -1
{Dir = 180; D = -10}
else
{Dir = 0; D = 10}

if place_meeting(x+D, y, o_solid)
{

for(i = 0; i < 135; i += 2)
{
xn = x + lengthdir_x(speed, Dir + i);
yn = y + lengthdir_y(speed, Dir + i);
if place_free(xn, yn) {x = xn; y = yn; exit;}
}
}

В начале мы объявляем временные переменные, хранящие направление игрока и позицию впереди игрока.

Dir - напрвление
D - отражение спрайта (сторона, в которую смотрит игрок)
xn, yn
- переменные, хранящие свободную позицию перед игроком.

Далее изменяем эти переменные. Если спрайт отражён влево, т.е. игрок смотрит влево, то изменяем Dir на 180 (180 - направление влево), D - присваиваем значение -10 (-10 - позиция левее). Аналогично с другим.

Далее ставим проверку на столкновение с объектом. x+D - из переменной D считывается текущее направление игрока.
(Лучше всего для всех твёрдых объектов создать один родительский, и проверять столкновение только с ним, потому, что проверять столкновения со всеми объектами - очень трудоёмкий процесс)
И если столкновение произошло, то запускаем цикл, проверяющий все свободные позиции относительно игрока, и если эта позиция найдена, то в переменные
xn, yn записываем найденную свободную позицию и ставим проверку на эту позицию, и если она свободна, то перемещаем туда игрока и выходим из цикла.

Все готово! До встречи!


Источник: http://gcup.ru
Категория: Разработка игр | Добавил: никита (16.03.2012)
Просмотров: 3240 | Комментарии: 1 | Рейтинг: 2.3/11
Всего комментариев: 1
1 qwerto   (18.03.2012 18:51) [Материал]
qwerto Способ не плохой, но он плохо оптимизирован, на слабых компьютерах fps может падать при движении.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]