Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 03-09-2008, 18:47   #1 (permalink)
Neuer User
 
Benutzerbild von Seb123
 
Registriert seit: Aug 2008
Beiträge: 9
[AS3] Überprüfung ob MC auf der Stage vorhanden ist

Ich steh mal wieder auf dem Schlauch...

Ich möchte nachprüfen, ob ein MC auf der Stage vorhanden ist, da mir removeChild() sonst das Script unterbricht, wenn der MC nicht vorhanden ist.

Den MC erstelle ich auf diese Weise:

Code:
	var myMC:MovieClip				=	new MovieClip();
	this.addChild( myMC ).name		=	"myNewMC";
Und ich dachte, ich kann das mit contains() herraus finden, etwa so:

Code:
	trace( MovieClip( root ).contains( "myNewMC" ) );
Weiss jemand Rat?
Seb123 ist offline   Mit Zitat antworten
Alt 03-09-2008, 18:58   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
DisplayObjectContainer:

public function contains(child: DisplayObject):Boolean

in AS3 verzichtet man auf die benützung von namen. ist einfach zu langsam und namen können doppelt vorhanden sein.


wenn du tatsächlich nur den namen kennst und nicht weisst ob du das dazu passende objekt auf der bühne hast, dann
via getChildIndex und getChildAt bzw. einer for each schleife alle objekte ermitteln und prüfen, wer alles diesen namen hat.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (03-09-2008 um 19:04 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 03-09-2008, 19:00   #3 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Nimm "getChildByName"!
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 03-09-2008, 19:25   #4 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
ActionScript:
  1. // ActionScript file
  2. import flash.display.Sprite;
  3. import flash.events.Event;
  4.  
  5. var _sprite:Sprite = new Sprite();
  6. var _spriteIsAdded:Boolean = false;
  7. this._sprite.addEventListener(Event.ADDED_TO_STAGE, eventListener);
  8.  
  9. function eventListener(event:Event):void {
  10.     switch(event.type) {
  11.         case Event.ADDED_TO_STAGE:
  12.             this._sprite.addEventListener(Event.REMOVED_FROM_STAGE, eventListener);
  13.             this._sprite.removeEventListener(Event.ADDED_TO_STAGE, eventListener);
  14.             this._spriteIsAdded = true;
  15.             break;
  16.         case Event.REMOVED_FROM_STAGE:
  17.             this._sprite.addEventListener(Event.ADDED_TO_STAGE, eventListener);
  18.             this._sprite.removeEventListener(Event.REMOVED_FROM_STAGE, eventListener);
  19.             this._spriteIsAdded = false;
  20.             break;
  21.     }
  22. }
So könnte es noch eine Zacken schneller gehen...
Omega Psi ist offline   Mit Zitat antworten
Alt 03-09-2008, 19:28   #5 (permalink)
Neuer User
 
Benutzerbild von Seb123
 
Registriert seit: Aug 2008
Beiträge: 9
Wenn ich getChildByName nehme und der MC nicht auf der Bühne ist, sagt er mir, dass das Attribut child nicht null sein darf. An eine Überprüfung á la

Code:
if ( getChildByName( "myNewMC" ) == undefined ) {}
habe ich auch schon gedacht.

Eine Schleife über die Ids wäre natürlich eine Lösung. Das probiere ich mal aus, es sei denn, es kennt jemand noch eine einfachere Lösung.

Edith: @omega Wäre natürlich auch eine Möglichkeit, dann müsste ich aber für jeden MC ein eigenes Event mit den passenden Funktionen absetzen, was umfangreich wird, da es eine Menge MCs sind (zwischen 5 und 10). Da gefällt mir die Möglichkeit mit der Schleife in einer kleinen Funktion schon besser.

Geändert von Seb123 (03-09-2008 um 19:31 Uhr)
Seb123 ist offline   Mit Zitat antworten
Alt 03-09-2008, 19:52   #6 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
die 'richtige' antwort wäre: lass das mit den namen!
verwalte die zeiger der objekte.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 03-09-2008, 20:06   #7 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
ActionScript:
  1. // ActionScript file
  2. import flash.display.Sprite;
  3. import flash.events.Event;
  4. import flash.utils.Dictionary;
  5.  
  6. var _spritesArray:Array = new Array();
  7. // Hier Sprite Referenzen in das Array schreiben.
  8. var _spritesMap:Dictionary = new Dictionary();
  9. var sprite:Sprite;
  10. for (var index:int = 0; index < this._spritesArray.length; index++) {
  11.     sprite = Sprite(this._spritesArray[index]);
  12.     sprite.addEventListener(Event.ADDED_TO_STAGE, eventListener);
  13.     this._spritesMap[sprite] = false;
  14. }
  15.  
  16. function eventListener(event:Event):void {
  17.     var displayObject:DisplayObect = DisplayObject(event.target);
  18.     switch(event.type) {
  19.         case Event.ADDED_TO_STAGE:
  20.             displayObject.addEventListener(Event.REMOVED_FROM_STAGE, eventListener);
  21.             displayObject.removeEventListener(Event.ADDED_TO_STAGE, eventListener);
  22.             this._spritesMap[displayObject] = true;
  23.             break;
  24.         case Event.REMOVED_FROM_STAGE:
  25.             displayObject.addEventListener(Event.ADDED_TO_STAGE, eventListener);
  26.             displayObject.removeEventListener(Event.REMOVED_FROM_STAGE, eventListener);
  27.             this._spritesMap[displayObject] = false;
  28.             break;
  29.     }
  30. }

Geändert von Omega Psi (03-09-2008 um 20:08 Uhr)
Omega Psi 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 16:11 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele