CRYSTALL m
маестро
Група: Спільнота GM
Повідомлень: 812
Я подивився гри, зроблені на GM і побачив, що є багато косяків з застряваніем в стінах, і тому хочу розповісти як робиться нормальний рух.
Тож почнемо.
Для хорошої гри спочатку потрібно подумати як це зробити.
Та до ось я придумав код, який пише за 10 хвилин, але він гарантує, що косяків не буде.
Створюємо об'єкт player і об'єкт wall.
Нехай у об'єктів player і wall буде спрайт 32 * 32 і центер в точці (16; 16)
Пишемо для player
У Create пишемо:
air = 0;
global.grav = 0;
hsp = 5;
jump = 2;
У Step пишемо:
wi = collision_rectangle (x-15, y + 17, x + 15, y + 17 + vspeed, wall, 0,0)
if wi> 0 and vspeed> 0 and air = 1 then
air = 0;
vspeed = 0;
gravity = 0;
y = wi.y-32;
jump = 2
>
. Це перевірка зіткнення зі стіною знизу
if wi<0 and air=0 then
air = 1;
gravity = global.grav
jump- = 1
>
. Перевірка відсутності стіни знизу
if wi> 0 and vspeed<0 then
vspeed = 0;
y = wi.y + 32;
>
. зіткнення зі стелею
Ось так пишеться обробка стрибка
Тепер сам стрибок:
Для події KeyPress (будь-якої клавіші) пишемо:
if jump> 0 then
vspeed- = 5;
gravity = global.grav
jump- = 1;
>
Тепер пересування вправо (вліво):
Для події KeyRight:
wi = collision_rectangle (x + 17, y-15, x + 17 + hsp, y + 15, wall, 0,0)
if wi<0 then
x + = hsp
>
else
x = wi.x-32;
>
Для події KeyLeft:
wi = collision_rectangle (x-17, y-15, x-17-hsp, y + 15, wall, 0,0)
if wi<0 then
x- = hsp
>
else
x = wi.x + 32;
>
Усе.
Цей легкий код - опрацювання зіткнень, принаймні у мене він не глючил.
Якщо я все правильно згадав, то це той код, яким користуюся я.
Висіння на стінах і т.д. легко додається
Rap_Person
майстер
Група: Спільнота GM
Повідомлень: 121