Название: Простой способ смены спрайтов
Отправлено: viti4 от Январь 03, 2024, 22:43:28
Может кому пригодится. Движение персонажа по 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") ;
Название: Re: Простой способ смены спрайтов
Отправлено: Dmi7ry от Январь 04, 2024, 14:48:01
Так не пишут, это плохой код. Если направление разделить без остатка (div) на шаг угла, то получится число от 0 до 7 (если 8 направлений)(ещё понадобится к направлению прибавить половину шага угла, чтобы корректно обрабатывалось направление вправо, где переход через 0 градусов, например, 350 градусов). И дальше это число можно использовать либо в названии спрайта, либо как индекс массива, в котором хранятся спрайты. В итоге вся эта простыня превратится всего в несколько строк кода.
Название: Re: Простой способ смены спрайтов
Отправлено: viti4 от Январь 05, 2024, 15:23:22
Так не пишут, это плохой код. Если направление разделить без остатка (div) на шаг угла, то получится число от 0 до 7 (если 8 направлений)(ещё понадобится к направлению прибавить половину шага угла, чтобы корректно обрабатывалось направление вправо, где переход через 0 градусов, например, 350 градусов). И дальше это число можно использовать либо в названии спрайта, либо как индекс массива, в котором хранятся спрайты. В итоге вся эта простыня превратится всего в несколько строк кода.
Буду иметь ввиду, я только учусь и критика и советы только приветствуются!
Название: Re: Простой способ смены спрайтов
Отправлено: Fur от Январь 08, 2024, 20:04:30
Аж олдскулы свело.
|