Skocz do zawartości

Flash - guzik


Nikes

Rekomendowane odpowiedzi

Witam.

 

Stworzyłem buttona. Na początku jest to zwykły kolor zielony. Po najechaniu myszką zmienia płynnie kolor na niebieski.

Chce zrobić, aby teraz jezeli ktos zjedzie myszką z guzika, ten spowrotem płynnie zmienia się do niebieskiego koloru.

 

Jak to zrobić?

Odnośnik do komentarza
Udostępnij na innych stronach

  • Odpowiedzi 16
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

Top Posters In This Topic

ma najechanie dajesz PLAY, a na zjechanie interwał z PREV FRAME (interwał wywołujący akcję cofania o jedną klatkę). Potem żeby interwał PREV FRAME nie kolidował z PLAY do akcji na najechanie trzeba jeszcze dodać instrukcję zatrzymującą interwał.

Aby to zoptymalizować możesz jeszcze dodać warunek IF który automatycznie wyłączy interwał po cofnięciu do pierwszej klatki (aby w tle nie pracował bez sensu interwał, który non stop próbuje cofnąć animację, kiedy to jest już niemożliwe)

Odnośnik do komentarza
Udostępnij na innych stronach

Cóż, ja to zrobiłem inaczej.

 

Stworzyłem sobie movieclip'a zielonego kwadratu, który zmienia sie płynnie na niebieski. Na ostatnie klatce dałem akcje "stop()"

Następnie stworzyłem buttona:

i mamy :

UP - tutaj wlepiłem movieclipa

OVER - nic

DOWN - nic

HIT - nic

 

dało mi to efekt po najechaniu na guzika myszką, che uzyskać teraz efekt powrotu gdy zjadę myszką.

 

Z tego co piszecie, rozumiem że wy podaliście mi troche inną możliwość.

Zrozumiałem to tak, że w movieclip musze wprowadzić action powodujący otworzenie animacji po najechaniu myszką, nastepnie w ostatniej klatce wklepać prevFrame() którego jeszcze nie znam. A o tym co kolega Grave pisze, a dokładniej (Aby to zoptymalizować możesz jeszcze dodać warunek IF który automatycznie wyłączy interwał po cofnięciu do pierwszej klatki (aby w tle nie pracował bez sensu interwał, który non stop próbuje cofnąć animację, kiedy to jest już niemożliwe) ) nie bardzo rozumiem.

Odnośnik do komentarza
Udostępnij na innych stronach

tam nie masz kontroli nad OUT. Nie wrzucaj niczego do buttona.

Zró movie clip. z 20klatkami w pierwszej i 10 wpisz: stop() - klatki kluczowe tworzysz przez f6

nazwij go jakos i daj nad niego przezroczysty button. nazwij movie clipa mc a buton bt i w oknie akcji (f9 jak wybierzesz klatkę ale nie zaznaczony zaden obiekt na scenie bo wklei kod do niego)

 

bt.onRollOver = function () {mc.gotoAndPlay(2)}

bt.onRollOut = function () {mc.gotoAndPlay(11)}

 

w AS3

 

bt.addEventListener (MouseEvent:MOUSE_OVER) {goUp}

function goUp (e:MouseEvent) {mc.gotoAndPlay (2)}

 

bt.addEventListener (MouseEvent:MOUSE_OUT) {goDown}

function goDown (e:MouseEvent) {mc.gotoAndPlay (11)}

 

jakos tak

Edytowane przez olaf
Odnośnik do komentarza
Udostępnij na innych stronach

Napisano (edytowane)

Dzięki, próbuje to ogarnąć.

 

--- Jeżeli sie nie uda >

W takim razie muszę zrobić wszystko w movieclipcie. Pomoże mi ktoś znaleźć w miarę pomocnego videotutka na Youtube ?

Edytowane przez Nikes
Odnośnik do komentarza
Udostępnij na innych stronach

dla torma pokazywałem ten trik ostatnio:

http://asria.pl/backPlayer.fla

tam powinno być, tak czy inaczej, w momencie przypisujesz dla zmiennej offset, jakiś skok, powiedzmy -10, to cofasz się o 10 klatek(przypadkiem tyle ile ma Twoja animacja zmiany koloru)

czyli:

Dodajesz nową warstwę dla kodu AS (klatka kluczowa musi obejmować całego timeline), w niej:

if (!hasEventListener(Event.ENTER_FRAME)) addEventListener(Event.ENTER_FRAME, backPlayer);
var offset:int = 0;
function backPlayer(e:Event):void
{
if (offset!=0) stop();
if (offset>0) 
{
	nextFrame();
	offset--;
}
else if(offset	{
	prevFrame();
	offset++;
}
}
function goToFrame(fr:int):void
{
offset = fr - currentFrame;
}

 

gdzieś tam w czeluściach tego movieclipa masz animacje bittona. ów przycisk nazwałeś: "przycisk",

to dajesz mu akcje:

przycisk.addEventListener(MouseEvent.ROLL_OVER, przyciskOver);
przycisk.addEventListener(MouseEvent.ROLL_OUT, przyciskOut);
function przyciskOver(e:Event):void
{
play();
}
function przyciskOut(e:Event):void
{
goToFrame(1);
}

 

to Ci zagwarantuje ze będzie działać w każdym przypadku, i animacja w trakcie jej wykonywania zacznie się cofać

-----------

 

up:

bt.addEventListener (MouseEvent:MOUSE_OVER) {goUp}

function goUp (e:MouseEvent) {mc.gotoAndPlay (2)}

 

bt.addEventListener (MouseEvent:MOUSE_OUT) {goDown}

function goDown (e:MouseEvent) {mc.gotoAndPlay (11)}

bt.addEventListener(MouseEvent.ROLL_OVER,goUp);
bt.addEventListener(MouseEvent.ROLL_OUT,goDown);
function goUp (e:MouseEvent) {mc.gotoAndPlay (2)}
function goDown (e:MouseEvent) {mc.gotoAndPlay (11)}

Edytowane przez BizU
Odnośnik do komentarza
Udostępnij na innych stronach

Aj ja jaj... Walnij movieclip który ma być przyciskiem i zrób w nim animację jaką tam chcesz. Potem w pierwszą klatkę tego klipu wklej poniższy kod, a w ostatnią tylko "stop();" I tyle filozofii ;)

 

stop();

addEventListener(MouseEvent.ROLL_OVER, cursorOver);

addEventListener(MouseEvent.ROLL_OUT, cursorOut);

 

function goPrev(e:Event) {

prevFrame();

if (currentFrame==1) {

removeEventListener(Event.ENTER_FRAME, goPrev);

}

}

 

function cursorOver(e:MouseEvent):void {

removeEventListener(Event.ENTER_FRAME, goPrev);

play();

}

 

function cursorOut(e:MouseEvent):void {

addEventListener(Event.ENTER_FRAME, goPrev, false, 0, true);

}

 

To w AS3, a w AS2 jest jeszcze łatwiej.

Odnośnik do komentarza
Udostępnij na innych stronach

Aj ja jaj... Walnij movieclip który ma być przyciskiem i zrób w nim animację jaką tam chcesz. Potem w pierwszą klatkę tego klipu wklej poniższy kod, a w ostatnią tylko "stop();" I tyle filozofii ;)

 

 

 

To w AS3, a w AS2 jest jeszcze łatwiej.

 

Zrobiłem tak.

1 warstwa. Namalowałem kropkę. F8 movieclip.

Otworzyłem movieclipa i animowalem krope.

W 1 klatce walnalem kod ktory podales, w ostatniej stop()

wracam do sceny. Odpalam scene i efekt jest taki ze po najechaniu mychą, kropka wykonuje tylko animacje od 1 klatki do 5 i zapętla. A klatek jest ponad 20.

Gdzie popełniłem błąd ?

Odnośnik do komentarza
Udostępnij na innych stronach

jeżeli pracujesz w AS 2.0 to moze tak:

 

v.1

button_mc.stop();
button_mc.onRollOver = function(){
this.onEnterFrame = function(){

	if(this._currentframe			this.nextFrame()

	}else {
		delete this.onEnterFrame
	}
}
}
button_mc.onRollOut = function(){
this.onEnterFrame = function(){

	if(this._currentframe>1){
		this.prevFrame()

	}else {
		delete this.onEnterFrame
	}

}
}

potrzebujesz tylko MC z animacja na 20 klatek, kod wklejasz do wolnej klatki, w scenie w której jest wrzucony MC

 

lub v 2.

import mx.transitions.Tween;
import mx.transitions.easing.*;
button2_mc.kolor_mc._alpha = 0;
button2_mc.onRollOver = function(){
new Tween(button2_mc.kolor_mc, "_alpha", None.easeOut,button2_mc.kolor_mc._alpha, 100,.5, true);
}
button2_mc.onRollOut = function(){
new Tween(button2_mc.kolor_mc, "_alpha", None.easeOut,  button2_mc.kolor_mc._alpha,0, .5, true);
}

 

w tym przypadku w MC button2_mc nie ma zadnej animacji na timline, na 1 warstwie rysujesz sobie obiekt np. czerwony, a na drugiej duplikujesz go i tworzysz MC kolor_mc (instance name) ze zmienionym kolorem. Kod steruje wartoscia alpha MC kolor_mc

 

pozdr

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się



×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Wykorzystujemy cookies. Przeczytaj więcej Polityka prywatności