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

Керування рухом

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

Було б набагато краще брати будь-який певний фільм і створювати myMovieClip.slideTo(100,200), щоб фільм міг переміщатися до цієї крапки й зупинятися, без потреби привласнювати фільму вручну керуючий елемент clipEvent або функцію для перевірки досягнення кінцевої крапки, і т.д.

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

Ковзання

  1. Відкрийте новий фільм і розмістите на робочому місці инстанс ball_mc.

  2. Перше, що ми зробимо на окремому шарі сценаріїв, це додамо виклик функції slideTo, що буде виконуватися щораз при клацанні мишею користувачем.

  3. Ми будемо передавати функції slideTo три параметри: позицію по осі x, позицію по осі y і ще одне значення, що буде вказувати швидкість ковзання:

_root.onMouseDown = function() {

ball_mc.slideTo(this._xmouse, this._ymouse, 4);

};

  1. Тепер нам потрібно створити безпосередньо функцію slideTo, що повинна буде виконувати дві окремих дії:

    • установлювати у фільмі значення target і target;

    • набудовувати керуючий елемент enterFrame фільму для забезпечення його ковзання в напрямку до кінцевої крапки.

Замість того щоб визначати цю функцію для окремого фільму, як ми робили в попередніх функціях ball_mc.checkDistance, ми помістимо її в MovieClip.prototype. Всі функції усередині MovieClip.prototype доступні рівною мірою всім фільмам. Всі убудовані методи фільмів, такі як goToAndPlay, також присутні в movieclip.prototype. При виклику функції вона поводиться так, ніби вона була усередині фільму.

MovieClip.prototype.slideTo = function(x, y, speed) {

// set up targets and speed variable

this.target = x;

this.target = y;

this.speed = speed;

// create onEnterFrame function

this.onEnterFrame = function() {

// take care of motion

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

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

// check if near target

if (Math.abs(this.target-this._x)<0.2 && Math.abs(this.target-this._y)< 0.2) {

this._x = this.target;

this._y = this.target;

delete this.onEnterFrame;

}

};

};

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

  • Збережете ваш файл під ім'ям issueCommand1.fla і запустите його. При клацанні мишею фільм буде сковзати до місця клацання.

  • Ми також можемо спробувати застосувати той же самий підхід у двох фільмах - створити копію вихідного фільму ball_mc і дати новому инстансу ім'я ball_mc2 за допомогою Property Inspector.

  • Перетягнете инстанс ball_mc2 на робоче місце й потім відкрийте панель Actions для зміни коду onMouseDown, відповідно до тексту коду, наведеному нижче:

_root.onMouseDown = function() {

ball_mc.slideTo(this._xmouse, this._ymouse, 4);

ball_mc2.slideTo(this._xmouse+19, this._ymouse, 1);

};

  • Збережете фільм у файлі issueCommand1b.fla і запустите його. Ви заметете, що другий фільм переміщається значно правее покажчика миші й зі значно меншою швидкістю.

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

Інша проблема полягає в тому, що ми поміщаємо у фільм змінні, такі як target, target і speed, які можуть уже використовуватися у фільмі з іншими цілями. Вони будуть просто записуватися поверх старих, що відповідним чином вплине на функціональність фільму. Незважаючи на те, що ми звичайно пам'ятаємо імена, що привласнюються об'єктам у нашім ActionScript, корисно використовувати інформативні й не позбавлені змісту назви.