Galaxy2D Tutorials Галактика 2D
Бег и ходьба в аркадах

Слои карты

Для игр, не использующих прокрутку, создать карту не так уж и сложно. Для этого можно использовать фоновые клетки (с возможностью сохранять объекты вроде бонусов и ключей) и, по возможности, передний слой, который закрывает игрока, когда он идёт позади него. Это нужно для придания эффекта глубины.

 

Так что можно начать с использования трёхслойной карты. Я бы предложил использовать трёхмерный массив, потому что к массивам, в отличие от списков и подобных структур, можно обращаться напрямую. К тому же работать с ними гораздо проще, и Вы  будете избавлены от лишнего труда. И еще понадобится дополнительный байт на каждую клетку (или четвёртый слой), где будет храниться дополнительная информация.

 

Спрайты в воздухе

Вам нужно регулярно проверять, является ли клетка под спрайтом землёй или нет. В последнем случае ваш спрайт должен начать падать до тех пор, пока под ним не встретиться «твёрдая» клетка. Вот псевдокод:

 

если (твердая_клетка)

{

  если (падает)

  {

    падает = ЛОЖЬ;

            // Вы можете добавить здесь повреждения спрайту,

    // в зависимости от скорости падения (скорость.y)

  }

}

иначе

{

  падает = ИСТИНА;

  скорость.y += гравитация;

}

позиция.x += скорость.x;

позиция.y += скорость.y;

 

Если Вы хотите больше узнать об использовании гравитации, читайте FAQ по гравитации. Теперь разобраться с прыжками и падениями не составит для вас труда, но что же делать с наклонными поверхностями? Об этом пишет Jim Boulton в своей статье ". Where's the Ground " (к сожалению, эта статья не сохранилась).

 

От ходьбы к бегу

Во многих современных аркадах герои переходят на бег через некоторое время после ходьбы в одном направлении. Этот эффект достаточно просто реализовать. Всё, что Вам понадобиться – это одна дополнительная переменная, которая содержит число кадров с того времени, как игрок стал двигаться в одну сторону. Каждый кадр Вы увеличиваете это значение и сравниваете с порогом. Если он достигнут, то переходим на бег.

 

если (направление != старое_направление)

{

  // Направление изменилось, прекращаем бег,

  // сбрасываем счётчики

  пройдено_кадров = 0;

  старое_направление = направление;

  бег = ЛОЖЬ;

}

иначе если (! бег)  // Не нужно увеличивать счетчик, если мы и так бежим

{

  // пока не изменилось направление

  пройдено_кадров++;

  если (пройдено_кадров = порог)

  {

    // переходим на бег

    бег = ИСТИНА;

  }

}

 

Вы можете пойти дальше, если будете учитывать различные скорости бега. Так спрайт мог бы сначала ходить, затем разгоняться (совершать толчок) и бежать.

Вот и всё на данный момент.

Верстка и поддержка Lennart Steinke

 

PMG  10 декабря 2004 (c)  Сергей Иванов