Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   управление клипом (http://www.flasher.ru/forum/showthread.php?t=33793)

Rotator 30.06.2002 22:17

управление клипом
 
Помогите разобраться, как осуществить следующую вещь:
имеется объект, который, движется вертикально верх с некоторым ускорением, значение которого задается из отдельной кнопки по событию rollOver. Необходимо сделать так, чтобы ускорение плавно увеличивалось во время постоянного нахождения курсора над кнопкой. У меня же получается наращивать ускорение только после последовательных наведений на кнопку. Вот код всей этой байды:
Клип:
onClipEvent (enterFrame) {
_root.object.accel=_root.yskor;
y=y-5-accel;
_root.object._y =300+y;
if (_root.object._y<0) {
_root.object._y =0;
}
}
Кнопка:
on (rollOver) {
_root.yskor = _root.yskor+1;
}
Подскажите, что здесь нужно изменить для достижения нужного результата.

Geo 01.07.2002 08:01

onClipEvent (enterFrame) {
_root.object.accel+=_root.yskor;
y=y-5-accel;
_root.object._y =300+y;
if (_root.object._y<0) {
_root.object._y =0;
}
}
Кнопка:
on (rollOver) {
_root.yskor =1;
}
on (rollOut, dragOut) {
_root.yskor =0;
}

Rotator 01.07.2002 21:09

Спасибо за ответ. Усе работает как надо;)

Geo 02.07.2002 03:43

не за что только у тнебя в этом коде очень много лишних действий и переменных.... я бы упрастил (блин а как пишется упрастил или упростил , совсем туплю %)).... ну да ладно) некоторые действия.... во первых непонятна логика записи различных скоростей для различных мувиков "_root.object.accel" и единого "у", исходя из скрипта видно, что "карма" (все изменения ролика за время проигрывания клипа) ролика в том, чтобы с ускорением подьехать к нулю и замереть. тогда пишем ...
MC:
onClipEvent (Load) {
_root.object.accel=5;
_root.object._y =300;

}
onClipEvent (enterFrame) {
_root.object._y -=(_root.object.accel+=_root.yskor)*(_root.object._y>=0) ;

}
Кнопка:
on (rollOver) {
_root.yskor =1;
}
on (rollOut, dragOut) {
_root.yskor =0;
}

или карма у него другая? поясни

Rotator 03.07.2002 01:38

Вложений: 1
Относительно того, что ты назвал "кармой" для мувика, на самом деле ни в коей мере его "кармой" не является. Принципиально меня интересовали "игры" с ускорением.
Хотя замирание в конкретной точке, наверное (как человек, далекий от программирования, не берусь судить однозначно;), оптимальнее реализовать предложенным тобой способом.
Тут назрел еще вопросец, связанный с hittest. Надеюсь, я не очень утомил ламерскими вопросами?;)
Допустим, имеется клип, который непрерывно дублируется, каждый новый дубликат появляется на новом слое. Кроме этого клипа есть еще один, которому посредством hittest поручено взаимодействовать с дубликатами. Но, так как все они находятся на разных слоях, столкновения не происходит. В общем ,как решить эту траблу со слоями, мне совершенно непонятно. Или это в принципе невозможно?
Если формулировка вопроса не достаточно ясна, прилагаю проясняющий файлик.

Geo 03.07.2002 05:50

посмотрел я твой исходник... у тебя все действует , только проверка на хитовость дублированного мувика проходит один раз в начале его жизни и конечно пересечения нет%))
ты просто не туда засунул проверку , навесь проверку на саму сферу и все заработает. вот измененный ролик (только мне скучно было я немного над ним поиздевался, ты уж прости. надеюсь поймешь что там к чему %))))
да и еще называй дублированные клипы начиная с буковки , а то в некоторых случаях из АС к нему не обратиться будет.

Geo 03.07.2002 05:52

Вложений: 1
файл то забыл приаттачить %)))

Rotator 04.07.2002 01:22

За "издевательства" спасибо, но не все в них оказалось для меня понятным:
onClipEvent (load) {
i = 1;
htest = 5;
c = new Color(this);
cTr = new Object();
}
onClipEvent (enterFrame) {
this._y += i*(htest+this._y/30);
Строчкой выше осуществляется управление пресловутым ускорением. С этим все ясно :)
if (this._y>420) {
removeMovieClip (_target);
}
//Здесь тоже без вопросов;)

Следующая строчка, кажется, заставляет возвращаться отлетевшую после столкновения сферу, т.к. -i+(-i) будет i :) Но здесь непонятен синтаксис: если стоит htest == 0, то все работает. Если же ставлю просто "=",то в скрипте вылетает ошибка. В справочнике нашел, что "==" обозначает равнество операндов. Так вот не могу врубиться, что за операнды здесь сравниваются и почему не катит подстановка банального равентсва.
else if (this._y<20 && htest == 0) {
i = -i;
htest = 1;
}
if (this.hitTest(_root.plosh)&& htest!=0)
//А ларчик-то просто открывался. Блин, куда этот hittest я только не прикручивал. С htest! такие же непонятки, как и с htest ==. Без "!" скрипт тоже не работает. В том же справочнике обнаружил, что "!" - "действует как переключатель: для истинного операнда возвращает ложь, а для ложного, напротив, итстину". Где здесь истина, где ложь? ;) Философия пошла какая-то%) Может разъяснишь?

Geo 04.07.2002 05:35

%)
htest есть переменная которая создана мной для убирания багов многократного сравнивания и управления скоростью. я все про карму. проследи поведение клипа от его рождения. это помогает сделать оптимальный код и понять где могут возникнуть баги.
теперь переводим на русский выражения и смотрим карму клипа.
есть два варианта .
1.рождение, падение, смерть.
2.рождение падение отражение подьем , замирание, падение и опять выбор либо смерть либо отражение.
что бы замирание после отражения происходило в области видимости я поставил условие this._y<20 а процесс рождения мне неприятен и видеть я его не хочу (совместные роды не для меня :)), поэтому рождается он за пределами видимости, но если проверить this._y<20 получается, что надо менять направление и так, как за один цикл (переход от фрейма к фрейму) клип все равно выше, условие this._y<20 выполняется снова: получаем дрожание на месте. поэтому добавим еще одно условие , которое заведомо ложно, возьмем переменную содержащюю начальную скорость и проверим равна она 0 или нет (htest ==0).
небольшое отступление:
"==" есть оператор сравнения если напишешь trace (2==2) то в ответе получишь true. есть такой анекдот, про то, чем отличается програмист от нормального человека: он отвечает на утверждение содержащее ответ "дважды два равно четыре." програист ответит true. запишем так 4==2*2, а так 5==2*2 false, а если так 5!=2*2 true, ааааа если 4!=2*2 то получаем false переводим "!=" на руский язык , получаем "не равно".
теперь продолжим.
после того как добавили новое условие получаем ,что клип падает вниз так как this._y<20 - true htest ==0 - false а условие смены проходит только когда оба условия истинны "&&" значит "и" .
летим дальше и встречаемс\я с битой, если не встречаемся там все понятно, и так if (this.hitTest(_root.plosh)&& htest!=0) - переводим на русский если произошло пересечение областей (this.hitTest(_root.plosh)==true) и htest не равно 0 меняем направление , и !!!!! htest=0 закрываем проверку так как в следующем кадре (проверке) клип все еще может быть над битой и опять сменить направление , получив в итоге дрожание над битой. убери "&& htest!=0" и посмотри что некоторые сферы дрожат а некоторые отскакивают. в принципе можно было бы использовать любую переменную , но у нас есть бесполезная - htest..... так как скорость клипа внизу очень большая то уменьшение на 5 пунктов не существенно , плюс !!! получим немного реальности: столкновение получилось не абсолютно упругим и скорость клипа уменьшилась, но это еще не все , в верхней мертвой точке клип почти замрет (рагу из трех зайцев на ужин обеспечено:)) . летим в верх и замираем в верхней точке. условие смены направления выполнено? да! меняем. и дрожание уберем htest=1 и ускорим падение но не очень сильно. Завтрак тоже есть% и тоже из трех, так как теперь проверка на соударение с битой выполняется.

Уф! помоему все %))

Rotator 04.07.2002 16:57

Гм...
Здорово объяснил - все разложено по полочкам. После такого точно буду серьезнее относиться к карме, дхарме и иже с ними ;)
thanks!!!


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

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