Форум 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)
-   -   Кнопка (запутался в коде) (http://www.flasher.ru/forum/showthread.php?t=115239)

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

Цитата:

Сообщение от aksios (Сообщение 759914)
Сделайте клип со своей анимацией, а отдельно кнопку, которая будет управлять этим клипом.

Извините, не понял.

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

Мечтатель 23.08.2008 23:53

Цитата:

Сообщение от Maxson (Сообщение 759923)
Извините, не понял.
Я кстати не использую "button" вообще, а только "MC"

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

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

Maxson 24.08.2008 12:44

Цитата:

Сообщение от Мечтатель (Сообщение 759935)
И если создаете "мувики" непрограммно, не забывайте задавать им имена в поле 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

Вложений: 1
Раз всунули фреймы, значит создаете анимацию непрограммно. Ну ладно, коли так нравится, значит даю пример с минимумом 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

работает
 
Вложений: 1
Попробовал по-другому. Через EnterFrame вроде стабильно работает, но опять же нет уверенности. Проверьте пожалуйста:
Код AS1/AS2:

_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

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


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

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