• beyond tellerrand – play. Register Now!
Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 26-02-2009, 08:41   #1 (permalink)
Harry, Wagen!
 
Benutzerbild von uncle.sam
 
Registriert seit: Jan 2006
Beiträge: 574
addChild und removeChild

Hallo,

ich adde in dieser funktion einen geladenen swf:
PHP-Code:
function keyUp():void
{
     
addChild(swfArray[currentIcon]);
}; 
und hier remove ich diesen wieder:
PHP-Code:
function keyReturn(e:Event):void
{
     
removeChild(swfArray[currentIcon]);

jetzt wird aber bei jedem neuaufruf diese swf wieder geaddet, also darübergelegt, d.h. bei 10 aufrufen habe ich 10 swfs übereinander (immer die gleichen).

Also entweder funktioniert der remove Befehl nicht oder mir dem add pass was nicht, aber das überschreitet meine logik.
Weis jemand von euch Rat?

Vielen Dank,
lg
__________________
- uncle.sam -
uncle.sam ist offline   Mit Zitat antworten
Alt 26-02-2009, 09:15   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.109
var a:Sprite=new Sprite();
//
// wir beginnen bei 0 objekten
trace(numChildren);
// eins hinzu
addChild(a);
trace(numChildren);
// das kann man nur einmal addieren
addChild(a);
trace(numChildren);
// und wieder weg
removeChild(a);
trace(numChildren);

was auch immer dein problem ist, an dem hier veröffentlichten liegts wohl nicht.
__________________
die ultimative antwort auf alle programmierfragen: der debugger!
- vor eine programmzeile klicken (==roter punkt)
- im menü "debuggen" aufrufen
- auf den grünen pfeil klicken
- im swf etwas machen (der programmablauf hält beim roten punkt)
- links die objekte auswählen, variable, interne... mal alles ansehen!
mit dem debugger kann man sein programm schrittweisse abarbeiten und in alle variable reinsehen.

mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 26-02-2009, 09:32   #3 (permalink)
Harry, Wagen!
 
Benutzerbild von uncle.sam
 
Registriert seit: Jan 2006
Beiträge: 574
beim austracen kommt immer der richtige currentIcon.
Allerdings ist mir jetzt aufgefallen, dass bereits beim zweiten mal aufrufen, diese Fehlermeldung kommt:
Zitat:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at MethodInfo-119()
at MethodInfo-116()
__________________
- uncle.sam -
uncle.sam ist offline   Mit Zitat antworten
Alt 26-02-2009, 10:03   #4 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.109
Zitat:
Zitat von uncle.sam Beitrag anzeigen
dass bereits beim zweiten mal aufrufen, diese Fehlermeldung kommt:
dann wird wohl dazwischen was passieren ;-) aber was, das kann von hier aus niemand sehen.

wenn's nicht an currentIcon liegt, dann an deinem swfArray?
__________________
die ultimative antwort auf alle programmierfragen: der debugger!
- vor eine programmzeile klicken (==roter punkt)
- im menü "debuggen" aufrufen
- auf den grünen pfeil klicken
- im swf etwas machen (der programmablauf hält beim roten punkt)
- links die objekte auswählen, variable, interne... mal alles ansehen!
mit dem debugger kann man sein programm schrittweisse abarbeiten und in alle variable reinsehen.

mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 26-02-2009, 10:21   #5 (permalink)
Harry, Wagen!
 
Benutzerbild von uncle.sam
 
Registriert seit: Jan 2006
Beiträge: 574
Also, hier wird geladen, und in das Array gepusht:
PHP-Code:
for (var i:int=0i<anzItemsi++) 
{
    var 
contentHolder:Loader = new Loader();
    var 
url:URLRequest = new URLRequest("content"+(i+1)+".swf");
    
contentHolder.load(url);
    
swfArray.push(contentHolder);

hier wird per taste aufgerufen:
PHP-Code:
function keyUp():void
{
    
    if(!
isTurning)
    {
        
removeChild(toolTip);
        
        
removeEventListener(Event.ENTER_FRAMEsize);
        
stage.removeEventListener(KeyboardEvent.KEY_DOWNstatusKeyDown);//damit schalte ich die tasten im hauptfilm ab
    
        
for(var i:int=0i<anzItemsi++)
        {
            if(
currentIcon==i)
            {
                
Tweener.addTween(myIcons[currentIcon].back, {alpha:1time:1});
                
myIcons[currentIcon].front.visible=false;            
            }
            else
            {
                
myIcons[i].visible=false;
            };
        
        };
        
        
Tweener.addTween(myIcons[currentIcon], {rotationY:180,
                                            
scaleX:1,
                                            
scaleY:1,
                                            
time:1,
                                            
onComplete:function(){isTurning=true;
                                            
addChild(swfArray[currentIcon]);},//hier wird die swf geadded
                                            
transition:"easeOutStrong"});
        
isTurning false;
    };
}; 
und diese funktion im Hauptfilm wird dann über das geladene (sichtbare) swf aufgerufen:
PHP-Code:
function keyReturn(e:Event):void
{
        
stage.addEventListener(KeyboardEvent.KEY_DOWNstatusKeyDown);//hier aktiviere ich wieder die tasten für den hauptfilm
        
removeChild(swfArray[currentIcon]);//hier entferne ich den swf 
        
addEventListener(Event.ENTER_FRAMEsize);
        
addChild(toolTip);
        
        for(var 
i:int=0i<anzItemsi++)
        {
            if(
currentIcon==i)
            {
                
Tweener.addTween(myIcons[currentIcon].back, {alpha:0time:0.3});
                
myIcons[currentIcon].front.visible=true;            
            }
            else
            {
                
myIcons[i].visible=true;
            };
        
        };
    
        
Tweener.addTween(myIcons[currentIcon], {rotationY:-180,
                                            
scaleX:maxSize,
                                            
scaleY:maxSize,
                                            
time:1,
                                            
onComplete:function(){isTurning=true;},
                                            
transition:"easeOutStrong"});
        
isTurning false;
    
}; 
ich weiss wirklich nicht woran das liegen kann, dass sich die swfs übereinander stapeln.
vielen dank,
__________________
- uncle.sam -
uncle.sam ist offline   Mit Zitat antworten
Alt 26-02-2009, 12:50   #6 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.109
sorry, aus den scriptteilen alleine kann ich keinen fehler sehen. also da ist nichts, was man direkt als falsch bezeichnen könnte.

probiere halt mal mit dem debugger deinen programmablauf zu verfolgen.
__________________
die ultimative antwort auf alle programmierfragen: der debugger!
- vor eine programmzeile klicken (==roter punkt)
- im menü "debuggen" aufrufen
- auf den grünen pfeil klicken
- im swf etwas machen (der programmablauf hält beim roten punkt)
- links die objekte auswählen, variable, interne... mal alles ansehen!
mit dem debugger kann man sein programm schrittweisse abarbeiten und in alle variable reinsehen.

mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 26-02-2009, 13:26   #7 (permalink)
Harry, Wagen!
 
Benutzerbild von uncle.sam
 
Registriert seit: Jan 2006
Beiträge: 574
gibt es vielleicht die möglichkeit den geladenen swf zu deaktivieren, also auf "enable" zu setzen, wie es im AS2 der Fall war?

dann könnte ich dieses Problem nämlich anders lösen, indem ich alle gleich beim ladevorgang adde und dann bei tastenaufruf aktiviere.

lg
__________________
- uncle.sam -
uncle.sam ist offline   Mit Zitat antworten
Alt 26-02-2009, 16:44   #8 (permalink)
Harry, Wagen!
 
Benutzerbild von uncle.sam
 
Registriert seit: Jan 2006
Beiträge: 574
hat niemand einen Vorschlag, was der Fehler sein könnte?
Ich verzweifele gerade!!
ich adde den swf und remove diesen wieder.
und dennoch lagern diese übereinander? (also immer dieselben)
__________________
- uncle.sam -
uncle.sam ist offline   Mit Zitat antworten
Alt 26-02-2009, 17:12   #9 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.109
dann läds du das selbe mehrfach?

ändere dein programm so, das die swf's nacheinander geladen werden. also das nächste laden erst starten, wenn das eine fertig geladen ist.
__________________
die ultimative antwort auf alle programmierfragen: der debugger!
- vor eine programmzeile klicken (==roter punkt)
- im menü "debuggen" aufrufen
- auf den grünen pfeil klicken
- im swf etwas machen (der programmablauf hält beim roten punkt)
- links die objekte auswählen, variable, interne... mal alles ansehen!
mit dem debugger kann man sein programm schrittweisse abarbeiten und in alle variable reinsehen.

mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 26-02-2009, 17:31   #10 (permalink)
Harry, Wagen!
 
Benutzerbild von uncle.sam
 
Registriert seit: Jan 2006
Beiträge: 574
ich habe doch nur einen ladevorgang?

wenn ich das removeChild weglasse, dann added die funktion nicht mehrfach.
(das remove funktioniert meiner Meinung nach nur visuell, denn im Hintergrund ist das swf immer noch da, dass sehe ich aus den traces).
__________________
- uncle.sam -
uncle.sam ist offline   Mit Zitat antworten
Alt 27-02-2009, 09:41   #11 (permalink)
lebt in stereo
 
Benutzerbild von figure8
 
Registriert seit: Mar 2008
Ort: karlsruhe
Beiträge: 1.093
die externe swf erst stoppen, dann removen - wäre meine idee
__________________
* Flash-JunkieMusiker & Grafiker

# Marvin Blase
# Speaker, Author, Silly Billy.
# @beautifycode
figure8 ist offline   Mit Zitat antworten
Alt 28-02-2009, 02:55   #12 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.109
Zitat:
Zitat von uncle.sam Beitrag anzeigen
ich habe doch nur einen ladevorgang?
for (var i:int=0; i<anzItems; i++)
in dieser schleife startest du gleichzeitig anzItems lade vorgänge.
läd das wirklich z.b. 20 unterschiedliche swf's oder 20x das selbe?

welches swf siehst du den mehrfach? das zuletzt geladene?


hier solltest du eins nach dem anderen laden, das meinte ich.
__________________
die ultimative antwort auf alle programmierfragen: der debugger!
- vor eine programmzeile klicken (==roter punkt)
- im menü "debuggen" aufrufen
- auf den grünen pfeil klicken
- im swf etwas machen (der programmablauf hält beim roten punkt)
- links die objekte auswählen, variable, interne... mal alles ansehen!
mit dem debugger kann man sein programm schrittweisse abarbeiten und in alle variable reinsehen.

mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 28-02-2009, 16:01   #13 (permalink)
Harry, Wagen!
 
Benutzerbild von uncle.sam
 
Registriert seit: Jan 2006
Beiträge: 574
hallo, vielen dank für eure antworten.

das problem lag einfach darin, dass in den geladenen swfs ebenfalls objekte geadded werden, und diese eben nicht removed wurden, und so jedesmal bei erneutem aufruf diese dann wieder und wieder geadded wurden.

somit lag der fehler nicht in dem code, welchen ich hier gepostet habe, sondern in den eigentlichen geladenen swfs selbst.

@hgseib: in anzItems werden nur die 5 verschiedenen swfs geladen, was ich mittels aufruf ja auch sehen kann. (wie kann ich diese einzeln nacheinander laden? mit ladevorgängen für jeden swf einzeln, ohne schleife, meinst du?).

lg,
__________________
- uncle.sam -
uncle.sam ist offline   Mit Zitat antworten
Alt 28-02-2009, 23:45   #14 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.109
z.b.
und im onComplete das nächste laden starten.

.. aber wenn es jetzt geht, dann get's ja.
__________________
die ultimative antwort auf alle programmierfragen: der debugger!
- vor eine programmzeile klicken (==roter punkt)
- im menü "debuggen" aufrufen
- auf den grünen pfeil klicken
- im swf etwas machen (der programmablauf hält beim roten punkt)
- links die objekte auswählen, variable, interne... mal alles ansehen!
mit dem debugger kann man sein programm schrittweisse abarbeiten und in alle variable reinsehen.

mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Antwort

Lesezeichen

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



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

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


Copyright ©1999 – 2012 Marc Thiele