
Система плавного\смазанного движения или Motion-Blur
Heksenmaister
опубликовал в
Game Maker
Данный урок я добавил по просьбе одного из разработчиков на «GameSetup»
Этот метод подходит для того, чтобы смазать\сгладить движение объекта(спрайта) по игровому полю. Под движением подразумевается именно движение по сторонам. Если спрайт будет вращаться, motion-blur'а не получится.
Итак, в событие Draw объекта, который мы хотим, чтобы смазывался, пишем:
Dist = point_distance(x,y,xprevious,yprevious);
Dir = point_direction(x,y,xprevious,yprevious);
X_Position = x;
Y_Position = y;
if (Dist > 0)
{
Res = 1; //Качество(от 1 до +100500, я рекомендую 1, как самое качественное)
Dist /= Res;
Num = 0;
if (Dist > Num)
{
Num = Dist;
Dist_x = 0;
Dist_y = 0;
};
if (Dist > 0)
{
Dist_x = lengthdir_x(Dist / Num * Res,Dir);
Dist_y = lengthdir_y(Dist / Num * Res,Dir);
};
for (i = Num;i > 0;i -= 1)
{
draw_sprite_ext(sprite_index,image_index,X_Position + i * Dist_x,Y_Position + i * Dist_y,image_xscale,image_yscale,0,image_blend,image_alpha / ( Num / 2))
};
}
else
{
draw_sprite_ext(sprite_index,image_index,X_Position,Y_Position,image_xscale,image_yscale,image_angle,image_blend,image_alpha)
};
Это всё. На мой взгляд — это самый простой, хоть и не идеальный способ реализации блюра. Лучше можно только с библиотеками.
17 комментариев
Определяем положение объекта, записываем это в переменные. Определяем новое положение, вычисляем между ними разницу. Заполняем эту разницу спрайтами. Чем быстрее двигаемся, тем больше спрайтов.
В простых алгоритмах комментарии излишни
Вот тут и так понятно, что код делает
А вот тут чёрт быстрее ногу сломит, чем поймёт, что тут происходит
Ты же программист. Пробегись глазами по коду и все поймешь.
Зачем так, что помешало объединить эти условия?
т.е. кубики которые красиво нарисованы на логотипе не возможно получить таким методом? тогда почему там кубики, а не пример работы именно этого скрипта.