Zurück   Flashforum > Flash > ActionScript > Softwarearchitektur und Entwurfsmuster

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 06-02-2006, 09:19   #1 (permalink)
Flash-Lehrling
 
Benutzerbild von mc_hammer
 
Registriert seit: Apr 2004
Ort: Lenzburg, Schweiz
Beiträge: 303
OOP-designfrage

hallo!

ich dachte, es gab mal ein OOP-bereich, hab ihn aber nicht mehr gefunden, deshalb poste ich hier.

nun, meine klasse 'Puzzle' sieht etwa wie folgt aus:

PHP-Code:
class Puzzle {

private var 
row:Number//anzahl reihen
    
private var column:Number//anzahl spalten
    
    
public function Puzzle (row:Number,column:Number) {
        
//Konstruktor: reihen/spalten setzen
        
[...]
        
makeTiles();
    }
    
    public function 
makeTiles ():Void {
        var 
bildNum:Number;
        var 
tileWidth:Number;
        var 
tileHeight:Number;
        var 
x:Number;
        var 
y:Number;
        for (var 
i:Number 1i<=rowi++) {
            for (var 
j:Number 1j<=columnj++) {
                
bildNum column*(i-1) + j;
                var 
holder_mc:MovieClip _root.createEmptyMovieClip("holder"+bildNumbildNum);

                [...]
                
                
holder_mc.onPress = function() {
                    
_root.puzzle_obj.startDragging(this);
                };

                [...]

            }
        }
    }

public function 
startDragging (target_mc:MovieClip):Void {
        var 
offset:Number _xmouse target_mc._x;
        
target_mc.onEnterFrame = function () {

            [...]

        } ;
        
    }

die klasse instanziere ich auf rootlevel mit:
var puzzle_obj:Puzzle = new Puzzle();

so! was mir nun gar nicht gefällt: in der methode 'makeTiles()' wird das bild zerschnitten, und jedem teil wird dann eine funktion für den mouse-event mitangehängt:

PHP-Code:
holder_mc.onPress = function() {
                    
_root.puzzle_obj.startDragging(this);
                }; 
was mich hier stört, dass ich '_root.puzzle_obj.' aufrufen muss, um die methode 'startDragging', die sich ja auch in der selben klasse befindet, ansprechen zu können. wenn ich ja auf rootlevel den variablennamen 'puzzle_obj' einmal ändern sollte, würde die klasse nicht mehr funktionieren. wie könnte man das eleganter lösen?

grüsse
oliver
mc_hammer ist offline   Mit Zitat antworten
Alt 06-02-2006, 09:33   #2 (permalink)
Definitionssache
 
Benutzerbild von dburucu
 
Registriert seit: Apr 2003
Ort: Braunschweig
Beiträge: 2.432
wenn du "_root.puzzle_obj" durch "this" ersetzt, sollte es gehen.
dburucu ist offline   Mit Zitat antworten
Alt 06-02-2006, 09:39   #3 (permalink)
Flash-Lehrling
 
Benutzerbild von mc_hammer
 
Registriert seit: Apr 2004
Ort: Lenzburg, Schweiz
Beiträge: 303
nein, leider nicht. 'this' wäre dann die blosse referenz auf 'holder_mc'...

grüsse
oliver
mc_hammer ist offline   Mit Zitat antworten
Alt 06-02-2006, 09:44   #4 (permalink)
Definitionssache
 
Benutzerbild von dburucu
 
Registriert seit: Apr 2003
Ort: Braunschweig
Beiträge: 2.432
ah ja stimmt. Dann sollte doch "_parent" richtig sein, oder?

oder : this._parent

Geändert von dburucu (06-02-2006 um 09:45 Uhr)
dburucu ist offline   Mit Zitat antworten
Alt 06-02-2006, 09:52   #5 (permalink)
Flash-Lehrling
 
Benutzerbild von mc_hammer
 
Registriert seit: Apr 2004
Ort: Lenzburg, Schweiz
Beiträge: 303
nein, das geht auch nicht. was ich eben nun probiert habe:

PHP-Code:
[...]

holder_mc.obj_ref this;
holder_mc.onPress = function() {
    
this.swapDepths(1000);
    
obj_ref.startDragging(this);
    
//_root.puzzle_obj.startDragging(this);
};

[...] 
das gibt mir aber einen compile-error. obj_ref kennt er dann innerhalb der funktion trotzdem nicht. irgendwie muss ich doch der funktion eine referenz auf _root.puzzle_obj mitgeben können?!?

grüsse
oliver
mc_hammer ist offline   Mit Zitat antworten
Alt 06-02-2006, 10:01   #6 (permalink)
Flash-Lehrling
 
Benutzerbild von mc_hammer
 
Registriert seit: Apr 2004
Ort: Lenzburg, Schweiz
Beiträge: 303
jetzt hab ich's:

PHP-Code:
holder_mc.obj_ref this;
holder_mc.onPress = function() {
    
this.swapDepths(1000);
    
this.obj_ref.startDragging(this);
}; 
ich weiss ja nicht, ob das sonderlich elegant ist, aber immerhin kann ich nun den variablennamen 'puzzle_obj' ausserhalb der klasse beliebig ändern, und es funktioniert so.

grüsse
oliver
mc_hammer 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 19:44 Uhr.

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


Copyright ©1999 – 2014 Marc Thiele