Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Управление свойством _x (http://www.flasher.ru/forum/showthread.php?t=96783)

peresmeshnik 07.06.2007 02:53

Управление свойством _x
 
Проблема заключается в следующем: есть какой-то обьект с _х координатой. При нажатии на кнопке значение _х должно плюсоваться или минусоваться, в зависимости от выбранного направления (<< >>). Движение должно быть плавным, т.е. постепенный разгон с места и так же торможение.
Как я себе представлял решение этой задачи: есть какая-то переменная, пусть будет "а". При нажатии на кнопке значение этой переменной плюсуется (допустим становиться равным 100). Запускается цикл в виде:
Код:

while (a >= 0){
    _root["clip"]._x += 1;
    a = a - 1;
}

В итоге по этому циклу обьект пройдет без ускорения 100 пикселей, потом остановиться (впринципе я полагал, что ускорение можно будет прописать ифами в теле цикла, которые будут зависить от процента оставшегося значения "а"). Но в результате незнания я предположил, что частота прохождения цикла будет равна честоте кадров клипа, которые прописываются в параметрах заранее. Оказалось, что цикл проходится практически мгновенно и никакой анимации не видно.
Вобщем я надеюсь вы поняли мою проблему, поэтому если кто-то сталкивался с этим, то помогите мне пожалуйста! Или скажите где можно найти ответ на вопрос, я, честно говоря, уже замучился искать. Спасибо за то, что прочитали пост!

DarkLight 07.06.2007 04:01

следует понять логику флеша: сначала выполняется весь код на кадре, затем кадр отображается. Чтобы делать изменение координаты можно либо использовать обработчик onEnterFrame - вызов с частотой смены кадров, либо setInterval + updateAfterEvent - если не хочется зависеть от частоты кадров флешки.

Пример кода:
Код:

var a:Number = 100;
this.onEnterFrame = function():Void{
if(a>=0){
  _root.clip._x += 1;
  a -= 1;
}else{
  delete this.onEnterFrame
}
}

+Используйте Поиск, самые разные аспекты этого вопроса уже обсуждались

etc 07.06.2007 06:43

peresmeshnik, отредактируйте свой пост и оформите код тегами [code][/code].

peresmeshnik 07.06.2007 14:26

Спасибо, попробую сделать так. Только не понимаю, что означает вот эта часть:
Код:

else{
  delete this.onEnterFrame
}


Мыкыта 07.06.2007 14:50

удаляет обработчик onEnterFrame созданный ранее

peresmeshnik 07.06.2007 16:01

Тогда получается, что если не удалять обработчик onEnterFrame и временная шкала будет на фрейме, в котором написан этот скрипт - то он будет постоянно выполняться?

Мыкыта 07.06.2007 16:05

он будет выполнятся то того пока ты его не удалишь, а где в это время шакала будет никого неволнует

Ведьмак 07.06.2007 16:40

для ускорения пробуй добавлять не "1", а какую-нить переменную inc в зависимости от положения мувика, напр:
inc = this._x - 250;
чем дальше будет уезжать мувик, тем больше будет inc.... можно еще сделать его в квадрате...

PS: можно this._x - 250 еще не на что-нить поделить, чтобы inc изменялся (например) от 0 до 3.... тогда используя его в квадрате получаем диапазон от 0 до 6 (причем парабола)

Therion 07.06.2007 21:20

ну или можно при ускарении назначать начальную скорость
а потом просто её умножать на 1,1:)) при торможении на 0,9
тоесть так
Код:

Vx=Vx*1.1
this._x+=Vx

так будет плавное ускарение

this.create 07.06.2007 22:07

Цитата:

Сообщение от peresmeshnik
При нажатии на кнопке значение _х должно плюсоваться или минусоваться, в зависимости от выбранного направления (<< >>). Движение должно быть плавным, т.е. постепенный разгон с места и так же торможение.

Как вариант, есть готовый класс Tween. Ознакомтесь с ним. Он предоставляет, в том числе, и возможность плавного старта/замедления при перемещении объекта.


Часовой пояс GMT +4, время: 16:53.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.