Может кому пригодится.
Движение персонажа по 8 сторонам через стик сделано.
В шаг персонажа
x+= stick_get_x(movement_stick);
y+= stick_get_y(movement_stick);
//для того чтобы определить direction
if xprevious != x or yprevious != y
direction = point_direction(xprevious, yprevious, x, y);
dvigenie()
Реакция на столкновения с твёрдыми блоками прописана через скрипт dvigenie :
function dvigenie(){
if place_meeting(x-1,y, ob_blok) {
if direction=180
{
x+= stick_get_x(movement_stick);
y+= stick_get_y(movement_stick);
}
else
if direction>90 and direction <180
{
x+=-stick_get_x(movement_stick);
y+= stick_get_y(movement_stick)/4;
}
else
if direction>180 and direction <260
{
x+=-stick_get_x(movement_stick);
y+= stick_get_y(movement_stick)/4;
}
}
if place_meeting(x+1,y, ob_blok) {
if direction=0
{
x+= stick_get_x(movement_stick);
y+= stick_get_y(movement_stick);
}
else
if direction>0 and direction <90
{
x+=-stick_get_x(movement_stick);
y+= stick_get_y(movement_stick)/4;
}
else
if direction>270 and direction <359
{
x+=-stick_get_x(movement_stick);
y+= stick_get_y(movement_stick)/4;
}
}
if place_meeting(x,y-10, ob_blok) {
if direction=90
{
x+= stick_get_x(movement_stick);
y+= stick_get_y(movement_stick);
}
else
if direction>0 and direction <90
{
x+= stick_get_x(movement_stick)/4;
y+=-stick_get_y(movement_stick);
}
else
if direction>90 and direction <180
{
x+= stick_get_x(movement_stick)/4;
y+=-stick_get_y(movement_stick);
}
}
if place_meeting(x,y+5, ob_blok) {
if direction=260
{
x+= stick_get_x(movement_stick);
y+= stick_get_y(movement_stick);
}
else
if direction>180 and direction <260
{
x+= stick_get_x(movement_stick)/4;
y+=-stick_get_y(movement_stick);
}
else
if direction>260 and direction <359
{
x+= stick_get_x(movement_stick)/4;
y+=-stick_get_y(movement_stick);
}
}
}
имеется 8 спрайтов движения, подписаны следующим образом:
sp_pers1_stop
sp_pers1_up
sp_pers1_down
ну и тд.
В изображение персонажа
if x=xprevious and y=yprevious
sprite_index = asset_get_index("sp_pers"+string(floor(global.pers))+"_stop");
else
if direction >-22 and direction <23
sprite_index = asset_get_index("sp_pers"+string(floor(global.pers))+"_right");
else
if direction>22 and direction <69
sprite_index = asset_get_index("sp_pers"+string(floor(global.pers))+"_upright") ;
else
if direction>68 and direction <114
sprite_index = asset_get_index("sp_pers"+string(floor(global.pers))+"_up") ;
else
if direction>113 and direction <159
sprite_index = asset_get_index("sp_pers"+string(floor(global.pers))+"_upleft") ;
else
if direction>158 and direction <204
sprite_index = asset_get_index("sp_pers"+string(floor(global.pers))+"_left") ;
else
if direction>203 and direction <249
sprite_index = asset_get_index("sp_pers"+string(floor(global.pers))+"_downleft") ;
else
if direction>248 and direction <294
sprite_index = asset_get_index("sp_pers"+string(floor(global.pers))+"_down") ;
else
if direction>293 and direction <339
sprite_index = asset_get_index("sp_pers"+string(floor(global.pers))+"_downright") ;