PDA

Volledige versie bekijken : AS2 reference issue tussen class en movieclip


sfsd
%Europe/Berlin %849 %2005, 21:23
Hallo, kan iemand mij helpen met het volgende probleem.
Ik heb een class gemaakt met een stel methodes.
1 ervan heet buildItems(param1,param2,param3);

Nou kan ik die binnen de class aanroepen met this.buildItems(a,b,c);

Maar ergens maak ik een stell mc's aan die na een onPress deze methode moeten aanroepen,
dus zoiets:

mc.onPress=function() {
//do de buildItems functie met de parameters uit de movieclip;
}

- dit lukt me dus niet, als ik type this.buildItems dan verwijst het niet naar de klasse.
- this._parent of this._parent._parent etc. refereert telkens naar movieclips en niet naar de klasse
- De optie van directe referentie ( mc.onPress=this.buildItems) is geen goede optie omdat ik de paramaters uit de mc nodig heb

Dus in het kort: hoe refereer ik naar een klasse-methode vanuit een event-handler van een movieclip in die klasse?

Is dat uberhaupt mogelijk? Of is er iemand die hier een workaround voor kan bedenken?

Alvast bedankt!

Simon

Dauntless
%Europe/Berlin %854 %2005, 21:29
Wel, je moet dan een instance aanmaken van je class.
Bv:
mc.onPress=function() {
var myClass:MyClass = new MyClass();
myClass.buildItems();
}
Waarbij MyClass de naam is van je classe.

Als je de method static maakt (static function buildItems(param1, param2, param3) kan je hem zo aanspreken:
mc.onPress=function() {
MyClass.buildItems();
}
Maar let er dan wel op dat je geen instance properties kan benaderen.

sfsd
%Europe/Berlin %874 %2005, 21:59
Bedankt voor je uitleg,
Alleen vrees ik dat het in dit project niet werkt,
Als ik een new classobject aanmaak dan roept ie natuurlijk de constructor ook weer aan etc, dat resulteert in dit geval in een nieuwe movieclip die op het scherm gezet wordt [het is een verkenner-menu als de window-verkenner zeg maar].

Dat met dat static had ik ook geprobeerd maar ik begrijp het niet helemaal, de letterlijke functie is:

function buildItems(parent:MovieClip,itemArray:Array,active node):Void {
for (var i in parent) {
if (typeof(parent[i])=="movieclip") parent[i].removeMovieClip();
delete parent[i];
}
var tempArray:Array=new Array();
for (var i=0;i<itemArray.length;i++) {
if (itemArray[i]!=activenode) itemArray[i].active=false;
if (itemArray[i].level==0) tempArray.push(itemArray[i]);
}
this.navx=10;
this.navy=10;
this.xinc=10;
this.yinc=12;
expandItems(parent,tempArray);
this.navigator.setMask(this.mask);
_root.traceIt("navW: "+this.navigator._width+", navH: "+this.navigator._height);
};
Als ik daar static voorzet dan krijg ik een lijstje errors, ik zal ze erbij plakken:

**Error** D:\WWW\Ruiter_Risikobeheer\Verkenner.as: Line 79: 'this' is not accessible from this scope.
this.navx=10;

**Error** D:\WWW\Ruiter_Risikobeheer\Verkenner.as: Line 80: 'this' is not accessible from this scope.
this.navy=10;

**Error** D:\WWW\Ruiter_Risikobeheer\Verkenner.as: Line 81: 'this' is not accessible from this scope.
this.xinc=10;

**Error** D:\WWW\Ruiter_Risikobeheer\Verkenner.as: Line 82: 'this' is not accessible from this scope.
this.yinc=12;

**Error** D:\WWW\Ruiter_Risikobeheer\Verkenner.as: Line 83: Instance variables cannot be accessed in static functions.
expandItems(parent,tempArray);

**Error** D:\WWW\Ruiter_Risikobeheer\Verkenner.as: Line 84: 'this' is not accessible from this scope.
this.navigator.setMask(this.mask);

**Error** D:\WWW\Ruiter_Risikobeheer\Verkenner.as: Line 85: 'this' is not accessible from this scope.
_root.traceIt("navW: "+this.navigator._width+", navH: "+this.navigator._height);

Is dit probleem opgelost misschien als ik alle variabele van de klasse als parameter meepass? Bedoel je dat met inaccesible instance-properties?

Dauntless
%Europe/Berlin %894 %2005, 22:27
Die fouten krijg je omdat je (zoals ik eerder zei) geen instance properties kunt benaderen vanuit een static method. (Alleen class properties).

Maar je hebt dan toch al ergens een instance aangemaakt van je class? Kan je daar niet gewoon terug de buildItems method van aanroepen ?

sfsd
%Europe/Berlin %919 %2005, 23:04
Hey, in ieder geval bedankt, ik heb het maar helemaal omgegooid, zonder klasses etc. Ik moet er nog maar eens op studeren.