PDA

Просмотр полной версии : Кнопка (запутался в коде)


Maxson
23.08.2008, 16:19
Все работает вроде бы, только вот при наведении нужно что бы анимация не кончалась а шла по кругу. Подскажите пожалуйста.

stop ();
this.onEnterFrame = function(){
if(rewind == true){
prevFrame();
}
}
this.onRollOver = function(){
rewind = false;
play();
}
this.onRollOut = function(){
rewind = false;
}
this.onRelease = function(){
getURL();
}

Obi
23.08.2008, 16:28
_level0 не отлавливает события onRelease, onRollOver, onRollOut

Maxson
23.08.2008, 19:10
А может есть иной способ?

aksios
23.08.2008, 19:27
Сделайте клип со своей анимацией, а отдельно кнопку, которая будет управлять этим клипом.

Maxson
23.08.2008, 21:50
Сделайте клип со своей анимацией, а отдельно кнопку, которая будет управлять этим клипом.
Извините, не понял.

Я кстати не использую "button" вообще, а только "MC"

Мечтатель
23.08.2008, 23:53
Извините, не понял.
Я кстати не использую "button" вообще, а только "MC"
А что разве Movie Clip не может быть кнопкой?!:confused:
У Вас обработчики события "навешаны" на this, который указывает на объект/мувиклип, и можно рассудить, что последний является своего рода анимированной кнопкой.:)

aksios предлагает Вам управлять Мувиклипом с помощью другого мувиклипа (кнопки). Допустим в стационарном состоянии анимация в мувиклипе у вас не воспроизводится (головка на таймлайне в первом фрейме, где Вы пропишите команду "stop"), а при наведении мышкой на кнопку анимация стартует и зацикливается. Все это делается просто с помощью функций Timeline Control.
И если создаете "мувики" непрограммно, не забывайте задавать им имена в поле Instance of, чтобы можно было к ним обращаться.

Maxson
24.08.2008, 12:44
И если создаете "мувики" непрограммно, не забывайте задавать им имена в поле Instance of, чтобы можно было к ним обращаться.
Я этого не делаю, так как this всегда работает. Хотя может я о чем-то и не догадываюсь.

Спасибо, теперь я понял что имел ввиду aksios, сделать где-то не в видимости кнопку и программно сделать к ней анимацию. Такую фичу я знаю, но вот самому так сделать боюсь знаний нехватит.

Лааадненько, буду импровизировать.

Мечтатель
24.08.2008, 17:19
Давайте, я Вам помогу... Только как можно конкретнее опишите задачу.

Maxson
24.08.2008, 17:53
Кнопка (будь она), при наведении лупится, при отводе плавно заканчивает луп. Вот. Ну и при отжатии что бы по ссылке ходить умела. Просто. Вроде бы. Делаю все это (пытаюсь) под f8 as2.

И странно что туториала по такой кнопке нигде нет. Правда есть куча туториалов как нужно правильно рисовать кружочек...

Мечтатель
24.08.2008, 20:17
Вот, как говорится "топориком на коленке"... Посмотрите, может такое подойдет.
import mx.transitions.Tween;//Импортируем "твиннер", класс отвечающий за анимацию
//нашего объекта
import mx.transitions.easing.*;//этот класс отвечает за плавность анимации.

this.createEmptyMovieClip("animation", this.getNextHighestDepth());//програмно создаем кнопку,
//называем ее animation
animation.lineStyle(2,0xFFFFFF,80);//делаем обводку линией в 2 пикселя, цветом - белым, с
//прозрачностью 80 - здесь все от Вашей фантазии зависит. Можете кнопку не создавать
//програмно, а нарисовать в графическом редакторе и присвоить ей имя в Instance of
animation.beginFill(0x0099FF,100);//заливаем кнопку зеленым цветом, прозрачности нет.
animation.moveTo(40,20);// начальные координаты нашего пера, х,у от которых "пляшем", рисуя
//кнопку
animation.lineTo(80,20);//рисуем контур.
animation.lineTo(80,60);
animation.lineTo(40,60);
animation.lineTo(40,20);
animation.endFill();

animation.onRollOver=function(){// обработчик события, когда курсор наведен на кнопку
//вызывается функция, которая "лупит" кнопку (будь она неладна))
var tween_x:Tween = new Tween(this, "_xscale", Regular.easeIn, 100,140, 4, false);
var tween_y:Tween = new Tween(this, "_yscale", Regular.easeIn, 100,140, 4, false);

}
animation.onRollOut = function(){// функция обратная предыдущей.
var tween_x:Tween = new Tween(this, "_xscale", Regular.easeIn, 140,100, 4, false);
var tween_y:Tween = new Tween(this, "_yscale", Regular.easeIn, 140,100, 4, false);
}

animation.onRelease = function(){// при нажатии на кнопку, она изчеает.
var tween_alpha:Tween = new Tween(this, "_alpha", Regular.easeIn, 100,0, 4, false);
tween_alpha.onMotionFinished = function(){// обработчик события, вызывается, когда анимация
//завершилась.
getURL("http://flasher.ru","GET");
}
}

BBOY Ильич
24.08.2008, 21:34
При наведении/убиранни курсора с кнопки лучше использовать continueTo

Maxson
25.08.2008, 19:35
Спасибо. Посмотрел:

- немогу остановить анимацию. На стоп(отдельно) реагирует летально. Внутри сего кода никак не реагирует.

- не вижу что бы она лупилась, просто зум.

Мечтатель
25.08.2008, 19:41
-объясните, что для Вас означает "лупится"?
- не можете остановить анимацию где? Конкретно в том коде, который я привел ранее?

Maxson
26.08.2008, 01:24
-Лупится всмысле "loop" - идет по кругу.
-Ну я свою всунул анимацию, фреймы проще говоря.

Maxson
26.08.2008, 01:27
А вы подумали лупится типа увеличивается? :)

Мечтатель
26.08.2008, 19:05
Раз всунули фреймы, значит создаете анимацию непрограммно. Ну ладно, коли так нравится, значит даю пример с минимумом ActionScript.

1. Открываем новый документ во Flash.
2. Рисуем красный квадратик (пусть он будет кнопкой)
3. Жмем F8 и сохраняем этот квадратик, как "мувик"
4. Заходим в этом "мувик" и создаем анимацию. Что Вы будете делать - Ваше дело. Я просто взял и стал вращать квадрат каждые 20 кадров на 45 градусов. В итоге - 81 фрейм. Учитывая первый фрейм бездействия кнопки (стоповый, когда никаких событий не происходит)
5. Когда анимацию закончили. Пропишем в первом фрейме мувиклипа команду "stop". В последнем - gotoAndPlay(2). Думаю не нужно объяснять для чего?
6. Помещаем муви клип на главную сцену. Даем ему имя в (Instance Of) button.
7. В первом кадре сцены прописываем код:

_root.button.onRollOver=function(){
_root.button.gotoAndPlay(2);
}

_root.button.onRollOut=function(){
st = setInterval(frm,20); // Устанавливаем интервал с которым будем вызывать //
//нужную функцию.
}

//Функция, которая определяет номер текущего фрейма, отнимает от
//него единицу, до тех пор пока головка таймлайна не вернется в первый
//кадр.
function frm(){
if (_root.button._currentframe!=1){
_root.button.gotoAndPlay(_root.button._currentframe - 1);
}
else{
clearInterval(st); // Убиваем интервал, когда головка вернулась в
//первыйкадр таймлайна.
}
}

_root.button.onRelease=function(){
getURL("http://flasher.ru", "GET");
}

Можете скачать мой исходник, если я здесь что-то непонятно объяснил.

Maxson
26.08.2008, 22:17
Яснее быть и неможет. Но что бы ваш метод был без изъяна и новые поколения нупов вам были признательны, нам нужно как то решить проблему "срывания" анимации и последующего ее игнорирования на события ( во время анимации отведите резко курсор и опять наведите - поймете о чем я говорю )

skald
26.08.2008, 22:37
жесткач ... че проще нарисовать кнопку ?? и анимации к ней .... и вставить их в соответствующие поля. и наглядней и качественней результат ))))))))))))))

Maxson
28.08.2008, 20:24
skald, почисти клаву под кнопкой ноль, мне кажется она заедает.

pyatifan
14.02.2009, 21:44
Пример пригодился, было очень радостно, только он ненадежный оказался на больших скоростях.

Понадобилось сделать вращение шестеренок (это в логотипе). При наведении мышки на клип, проигрываются кадры зацикленно. Но! При отведении курсора нужно чтобы анимация проигралась один раз до конца без зацикливания.

Если время вызова функции setInterval поставить больше 20, то возникают ошибки. Вот код:
_root.button.onRollOver=function(){
_root.button.gotoAndPlay(2);
}

_root.button.onRollOut=function(){
st = setInterval(frm,20); // Устанавливаем интервал с которым будем вызывать //
//нужную функцию.
}

//Функция, которая определяет номер текущего фрейма, отнимает от
//него единицу, до тех пор пока головка таймлайна не вернется в первый
//кадр.
function frm(){
if (_root.button._currentframe!=80){
_root.button.gotoAndPlay(_root.button._currentframe + 1);
}
else{
clearInterval(st); // Убиваем интервал, когда головка вернулась в
//первыйкадр таймлайна.
_root.button.gotoAndStop(1);
}
}

_root.button.onRelease=function(){
getURL("http://flasher.ru", "GET");
}
Может другой способ есть? Делитесь опытом, жду советов:)

pyatifan
15.02.2009, 18:04
Попробовал по-другому. Через EnterFrame вроде стабильно работает, но опять же нет уверенности. Проверьте пожалуйста:
_root.button.onRollOver=function(){
_root.button.gotoAndPlay(2);
}

_root.button.onRollOut=function(){
_root.button.onEnterFrame = function() {
if (_root.button._currentframe!=80) {
_root.button.nextFrame();
trace(_root.button._currentframe);
}
else{
delete _root.button.onEnterFrame;
_root.button.gotoAndStop(1);
}
}
}

_root.button.onRelease=function(){
getURL("http://flasher.ru", "GET");
}

pyatifan
16.02.2009, 13:22
Шестеренки вздрагивает слегка при отведении мыши, а дуги нормально вращаются. В чем может быть дело?
В принципе это мелочи, но всетаки