Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КОНСПЕКТ ЛЕКЦІЙ з КГвТП.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
9 Мб
Скачать
☆

Покадровое рух

Почнемо з одержання руху з постійною швидкістю. Укажемо у фільмі, що необхідно перейти із крапки A у крапку B через певну кількість кадрів, переміщаючись із кожним кадром на те саме відстань. Цей тип руху корисний, коли потрібно, щоб щось відбувалося за певний проміжок часу. У цьому русі відсутня та плавність, що ви спостерігали в методі зменшення швидкості, однак тут всі набагато простіше: нам відомо, що об'єкт досягне своєї мети після певної кількості кадрів. Даний рух виглядає більш солідно.

Відстань, на яке переміщається об'єкт, однаково у всіх кадрах. Пройдена відстань дорівнює всій відстані, діленому на число кадрів, у цьому випадку, 200 пикселей ділиться на 5 кадрів і виходить 40 пикселей на кожний кадр.

Постійна швидкість

Ви побачите, що в кожному кадрі переборюється те саме відстань. Для початку руху необхідно знати, наскільки повинен переміститися фільм, і протягом скількох кадрів це повинне відбутися. Обчислення відстані на кадр містить у собі лише розподіл відстані на загальне число кадрів.

  1. Проробіть ті ж кроки, що й у попередньому прикладі, щоб приготуватися до додавання ActionScript у панель Actions.

  2. Отже, перейдемо до програми. Нам потрібно привласнити дію нашому фільму, за допомогою якого в кожному кадрі буде виявлятися місце розташування покажчика миші, після чого фільм буде переміщатися в цю крапку. В Flash 5 це можна було б легко зробити за допомогою виділення фільму й присвоєння йому onClipEvent (enterFrame).

  3. Насамперед, ми введемо змінну для зберігання числа кадрів руху. Потім ми встановимо функцію onMouseDown для ball_mc. Ця функція буде обчислювати загальну відстань по осях x і y і потім ділити це число на значення змінної кадрів для з'ясування відстані, на яке буде переміщатися фільм у кожному кадрі.

  4. Ми також уведемо змінну-лічильник frameNum, що буде використовуватися для визначення того, на яку відстань перемістився фільм - ми будемо додавати до її значення одиницю в кожному кадрі фільму, і коли вона буде дорівнює значенню змінної кадрів, рух буде припинятися.

this.frames = 30;

ball_mc.onMouseDown = function() {

this.frameNum = 0;

// calculate how far to move each frame on the x and в axes

this.xStep = (this._parent._ xmouse-this._x) /this._parent.frames ;

this.yStep = (this._parent._ ymouse-this._y) /this._parent.frames;

this.onEnterFrame = moveToMouse;

};

  1. Далі нам потрібно буде написати функцію moveToMouse, що буде спочатку додавати значення xStep і yStep, додавати дублікат і потім перевіряти, чи досяг він своєї кінцевої крапки:

moveToMouse = function () {

// add the step value each frame

this._x += this.xStep;

this._y += this.yStep;

this.duplicate();

this.checkTime();

};

  1. Функції дубліката й зменшення ідентичні тим, які ми тільки що використовували.

  2. Останнім додаванням у наш код буде функція checkTime, що додає одиницю до значення змінної frameNum і потім припиняє рух по досягненні кінцевої крапки, тобто числа кадрів, зазначеного нами на початку:

ball_mc.checkTime = function() {

this.frameNum++;

if (this.frameNum == this._parent.frames) {

delete this.onEnterFrame;

}

};

  1. Збережете фільм у файлі frame based motion.fla і запустите його. При виконанні цього коду ви побачите, що дублікати створюються безупинно, і фільм безпосередньо досягає кінцевої крапки.

Якість руху в цьому прикладі сильно відрізняється від того, котре ми розглянемо нижче. Давайте ступнемо далі й розберемо прискорення й коливання в нескладних рухах.