![]() |
|
||||||||||
|
|||||
|
Регистрация: Jul 2001
Сообщений: 29
|
Помогите разобраться, как осуществить следующую вещь:
имеется объект, который, движется вертикально верх с некоторым ускорением, значение которого задается из отдельной кнопки по событию 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; } Подскажите, что здесь нужно изменить для достижения нужного результата. |
|
|||||
|
Регистрация: Jul 1999
Адрес: Russia, MSk
Сообщений: 185
|
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; } |
|
|||||
|
Регистрация: Jul 2001
Сообщений: 29
|
Спасибо за ответ. Усе работает как надо
![]() |
|
|||||
|
Регистрация: Jul 1999
Адрес: Russia, MSk
Сообщений: 185
|
не за что только у тнебя в этом коде очень много лишних действий и переменных.... я бы упрастил (блин а как пишется упрастил или упростил , совсем туплю %)).... ну да ладно) некоторые действия.... во первых непонятна логика записи различных скоростей для различных мувиков "_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; } или карма у него другая? поясни |
|
|||||
|
Регистрация: Jul 2001
Сообщений: 29
|
Относительно того, что ты назвал "кармой" для мувика, на самом деле ни в коей мере его "кармой" не является. Принципиально меня интересовали "игры" с ускорением.
Хотя замирание в конкретной точке, наверное (как человек, далекий от программирования, не берусь судить однозначно , оптимальнее реализовать предложенным тобой способом.Тут назрел еще вопросец, связанный с hittest. Надеюсь, я не очень утомил ламерскими вопросами? ![]() Допустим, имеется клип, который непрерывно дублируется, каждый новый дубликат появляется на новом слое. Кроме этого клипа есть еще один, которому посредством hittest поручено взаимодействовать с дубликатами. Но, так как все они находятся на разных слоях, столкновения не происходит. В общем ,как решить эту траблу со слоями, мне совершенно непонятно. Или это в принципе невозможно? Если формулировка вопроса не достаточно ясна, прилагаю проясняющий файлик. |
|
|||||
|
Регистрация: Jul 1999
Адрес: Russia, MSk
Сообщений: 185
|
посмотрел я твой исходник... у тебя все действует , только проверка на хитовость дублированного мувика проходит один раз в начале его жизни и конечно пересечения нет%))
ты просто не туда засунул проверку , навесь проверку на саму сферу и все заработает. вот измененный ролик (только мне скучно было я немного над ним поиздевался, ты уж прости. надеюсь поймешь что там к чему %)))) да и еще называй дублированные клипы начиная с буковки , а то в некоторых случаях из АС к нему не обратиться будет. |
|
|||||
|
Регистрация: Jul 1999
Адрес: Russia, MSk
Сообщений: 185
|
файл то забыл приаттачить %)))
|
|
|||||
|
Регистрация: Jul 2001
Сообщений: 29
|
За "издевательства" спасибо, но не все в них оказалось для меня понятным:
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 ==. Без "!" скрипт тоже не работает. В том же справочнике обнаружил, что "!" - "действует как переключатель: для истинного операнда возвращает ложь, а для ложного, напротив, итстину". Где здесь истина, где ложь? Философия пошла какая-то%) Может разъяснишь? |
|
|||||
|
Регистрация: Jul 1999
Адрес: Russia, MSk
Сообщений: 185
|
%)
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 и ускорим падение но не очень сильно. Завтрак тоже есть% и тоже из трех, так как теперь проверка на соударение с битой выполняется.Уф! помоему все %)) Последний раз редактировалось Geo; 04.07.2002 в 05:40. |
|
|||||
|
Регистрация: Jul 2001
Сообщений: 29
|
Гм...
Здорово объяснил - все разложено по полочкам. После такого точно буду серьезнее относиться к карме, дхарме и иже с ними ![]() thanks!!! |
![]() |
Часовой пояс GMT +4, время: 12:20. |
|
|
« Предыдущая тема | Следующая тема » |
|
|