Zurück   Flashforum > Flash > Flash Einsteiger

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 12-02-2012, 00:29   #1 (permalink)
Neuer User
 
Registriert seit: Dec 2011
Beiträge: 5
Alle EventListener bei unloadAndStop() entfernen

Hallo zusammen,

ich habe folgendes Problem:

Ich habe eine Navigation, mit der ich 4 andere SWFs auf die Bühne der Navigation.swf laden kann.

Bei Mausklick auf einen der entsprechenden NaviButtons wird die alte SWF von der Bühne entfernt und die neue reingeladen. Und genau das ist das Problem. Ich entferne die alte swf mit removeChild(loader) und gebe zusätzlich loader.unloadAndStop() an, damit alle EventListener des alten swfs entfernt werden. Bei 3 der Dateien funktioniert das auch so, nur bei der 4. nicht. Die vierte Datei ist ein Spiel und wenn ich gerade mitten im Spiel bin (dort werden über EnterFrame Events Elemente auf die Bühne gebracht), laufen diese immer im Hintergrund weiter und werden nicht gestoppt, was dann irgendwann das Skript zum Absturz bringt.

Kann mir da irgendjemand einen Tipp geben?

Ich bekomme immer folgende Fehlermeldung,wenn ich bei "laufendem" Spiel eine neue swf reinladen will:

at datei_fla::MainTimeline/moveBombe()
TypeError: Error #1009: Der Zugriff auf eine Eigenschaft oder eine Methode eines null-Objektverweises ist nicht möglich.

Danke schonmal für eure Hilfe.
Flashyy ist offline   Mit Zitat antworten
Alt 12-02-2012, 08:47   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.325
installiere ein REMOVE_FROM_STAGE event auf das geladene swf

du musst alle events u.ä. die du setzt auch rechtzeitig wieder selbst entfernen. es gibt keinen prozess, der selbszständig alles das finden und rauskicken könnte.

deine fehlermeldung besagt, das du in der angegebenen function in moveBombe auf eine eigenschaft zugreifen willst, diese (dessen object) zu diesem zeitpunkt aber garnicht mehr existiert bzw. aus anderen gründen kein zugriff mehr erfolgen kann.
warum, das musst du selbst heraus finden: trace, debuggen, ..
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (12-02-2012 um 08:48 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 12-02-2012, 09:13   #3 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.164
Ich vermute mal, dass irgendwas in dieser nachgeladenen SWF versucht auf stage zu zugreifen. Da das z.B. beim Nachladen zu den beschrieben Problemen führen kann, sollte man aber auf stage soweit wie irgend möglich vezichten!
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!
Martin Kraft ist gerade online   Mit Zitat antworten
Alt 12-02-2012, 10:32   #4 (permalink)
Neuer User
 
Registriert seit: Dec 2011
Beiträge: 5
Ich habe mal den Code, der immer auf die Funktion zugreifen will,die nicht mehr existiert:

PHP-Code:
var bombeTimer:Timer = new Timer(2000,int.MAX_VALUE);
bombeTimer.addEventListener(TimerEvent.TIMER,createBombe);
bombeTimer.start();
function 
createBombe(e:TimerEvent):void
{
    var 
myBombe:Bombe = new Bombe();
    
myBombe.randomExt(myBombe.width,stage.stageWidth myBombe.width);
    
myBombe.myBombe.height;
    
addChild(myBombe);
    
myBombe.addEventListener(Event.ENTER_FRAME,moveBombe);
}
function 
moveBombe(e:Event):void
{
    if (
e.currentTarget.stage.stageHeight)
    {
        
e.currentTarget.+=  10;
    }
    else
    {
        
e.currentTarget.removeEventListener(Event.ENTER_FRAME,moveBombe);
        
removeChild(DisplayObject(e.currentTarget));
    }
    
// Kollisionserkennung mit Hai
    
try
    {
        if (
e.currentTarget.hitTestObject(Hai))
        {
            
e.currentTarget.removeEventListener(Event.ENTER_FRAME,moveBombe);
            
removeChild(DisplayObject(e.currentTarget));
            
myExplosion.play(0,1);
            
setEnergie(energie-0.3);
            if (
energie <= 0)
            {
                
endGame();
            }
        }
    }
    catch (
e:Error)
    {
        
// Energy existiert nicht mehr

    
}

Ich habe schon versucht in die Navigation vor unloadAndStop() Folgendes einzubauen:

PHP-Code:
if (bombeTimer != null) {bombeTimer.stop();} 
Hat aber nicht funktioniert
Flashyy ist offline   Mit Zitat antworten
Alt 12-02-2012, 11:16   #5 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.325
das
bombeTimer.stop
stoppt nur die animation, zum nächsten frame zu gehen.
und wer stoppt deinen timer?

das z.b. gibt es 2x
e.currentTarget.removeEventListener(Event.ENTER_FR AME,moveBombe);
removeChild(DisplayObject(e.currentTarget));
das sollte dir schonmal zu denken geben.

erstelle eine function, die alles installiert und eine, die genau all das wieder deinstalliert. zu JEDEM addEventListener gehört auch ein removeEventListener. und stelle sicher, das das auch ausgeführt wird. wie schon geschrieben, ein REMOVE_FROM_STAGE ist eine gute zeit das zu tun.


dein if (e.currentTarget.hitTestObject(Hai)) sollte oben bei dem +10 dazu (die 10 in eine constante schreiben) weil du löschst das objekt und danach kommt dein try-block.


und versuche dich mal in OOP ein zu arbeiten ;-)
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (12-02-2012 um 11:38 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 12-02-2012, 23:33   #6 (permalink)
Neuer User
 
Registriert seit: Dec 2011
Beiträge: 5
Danke für die Tipps,das bringt mich auf eine Idee,wie ich die Sache angehen könnte
Flashyy ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
eventlisterner, load, unload

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Eventlistener entfernen Joralin ActionScript 3 5 12-12-2011 02:04
EventListener entfernen art0815 ActionScript 3 1 18-07-2011 23:25
alle Eventlistener entfernen Mischap ActionScript 3 2 28-02-2011 22:32
EventListener entfernen jeahbaby ActionScript 3 11 07-07-2010 11:08
EventListener entfernen DjMichi ActionScript 3 3 31-01-2008 13:39


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:35 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele