Zurück   Flashforum > Flash > Flash Fortgeschritten > Flash 8

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 18-04-2011, 23:15   #1 (permalink)
Neuer User
 
Registriert seit: Apr 2011
Beiträge: 1
Class mit mehreren Movies

Hallo, ich war lange nicht mehr mit Flash unterwegs und habe eine Frage zu Klassen und darin enthaltenen MCs. Das Problem ist, dass ich es nicht sauber hinbekomme, dass
  1. die Klasse mit allen darin enthaltenen MCs mit "delete _root.grid;" sauber vom Bildschirm verschwinden
  2. ich es nicht hinbekomme dem MC "grid" in der Klasse Sub-MCs anzuhängen (ich kann sie nur via target=root dranhängen, so dass sie alle auf einer Ebene sind). Dass wiederstrebt aber meinem Ansatz einer sauberen OO Programmierung, ausserdem habe ich im Endeffekt mehrer hundert MCs die in einer Schleife mittels
    PHP-Code:

        
    function render(target:MovieClipconfig){
            for(var 
    i=0i<config.xresi++){
                for(var 
    j=0j<config.yresj++){
                    var 
    tmp target.createEmptyMovieClip("container"+i+j*1000depthCount++);
                    var 
    txt target.createTextField("mytext"+i+j*1000depthCount++, j*config.width+2+config.xStartGridi*config.height+8+config.yStartGrid2550);
                    var 
    myBitmapData:BitmapData = new BitmapData(1050false0x0);
                    
    tmp.attachBitmap(myBitmapDatadepthCount++);
                }
            }
        } 
    erstellt werden.

Hier meine Klasse (ich habe das meiste rausgeschmissen, damit es anschaulicher ist):

PHP-Code:
class Grid
    var 
bgPicLoadInterval;
    public var 
grid:MovieClip;
    public var 
backgroundMap:MovieClip;
    var 
config;
    
    function 
Grid(target:MovieClipconfig) {
        
this.config config;
        
this.grid target.createEmptyMovieClip("grid"levelGrid);
        
attacheBGPic(targetconfig);
        
render(targetconfig);

    }
    
    function 
attacheBGPic(target:MovieClipconfig){
        
this.backgroundMap = new MovieClip();
        
this.backgroundMap target.createEmptyMovieClip("backgroundMap"levelGridBackground);
        
this.backgroundMap.loadMovie(config.backgroundMap_src);    
        
this.bgPicLoadInterval setInterval(this"checkLoading"500);
    }
    
    
    public function 
checkLoading(){
        if (
this.backgroundMap.getBytesTotal() > 10 && this.backgroundMap.getBytesLoaded() >= this.backgroundMap.getBytesTotal()) {
            
clearInterval(this.bgPicLoadInterval);
            
trace(this.backgroundMap._width+','+this.backgroundMap._height);
            
this.backgroundMap._width config.backgroundMap_xScale;
            
this.backgroundMap._height config.backgroundMap_yScale;
            
this.backgroundMap._x config.backgroundMap_xStartGrid;
            
this.backgroundMap._y config.backgroundMap_yStartGrid;
        }
    }

    function 
render(target:MovieClipconfig){ /*siehe oben*/
Die Funktion checkLoading ist nur dafür, dass ich die Properties des BG-Bildes erst setzen kann, wenn das Ding geladen ist. Die Funktion render() ist die mit der Schleife.

So wie es oben ist, werden alle MCs angezeigt wenn ich die Klasse mit

PHP-Code:
_root.grid = new Grid(_root_root.config); 
aufrufe. Aber wenn ich die gleiche Klasse danach mit einer anderen _root.config aufrufe bleiben alle MCs auf der Bühne, auch wenn ich vorher "delete _root.grid" aufrufe. Ich habe auch schon versucht "dreckig" alle Objekte in einem Arry zu speichern und in einer Schleife zu löschen, da es wohl keinen Destructor in Flash gibt.

Was mache ich falsch? Es ist zu Haare ausreissen.... Hilfe
trimegis ist offline   Mit Zitat antworten
Alt 19-04-2011, 08:59   #2 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.163
Willkommen im FlashForum!


Zur Situation:

Grid erweitert ja in Deinem Fall kein Anzeigeobjekt und ist deshalb auch selbst keines. Die Instanzen der Klasse Grid können also nicht auf der Bühne dargestellt werden oder selbst irgendwelche UnterAnzeigeObjekte enthalten. Du hast dies "gelöst", in dem Du Grid ein Anzeigeobjekt als target übergibst (nämlich _root), welches diese Klasse dann verwaltet. Wie Du selbst bemerkt hast, ist das nicht sonderlich schick!


Lösungsansatz:

Besser wäre es aus Grid selbst ein Anzeigeobjekt zu machen. Dafür sollte diese Klasse eine Anzeigeklasse erweitern. Z.B.:
PHP-Code:
class Grid extends MovieClip {
//... 
Leider kann man die Instanzen einer solchen Anzeigeklasse in AS2 noch nicht einfach über den Konstruktor auf die Bühne holen (in AS3 geht das - schonmal über einen Umstieg nachgedacht?) sondern muss folgenden Umweg gehen:
  • Erstelle in der Bibliothek ein MovieClip-Symbol namens Grid.
  • Weise diesem unter Eigenschaften die Klasse Grid zu.
  • Erzeuge in AS mit der Faktory-Methode attachMovie eine Instanz:
    PHP-Code:
    _root.grid _root.attachMovie("Grid""grid"_root.getNextHighestDepth()); 
Jetzt liegt grid selbst als MovieClip auf der Bühne und kann dort transformiert oder eingeblendet werden und selbst Unterobjekte enthalten...
__________________
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 (19-04-2011 um 09:02 Uhr)
Martin Kraft ist gerade online   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
Custom class an andere class übergeben: Typenproblem hmpf ActionScript 3 3 19-12-2008 08:45
platzieren von mehreren flash movies im Browser... mit AS möglich? Chad Flash MX 5 07-11-2006 16:16
prob mit mehreren externen movies pistolenpete Flash MX 1 15-03-2005 16:48
Website aus mehreren Movies fransi Flash 4 und Flash 5 8 11-12-2002 11:12
Preload von mehreren movies Thandi Flash 4 und Flash 5 1 12-10-2001 10:43


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:31 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele