Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 22-12-2011, 19:08   #1 (permalink)
es lebe die Luft
 
Registriert seit: Nov 2010
Ort: this.stage
Beiträge: 91
DisplayObject in Array wieder loswerden?

Guten Tag.

Ich habe eine eigene Klasse geschrieben. In dieser wird ein Bild geladen, in die Bühne geaddet und die y-Koordinate des Bildes verringert sich immer um 7.

Da ich die einzelnen Bilder später ansprechen möchte, werden sie alle in ein Array gepusht:
PHP-Code:
    for (var i:int 0<= maxxi++)
    {
        
mk = new MeineKlasse();
        
Ary.push(mk);
        
addChild(Ary[i]);
    } 
Da dadurch viele Objekte entstehen, und sie nach einer gewissen Zeit sowieso nicht mehr zu sehen sind, würde ich sie gerne entfernen.
Es klappt weder Ary = new Array(); (hat keinen Effekt) noch removeChild(Ary[i]) (ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller).

Gibt es da noch eine Möglichkeit?
Das ganze ist eine AIR for iOS-Anwendung.

MfG,
AIR-Fan
AIR-Fan ist offline   Mit Zitat antworten
Alt 22-12-2011, 19:29   #2 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Erst mal das Übliche : Variablen klein schreiben, deklarieren, typisieren und dynamische Zugriffe vermeiden...
ActionScript:
  1. import flash.display.DisplayObject;
  2.  
  3. var ary:Array;
  4. var mk:DisplayObject;
  5.  
  6. for (var i:int = 0; i <= maxx; i++) {
  7.     mk = new MeineKlasse();
  8.     ary.push(mk);
  9.     addChild(mk);
  10. }
Und zum Löschen aus Array und DisplayList kannst Du dann diese Funktion verwenden:
ActionScript:
  1. import flash.display.DisplayObject;
  2.  
  3. function removeFromArrayAndDisplayList(i:uint, a:Array):DisplayObject {
  4.     var dob:DisplayObject = a[i] as DisplayObject;
  5.     if (dob) {
  6.         if (dob.parent) dob.parent.removeChild(dob);
  7.         a.splice(i, 1);
  8.     }
  9.     return dob;
  10. }
  11.  
  12. removeFromArrayAndDisplayList(ary, 0);
__________________
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!

Geändert von Martin Kraft (22-12-2011 um 19:31 Uhr)
Martin Kraft ist offline   Mit Zitat antworten
Alt 27-12-2011, 17:58   #3 (permalink)
es lebe die Luft
 
Registriert seit: Nov 2010
Ort: this.stage
Beiträge: 91
Tja, danke, allerdings wüsste ich dann gerne, wieso das hier nicht funktioniert:

PHP-Code:
for(var i:int 0i<maxx;i++)
{
    
ary[i].parent.removeChild(ary[i]);                               // Zeile 97
    
ary.splice(i1);

Es kommt:
Code:
TypeError: Error #1010: A term is undefined and has no properties.
	at Function/<anonymous>()[***_fla.MainTimeline::frame2:97]
Probiere ich es ohne Array.splice(), geht es zwar, allerdings wird das Objekt dann ja vom Array nicht enfernt:
PHP-Code:
for(var i:int 0i<maxx;i++)
{
    
ary[i].parent.removeChild(ary[i]);
}
// Funktioniert 
Das sog. "Übliche" hatte ich in der *.fla sogar richtig, nur hier nicht, da ich die Variablennamen umgeändert hatte, da sie sonst zu uneindeutig gewesen wären.

MfG,
AIR-Fan

Geändert von AIR-Fan (27-12-2011 um 17:59 Uhr)
AIR-Fan ist offline   Mit Zitat antworten
Alt 27-12-2011, 22:20   #4 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
// for(var i:int = 0; i<maxx;i++)
for(var i:int = maxx-1; i>=0; i--)

beim löschen musst du rückwärts zählen, weil spätestens nach dem ersten löschvorgang ist maxx nicht mehr vorhanden.

// grundsätzlich ist es auch nie ein fehler mal was zu testen. z.b.
if (i<ary.length && ary[i] && ary[i].parent) ary[i].parent.removeChild(ary[i]);
// ok, so ist es natürlich übertrieben (halt zum zeigen), aber nicht falsch.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (27-12-2011 um 22:27 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 27-12-2011, 22:29   #5 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Ich würde es so machen:
Code:
function removeChildren(array:Array):void
{
  if (!array || array.length == 0) return;

  for each(var d:DisplayObject in array)
  {
    if (d && d.parent) d.parent.removeChild(d);
  }

  array.length = 0;
}
Ist das gleiche in rot, nur etwas weniger abfragen, Zähler und so ...

Geändert von Omega Psi (27-12-2011 um 22:32 Uhr)
Omega Psi ist offline   Mit Zitat antworten
Alt 29-12-2011, 11:03   #6 (permalink)
Neuer User
 
Registriert seit: Jul 2005
Beiträge: 44
oder

PHP-Code:
function removeChildren(array:Array):void {
  while(array && array.
length) {
    var 
d:* = array.pop();
    if (
d is DisplayObject && d.parentd.parent.removeChild(d);
  }

_malte 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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Array elemente dragndrop, dann wieder array updaten? mathiregister ActionScript 3 7 12-01-2010 13:25
bitmap objekte wieder loswerden woddel ActionScript 2 11 07-09-2009 19:25
nachgeladenen AVM1 Movie wieder loswerden? edding950 ActionScript 3 6 30-08-2007 18:28
onEnterFrame function wieder loswerden. echo5-7 ActionScript 1 2 01-07-2004 15:08
duplizierte welle wieder loswerden ?? helfen celcius ActionScript 1 2 08-08-2001 15:46


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:23 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele