Cannot access a property or method of a null object referenc

Technologia Flash, czyli animacja na potrzeby stron WWW to świat daleko odbiegły od zwykłego programowania i kodu. Zapytaj o pomoc i podziel się z nami Twoimi problemami z zakresu Flasha.
angelina
Posty: 10
Rejestracja: pt maja 16, 2008 5:42 pm

Cannot access a property or method of a null object referenc

Post autor: angelina »

Czesc,
pojawia mi sie blad jak w temacie. moj program to zdjecie sali po ktorej mozna poruszac sie wraz z ruchem myszki. w jednym miejscu sa drzwi, po kliknieciu na ktore przechodzi sie do drugiego pomieszczenia. I wlasnie w tym momencie wyskakuje blad. "Salaa" to pierwsze pomieszczenie, "drzwi1" to button, po którego kliknieciu przechodzi się do drugiej sali na glownej listwie czasowej oznaczonej jako "salka". "Salka" znajduje sie w kolejnej klatce zaraz po "salaa" i jest takze zdjeciem panoramicznym, a poruszanie po nim zdefiniowane jest podobnie jak pierwsze.
Błąd dotyczy MainTimeline/onLoop1()
Proszę o pomoc.

Kod: Zaznacz cały

stop();
var rect1:Shape = new Shape();
rect1.graphics.beginFill(0xFFFFFF);
rect1.graphics.drawRect(0, 0, 500, 300);
addChild(rect1);
 
salaa.mask = rect1;
 
this.addEventListener(Event.ENTER_FRAME, onLoop1, false, 0, true);
function onLoop1(evt:Event):void { 
...
}
 
salaa.drzwi1.addEventListener(MouseEvent.CLICK, klikniecieDrzwi);
 
function klikniecieDrzwi(event:MouseEvent):void {
 
    gotoAndPlay("salka");
    } 
Ostatnio zmieniony pn wrz 08, 2008 12:59 pm przez angelina, łącznie zmieniany 1 raz.
Marek_bf
Administrator
Posty: 4419
Rejestracja: czw lut 24, 2005 2:14 am
Kontakt:

Re: Cannot access a property or method of a null object referenc

Post autor: Marek_bf »

W klatce salka zdarzenie ENTER_FRAME wywołuje nadal funkcję onLoop1, w której są odwołania do nieistniejącego już obiektu salaa. Przed przejściem do klatki salka musisz usunąć listener dla tego zdarzenia

Kod: Zaznacz cały

function klikniecieDrzwi(event:MouseEvent):void {
	gotoAndPlay("salka");
	removeEventListener(Event.ENTER_FRAME, onLoop1);
}
angelina
Posty: 10
Rejestracja: pt maja 16, 2008 5:42 pm

Re: Cannot access a property or method of a null object referenc

Post autor: angelina »

Tak to było to. Jestem niewypowiedzianie wdzieczna. :-D
mialam ta linijke, ale poza funkcja klikniecieDrzwi i nie dzialalo. Teraz wszystko dziala jak powinno. Kłaniam się :)
angelina
Posty: 10
Rejestracja: pt maja 16, 2008 5:42 pm

Re: Cannot access a property or method of a null object referenc

Post autor: angelina »

Chciałabym zadać jeszcze jedno pytanie.
Czy ten sam button może być wielokrotnie włącznikiem i wyłącznikiem?
Chodzi o to, że mam guzik, po kliknięciu którego ładuje się muzyka, a gdy kliknę go drugi raz muzyka się wyłącza. Chciałabym,żeby jak się go znowu nadusi muzyka na nowo zaczynała grać. Na razie mam to zdefioniowane w taki sposób:

Kod: Zaznacz cały

guzik_muzyka.addEventListener(MouseEvent.CLICK, muzyka);

function muzyka(event:MouseEvent):void {

var dzwiek:Sound = new Sound();
dzwiek.load(new URLRequest("overpowered.mp3"));

var channel:SoundChannel;
dzwiek.addEventListener(Event.COMPLETE, onLoadComplete, false, 0,
true);
function onLoadComplete(evt:Event):void {
var localDzwiek:Sound = evt.target as Sound;
channel = localDzwiek.play();
}
guzik_muzyka.removeEventListener(MouseEvent.CLICK, muzyka);

guzik_muzyka.addEventListener(MouseEvent.CLICK, muzyka_stop);

function muzyka_stop(event:MouseEvent):void {
channel.stop();
}
//guzik_muzyka.removeEventListener(MouseEvent.CLICK, muzyka_stop);
}
Domyślam się, jak by to można zrobić zeby działało, jeśli zamieniłabym tego buttona na mc i dodała akcje w poszczegolnych klatkach, ale nurtuje mnie czy da się z to zrobić przy pomocy tego kodu. Włączanie i wyłączenie muzyki działa, ale tylko jednokrotnie. Wszystko odbywa się w jednej klatce. Dlaczego po przejściu tej funkcji EventListener nie wykrywa ponownego kliknięcia guzika? Podejrzewam, że to przez usunięcie listenera dla tej funkcji. Ale z drugiej strony removeEventListener(MouseEvent.CLICK, muzyka), musi być, bo inaczej przy każdym kolejnym kliknięciu muzyka odtwarza się nakładając kolejne ścieżki na siebie.
Jakby to zapętlić.
angelina
Posty: 10
Rejestracja: pt maja 16, 2008 5:42 pm

Re: Cannot access a property or method of a null object referenc

Post autor: angelina »

ok, szukalam wczesniej na forum, ale dopiero teraz znalazlam cos co powinno mnie naprowadzic. więc na razie zawieszam to pytanie. :)

udalo mi sie. nie wiem na ile rozwiazanie jest poprawne merytorycznie, ale działa. może komuś się przyda:

Kod: Zaznacz cały

var isPlaying:Boolean = false;
var dzwiek:Sound = new Sound();

dzwiek.load(new URLRequest("overpowered.mp3"));

var channel:SoundChannel;
dzwiek.addEventListener(Event.COMPLETE, onLoadComplete, false, 0,
true);
function onLoadComplete(evt:Event):void {
	var localDzwiek:Sound = evt.target as Sound;
	
guzik_muzyka.addEventListener(MouseEvent.CLICK, muzyka);

function muzyka(event:MouseEvent):void {
     if (channel && (isPlaying = !isPlaying)) {
		channel.stop();
		
	} else {
		channel = localDzwiek.play();
   }
}
}
Marek_bf
Administrator
Posty: 4419
Rejestracja: czw lut 24, 2005 2:14 am
Kontakt:

Re: Cannot access a property or method of a null object referenc

Post autor: Marek_bf »

Przełącznik dwustanowy:

Kod: Zaznacz cały

var flagaPrzelacznika:Boolean = false;
button.addEventListener(MouseEvent.CLICK, przelacznik);
function przelacznik(event:MouseEvent) {
	if (flagaPrzelacznika = !flagaPrzelacznika) {
		trace("Stan 1");
	} else {
		trace("Stan 0");
	}
}
angelina
Posty: 10
Rejestracja: pt maja 16, 2008 5:42 pm

Re: Cannot access a property or method of a null object referenc

Post autor: angelina »

no cześć
znowu mam problem z błędem w temacie. Chodzi o to, że mam movieclipa ze zdjęciem sali, które znacznie wychodzi poza scenę i poruszam sie po nim tak jak pisalam wczesniej. wewntarz tego mc mam rozne przyciski, ktore przekierowuja mnie do innych pomieszczen. I problem polega na tym, że gdy przycisk na movieclipie znajduje sie fizycznie poza sceną to gdy chcę np przeniesc sie do wczesniej odwiedzonej klatki, ktora byla statyczna to wyskakuje moj ulubiony error 1009. Tym razem nie chodzi o usunięcie listenera. Jesli bym zmienila polozenie przyciskow, aby nie byly wewntarz movieclipa tylko znajdowaly sie bezposrednio na scenie to ten blad oczywiscie znika. czy jest jakis sposob na pozostawienie przyciskow wewnatrz mc i wyeliminowanie tego bledu?
Marek_bf
Administrator
Posty: 4419
Rejestracja: czw lut 24, 2005 2:14 am
Kontakt:

Re: Cannot access a property or method of a null object referenc

Post autor: Marek_bf »

Nie wiem, co i jak tam masz zrobione, więc ciężko cokolwiek napisać. Trzeba pamiętać, że jeśli masz w jakiejś klatce przypisane obiektowi metody, obiekt ten znika ze sceny i znowu się pojawia to trzeba te metody ponownie przypisać.
angelina
Posty: 10
Rejestracja: pt maja 16, 2008 5:42 pm

Re: Cannot access a property or method of a null object referenc

Post autor: angelina »

http://tobys-rusznikarstwo.pl/flash/sala04b4d.rar
jak wejdziesz w "akustyka" i cofniesz sie do wyjscia to "systemy mult." nie dzialaja i analogicznie na odwrot, gdy wejdziesz w systemy przestaje dzialac akustyka.
angelina
Posty: 10
Rejestracja: pt maja 16, 2008 5:42 pm

Re: Cannot access a property or method of a null object referenc

Post autor: angelina »

Znowu mam ten blad, Marek pomocy 8O
ODPOWIEDZ