Jump to content

Flash - guzik


Recommended Posts

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ć?

Link to post
Share on other sites

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)

Link to post
Share on other sites

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.

Link to post
Share on other sites

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

Edited by olaf
Link to post
Share on other sites

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 ?

Edited by Nikes
Link to post
Share on other sites

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)}

Edited by BizU
Link to post
Share on other sites

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.

Link to post
Share on other sites
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 ?

Link to post
Share on other sites

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

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We are using cookies. Read about our Privacy Policy