torm Napisano 3 Październik 2011 Napisano 3 Październik 2011 witojcie witojcie...;) mam mały problem z action scriptem, robię samochód, któremu po najechaniu mają zapalić się światła... więc jest samochód... (movieClip), w nim znajdują się światła (movieClip), stworzyłem tween'a, który animuje alphę świateł po najechaniu na samochód. Problem jednak polega na tym, że gdy kursor wpadnie na światła, znów zaczynają się animować. zagnieździłem już światła w movieClipie samochodu, żeby traktował je jak jeden obiekt, jednak nie bardzo to pomaga.... .. mam nadzieję, że ktoś coś z tego zrozumie.. :) z góry dzięki za pomoc... ja wracam do walki, może jeszcze coś wymyślę... gdyby ktoś potrzebował kodu: lancia.addEventListener(MouseEvent.MOUSE_OVER, lanciaOver); lancia.addEventListener(MouseEvent.MOUSE_OUT, lanciaOut); function lanciaOver(event:MouseEvent):void { var myTweenAlpha:Tween = new Tween(lancia.lanciaLights, "alpha", Strong.easeOut, 0, 1, 0.5, true); } function lanciaOut(event:MouseEvent):void { var myTweenAlpha:Tween = new Tween(lancia.lanciaLights, "alpha", Strong.easeOut, 1, 0, 0.5, true); }
Grave Napisano 3 Październik 2011 Napisano 3 Październik 2011 A masz ustawione: lancia.mouseChildren = false; ?? 1
zgred Napisano 3 Październik 2011 Napisano 3 Październik 2011 hmm skoro zagnieździłeś światła w obiekcie lancia to co w tym dziwnego, że jak najedziesz na światła to one się włączają jeśli to jeden obiekt?
torm Napisano 3 Październik 2011 Autor Napisano 3 Październik 2011 Grave - dzięki wielkie :) zgred - hmm... no właśnie skoro to jeden obiekt, to dlaczego flash myśli, że trafił na inny obiekt, tylko o tej samej nazwie?
zgred Napisano 3 Październik 2011 Napisano 3 Październik 2011 Hm masz obiekt lancia i obiekt light. Dla obiektu lancia jest przypisana akcja, że mają się zapalić światła. No to jeśli wrzucisz obiekt light w obiekt lancia to akcja będzie wykonywana również wtedy gdy najedziesz kursorem na obiekt light.
Grave Napisano 3 Październik 2011 Napisano 3 Październik 2011 W AS3 to działa trochę inaczej niż w AS2 i pewnie stąd to małe zamieszanie :)
torm Napisano 3 Październik 2011 Autor Napisano 3 Październik 2011 nie znam za bardzo AS2, dopiero siadłem do flasha... ale ja to widzę tak... mam obiekt lancia ( ) i teraz wkładam w to drugi obiekt, lights ( () ) IMO, lancia powinna być traktowana jako jeden obiekt, a nie dwa tylko, że o tych samych namiarach :) ale jak widać flash traktuje lights jako dziecko, które przejmuje atrybuty rodzica... bardziej to życiowe niż logiczne ;)
olaf Napisano 3 Październik 2011 Napisano 3 Październik 2011 pierwszy raz widzę, by flash tak się zachowywał. Nie miałem takich problemów ani w as2 ani w as3. ale dobrze wiedzieć, ze moze sie kiedys pojawić taki problem.
bolitic Napisano 4 Październik 2011 Napisano 4 Październik 2011 torm: nie używaj standardowego Tween'a - to shit - jak będziesz miał coś bardziej skomplikowanego to się przekonasz. Używa się tego: http://www.greensock.com/tweenlite/
bolitic Napisano 4 Październik 2011 Napisano 4 Październik 2011 Aha, z tego co widzę problem polega na tzw. propagacji obiektów zdarzeń: http://help.adobe.com/pl_PL/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7e4f.html Najlepiej jakbyś zrobił to: Zatrzymywanie strumienia zdarzenia Aby zapobiec przesuwaniu obiektu zdarzenia w strumieniu zdarzenia, należy wywołać metodę Event.stopPropagation() lub metodę Event.stopImmediatePropagation(). Obydwie te metody są niemal identyczne i odróżnia je tylko to, czy umożliwiają działanie innych detektorów zdarzeń bieżącego węzła: Metoda Event.stopPropagation() zapobiega przesunięciu obiektu zdarzenia do kolejnego węzła, ale tylko wówczas, gdy możliwe jest uruchomienie innych detektorów zdarzeń w bieżącym węźle. Metoda Event.stopImmediatePropagation() również zapobiega przesunięciu obiektu zdarzeń do kolejnego węzła, ale nie zezwala na uruchamianie innych detektorów zdarzeń w bieżącym węźle. Wywołanie dowolnej z tych metod nie ma wpływu na to, czy wystąpi zachowanie domyślne skojarzone ze zdarzeniem. Aby zapobiegać zachowaniu domyślnemu, należy użyć metod zachowania domyślnego klasy Event. a wiec u Ciebie powinno to wygladac tak: lancia.addEventListener(MouseEvent.MOUSE_OVER, lanciaOver); lancia.addEventListener(MouseEvent.MOUSE_OUT, lanciaOut); function lanciaOver(event:MouseEvent):void { event.stopPropagation(); var myTweenAlpha:Tween = new Tween(lancia.lanciaLights, "alpha", Strong.easeOut, 0, 1, 0.5, true); } function lanciaOut(event:MouseEvent):void { event.stopPropagation(); var myTweenAlpha:Tween = new Tween(lancia.lanciaLights, "alpha", Strong.easeOut, 1, 0, 0.5, true); }
Rekomendowane odpowiedzi
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ę