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

Додавання сліду від руху об'єкта

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

Дублікат перебуває за замовчуванням на тій же позиції, що й вихідний фільм. Насправді, дублікат має всі ті ж параметри, що й вихідний фільм, такі як alpha, xscale, yscale і т.д., однак у нього немає функцій onEnterFrame або змінних, які може містити вихідний фільм. Це одне з відмінностей від Flash 5, у якому якщо створювався дублікат фільму із привласненою подією clipEvent, також створювався дублікат цієї події, що відбувалося й на дублікаті фільму. Ми розташовуємо кожний дублікат на один рівень вище попереднього, за допомогою додавання змінної глибини для '_root', значення якої збільшується з кожним кадром.

DuplicateMovieClip можна інтерпретувати, як виробник дублікатів, зовні ідентичних вихідним фільмам, у яких, однак, не повторюються ніякі з вихідних дій. У нашім випадку, дублікати не випливають за покажчиком миші, а просто залишаються там, де вони були створені.

  1. Використовуйте ті ж настроювання, як і в попередніх прикладах, і додайте наступний ActionScript у ваш фільм:

var speed = 4;

ball_mc.moveToMouse = function() {

this._x += (this.target-this._x)/this._parent.speed;

this._y += (this.target-this._y)/this._parent.speed;

this.duplicateMovieClip("dupe"+this._parent.depth,

this._parent.depth++);

};

ball_mc.onMouseDown = function() {

this.target = this._parent._xmouse;

this.target = this._parent._ymouse;

this.onEnterFrame = this.moveToMouse;

};

  1. Збережете фільм у файлі ball motion_04_click for trail.fla. Якщо тепер запустити фільм, ви відразу побачите, як працює ця з, і заметете, що це дуже схоже на те, що було зображено на діаграмі.

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

Зникнення сліду

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

Тому що ми збираємося працювати з кожним з дублікатів, має сенс привласнити об'єкту ball_mc його власну функцію duplicate(). Приведемо код з виділеними новими частинами, що вводяться:

var speed = 4;

ball_mc.moveToMouse = function() {

this._x += (this.target-this._x)/this._parent.speed;

this._y += (this.target-this._y)/this._parent.speed;

this.duplicate() ;

};

ball_mc.duplicate = function() {

var dupe = this.duplicateMovieClip("dupe"+this._parent.depth,

this._parent.depth++);

dupe.onEnterFrame = this._parent.diminish

};

ball_mc.onMouseDown = function() {

this.target = this._parent._xmouse;

this.target = this._parent._ymouse;

this.onEnterFrame = this.moveToMouse;

};

function diminish(){

// reduce scale gradually

this._xscale = this._yscale-=2;

//remove movieclip when scale goes below zero

if (this._xscale <= 0) {

this.removeMovieClip();

}

}

Отже, ми додали виклик функції duplicate() і значно змінили виклик duplicateMovieClip, вынеся вперед var dupe=. Незважаючи на те, що в словнику ActionScript зазначено, що duplicateMovieClip не повертає ніякого значення, насправді, вертається посилання на створений фільм.

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

Тепер ми можемо використовувати dupe для посилання на наш новий дублікат фільму й для присвоєння йому функції onEnterFrame, функції diminish, певної в _root. У функції diminish ми зменшуємо инкременты xscale і yscale з кожним кадром, і коли вони досягнуть нуля, фільм віддаляється.

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