Problem z funkcjami w ActionScript3

0

Witam, mam problem z programem. Pierwsza funkcja działa normalnie jak trzeba, dwie następujące po niej funkcje nie działają... Przy debuggowaniu czasem się program zwiesi, ale błędów nie wyrzuca. Domyślam się, że trzeba coś z obsługą EventHandlerów zrobić, ale szczerze nie mam pojęcia jak się za to zabrać.... Pomocy :(

import fl.motion.MotionEvent;
import flash.events.Event;
import fl.transitions.PixelDissolve;
import flash.sampler.NewObjectSample;
import flash.display.MovieClip;

redStarts.addEventListener(MouseEvent.CLICK, redBars);

function redBars(event:Event)
{
	red1Starts.addEventListener(Event.ENTER_FRAME, r1);
	red2Starts.addEventListener(Event.ENTER_FRAME, r2);
	red3Starts.addEventListener(Event.ENTER_FRAME, r3);
	
	function r1(event:Event)
	{
		if (red1Starts.y > 200){red1Starts.y -= 4};
	}

	function r2(event:Event)
	{
		if (red2Starts.y > 20){red2Starts.y -= 4};
	}
	
	function r3(event:Event)
	{
		if (red3Starts.y > 120){red3Starts.y -= 4};
	}
}


blueStarts.enabled = true;
blueStarts.addEventListener(MouseEvent.CLICK, blueBars);

function blueBars(event:Event)
{
	blue1Starts.addEventListener(Event.ENTER_FRAME, b1);
	blue2Starts.addEventListener(Event.ENTER_FRAME, b2);
	blue3Starts.addEventListener(Event.ENTER_FRAME, b3);
	
	function b1(event:Event)
	{
		if (blue1Starts.y > 200){blue1Starts.y -= 4};
	}

	function b2(event:Event)
	{
		if (blue2Starts.y > 20){blue2Starts.y -= 4};
	}
	
	function b3(event:Event)
	{
		if (blue3Starts.y > 120){blue3Starts.y -= 4};
	}
}

greenStarts.enabled = true;
greenStarts.addEventListener(MouseEvent.CLICK, greenBars);

function greenBars(event:Event)
{
	green1Start.addEventListener(Event.ENTER_FRAME, g1);
	green2Start.addEventListener(Event.ENTER_FRAME, g2);
	green3Start.addEventListener(Event.ENTER_FRAME, g3);
	
	function g1(event:Event)
	{
		if (green1Start.y > 200){green1Start.y -= 4};
	}

	function g2(event:Event)
	{
		if (green2Start.y > 20){green2Start.y -= 4};
	}
	
	function g3(event:Event)
	{
		if (green3Start.y > 120){green3Start.y -= 4};
	}
}
0

kod dla każdego eventa wygląda identycznie (poza enabled = true, które nie powinno nic zmieniać), jeśli pierwszy działa, to pozostałe też powinny.
na pewno movieclipy blue* i green* są dodane do stage'a, widoczne (visible == true, alpha > 0), początkowe współrzędne x, y znajdują się na ekranie, a nie gdzieś w kosmosie (tzn. są dodatnie i niezbyt duże), żaden z tych obiektów i ich rodziców, rodziców rodziców itp nie ma ustawionej dużej skali? na pewno skompilowałaś projekt i nie było błędów? jeśli uruchamiasz swf w przeglądarce, to czy na pewno plik nie jest zbuforowany przez przeglądarkę (używaj Ctrl+R lub Ctrl+F5 do przeładowywania lub jakiś plugin pozwalający cache wyłączyć)?

btw nie deklaruj funkcji w funkcji, to brzydka praktyka programistyczna (za wyjątkiem funkcji anonimowych). każda z funkcji r*, b* i g* będzie wykonywać się od pierwszego kliknięcia aż do zamknięcia aplikacji. każde kolejne kliknięcie doda kolejną porcję powtórzeń. to też błąd. po zakończeniu przemieszczania obiektu eventlistener powinien być zdjęty. każda funkcja powinna mieć podany typ danych, który zwraca, jeśli nie zwraca nic, to powinno być podane void. ale to nie jest źródłem Twojego problemu.

0

Dziękuję :)
Pokasowałam i dodałam od nowa zielone i niebieskie (bo czerwony działał) i teraz wszystko śmiga :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1