Top Ad unit 728 fff 90

Flash Game Book (6 урок)

Трение

Почему объекты замедляются? Потому-что они теряют энергию.

Есть два способа работы с трением: правильный способ и достаточный способ.

 

Реальное трение.

Если вы тащите коробку по полу справа налево, то сила трения действует влево,

противоположно направлению векторной скорости.

Векторная скорость коробки будет стремиться к нулю с постоянным замедлением.

Уравнение для трения скольжения выглядит так:

F=u*mass*gravity

mass*gravity - вес объекта.

Чем больше вес объекта, тем больше трение, которое будет противодействовать движению скольжения объекта.

u - коэффициент трения (коэффициент трения скольжения).

Коэффициент трения является числовым значением между 0 и 1.

В реальной жизни этот множитель определяется экспериментально и отличается для каждой взаимодействующей поверхности объекта.

Например, влажный ледяной куб на резиновом полу может иметь очень низкий коэффициент трения (.01),

в то время как теннисные туфли на том же полу могут иметь более высокий коэффициент трения (.2).

Вы можете просто выбрать значение для u в зависимости от вида поверхности, с которой имеете дело.

Используя второй закон Ньютона, мы можем определить замедление в результате трения:

F=mass*accel=u*mass*gravity.

Сокращая mass в обеих частях уравнения, мы получаем:

accel=u*gravity.

Для выполнения реализации трения нужно:

1. Найти ускорение в результате трения, используя уравнение

accel=u*gravity

2. Применить значение accel к векторной скорости в каждом кадре (так-же как с ускорением), пока векторная скорость не достигнет нуля.

Прекратите применение переменной, когда скорость достигнет нуля. Если вы этого не сделаете, объект станет двигаться в противоположном направлении.

Помните, что отрицательное ускорение является замедлением.

рассмотрим это в действии.

Откроем новый проект.

Создадим новый слой.

На слое нарисуем объект (в моем примере это прямоугольник).

Преобразуем объект в клип (F8) с именем cube.

Выберем наш созданный слой (в моем примере это myCube).

И впишем в него (в Actions-Frame):

 

xmov=10;

gravity=2;

u=.15;

accel=u*gravity;

_root.onEnterFrame=function(){

if (Math.abs(xmov)>=Math.abs(accel)){

if (xmov>0){

xmov-=accel;

} else if (xmov<0){

xmov+=accel;

}

} else {

xmov=0;

}

cube._x+=xmov;

}

 

В строке 1 мы сообщаем объекту начальную векторную скорость так,

чтобы он имел некоторый ее запас для движения до остановки.

Затем мы определяем переменную гравитации и постоянную трения u.

В строке 4 мы используем гравитацию и постоянную трения для нахождения значения ускорения, возникающего в процессе трения.

Выражение if в событии onEnterFrame нужно для того, чтобы удостовериться,

что мы прибавляем или вычитаем ускорение правильно (в зависимости от направления движения).

Выражение if также контролирует, что произойдет с объектом, если векторная скорость меньше, чем ускорение,

если такое происходит, то в следующем кадре объект должен остановиться.

 

Достаточный подход к описанию трения.

Более быстрый и простой способ обработки трения и достижения визуально очень похожего результата.

1. Выберите число между 0 и 1. Давайте назовем это число ослаблением.

2. Умножайте ослабление на векторную скорость в каждом кадре.

Если ослабление равно 1, то векторная скорость никогда не изменится.

Если ослабление равно 0, то векторная скорость равна 0 после кадра 1.

Если ослабление имеет значение между 0 и 1, то скорость будет стремиться к 0 в каждом кадре.

xmov=10;

decay=.95;

_root.onEnterFrame=function(){

xmov*=decay;

cube._x+=xmov;

}

Как видите, это гораздо более простой способ использования трения.

Скачать

All Rights Reserved by ProcessPlus 2014 - 2020

Написать нам

Имя

Email *

Сообщение *