Juanlu_001 31 березня 2008 р. З 91 951 відвідуванням
Як вказує його заголовок, він написаний з метою дати систематичний спосіб зробити такі об'єкти, як маятники або подібні, коливатися в реалістичній формі, а також даючи безліч можливостей, таких як зупинка чи ні з плином часу чи часу мати можливість об’їхати точку обертання кілька разів, не втрачаючи ефекту реалізму. Звичайно, це повністю налаштовується для досягнення різних швидкостей.
Щоб зрозуміти цей посібник, необов’язково мати поглиблені знання ActionScript, а лише основні поняття.
Підготовка маятника
Для початку створіть новий документ із великими розмірами (особливо у верхній частині), із вибраним кольором фону та із частотою кадрів у секунду 40 кадрів в секунду, яку я і використовую. У новому шарі намалюйте щось на зразок маятника, який «звисає» з лінії (чим довше ви це зробите, тим краще буде оцінений ефект) у загальному положенні спокою (не дайте йому початкового нахилу під час малювання), перетворіть його у MovieClip і дайте йому ім'я екземпляра ("удар" у моєму випадку). Пункт реєстрації повинен бути на «мотузці», з якої висить маятник, там, де ви хочете, щоб він розгойдувався. Ось яким був мій "маятник":
Далі ми можемо зробити обертання (наприклад, -30º) і продовжувати писати код.
Визначення суттєвих змінних
Для початку ми визначимо ряд змінних, які будуть необхідні для подальшого досягнення коливального руху. Ми пишемо такі рядки коду у MovieClip:
Той факт, що вага є позитивним для цього обертання, а не навпаки, зумовлений лише тим, як я сформулював рівняння.
Ці перші рядки коду слугуватимуть для визначення двох основних змінних для руху. Поясню їх на наступному кроці, написавши формулу, яка його створить.
Коливальний рух без уповільнення
Тепер ми пишемо ці рядки також у MovieClip:
Зараз я трохи поясню це: те, що ця поведінка робить, це те, що в кожному кадрі додаємо до швидкості вагу, яку ми їй надавали, з якою вона буде збільшуватися щоразу (це досягає ефекту прискорення). Якщо припустити, що початковий оберт є від'ємним (тобто, що він нахилений вправо), і що, отже, початковий вага більший за нуль, при досягненні обертання трохи більшим за нуль, перший умовний буде активовано, і вага буде зміна знака (this._rotation = 0,1; для того, щоб він не "застряг"), і тому він буде сповільнюватися, поки швидкість не досягне 0. У цей момент маятник буде обертатися все швидше і швидше в напрямку навпаки, поки воно не досягне - з від'ємною вагою, пам'ятайте - обертання дещо менше 0, яке буде, коли буде активовано другий умовний, і вага повернеться, щоб мати позитивний знак.
Аж тут і за допомогою цих кількох рядків вже досягнуто ефекту розгойдування; єдиним недоліком є те, що він ніколи не зупиняється. Давайте виправимо це:
Коливальний рух із уповільненням
Тепер ми повинні додати нову змінну: опір, яка братиме участь лише тоді, коли маятник "підніметься", щоб уповільнити його.
Давайте додамо ці рядки в частину onClipEvent (load) < >:
Це не потребує пояснень. Тепер у onClipEvent (enterFrame) ми підставляємо швидкість + = вага; наступним чином:
Це так, щоб ви не гальмували в одну сторону і не прискорювали в іншу. Ми також могли б змінити знак опору, як це зробили з вагою, але це було б дещо складніше.
Тепер нам доведеться визначити поведінку, яка відрізнятиметься, коли маятник піднімається, а коли ні. Для цього ми додаємо підняття = true; у кожному з двох умовних умов, які ми мали раніше, і справа в цьому така:
Нові лінії не потребують особливих пояснень: коли маятник піднімається, опір вже не дорівнює нулю, і в той момент, коли швидкість змінюється з позитивної на негативну або навпаки (що є сигналом про те, що він досягає точки максимум і, отже, він буде падати), підйом - помилковий, а опір - нуль.
У цього є проблема, яка полягає в тому, що настає момент, коли маятник продовжує вібрувати, не зупиняючись, і результат може бути божевільним у деяких випадках (збільште масштаб, якщо ви цього не бачите). Тому ми введемо ще одну змінну: я назвав це коефіцієнтом стабілізації, або CE.
Підводячи підсумок, ми скажемо, що код нарешті такий:
Це не потребує особливих пояснень: кожен раз, коли обертання змінюється з позитивного на негативний або навпаки, CE множиться на 1,1; таким чином, коли воно досягає 10, поведінка, яка спричиняє коливання, зупиняється і маятник зупиняється.
На цьому ми могли б закінчити наш підручник, але ми ще можемо зробити щось цікаве.
Додаток: Ще кілька кіл
Уявімо, що у вашій плівці є якась система керування маятником. Якщо б у нас було достатньо швидкості, щоб розвернутися, з написаних нами рядків цього недостатньо: ми повинні додати ще пару умовних умов. Їм нема про що писати додому, вони мають синтаксис, аналогічний двом іншим:
Факт встановлення CE на 0 необхідний, щоб він не досяг значення, яке ми вказуємо, щоб маятник передчасно зупинився.
Завершивши код, який ми вже мали з цими двома останніми умовними умовами, наш маятник тепер може робити всі необхідні повороти без небезпеки помилок.
Ви знаєте SQL? їNo-SQL? Вивчайте MySQL, PostgreSQL, MongoDB, Redis та багато іншого з ним Професійний курс з баз даних що починається у вівторок, пряма трансляція.