PDA

Volledige versie bekijken : functie aanroep wil niet...


c0redump
%Europe/Berlin %013 %2005, 00:19
ik ben bezig met een klein spelletje. Het speelveld is een class waarin een object van de class StatusWindow zit.

ik doe dus ongeveer het volgende:

//de eerste class...de parent...
class SpeelVeld extends MovieClip{
var veld:array;
var stats:StatusWindow;
...

function init(){
tekenVeld();
...
stats = this.attachMovie("statusWindow","stats",this.getNextHighestDepth()).init(3);
...

///dit gaat fout!!!
trace(stats.getTimeLeft());
}

//andere functies
...
}

//en hier de StatusWindow classe...
class StatusWindow extends MovieClip{
var time:Number;

function init(t:Number){
time = t;
}

function getTimeLeft(){
return time;
}
}

die functie 'getTimeLeft' geeft 'undefined' terug als ik m aanroep vanuit die class SpeelVeld.
Als ik dit:

stats = this.attachMovie("statusWindow","stats",this.getNextHighestDepth()).init(3);
trace(stats.getTimeLeft());

gewoon in een frame zet in de _root, werkt t wel...dan krijg ik netjes de tijd terug.

Misschien is het iets heel stoms, maar wat zie ik over t hoofd dat ik niet gewoon die functie kan aanroepen vanuit m'n SpeelVeld object???

c0redump
%Europe/Berlin %080 %2005, 01:56
Nou...het heeft wat moeite gekost, maar ik heb t weten te fixen...


//foute methode:
stats = attachMovie("statusWindow","stats",this.getNextHighestDepth());
trace(stats.getTimeLeft());

//goede methode:
attachMovie("statusWindow","stats",this.getNextHighestDepth());
stats = this["stats"]; //WAAROM??!!???
trace(stats.getTimeLeft());


Ik snap alleen niet waarom dit moet. En waarom werkt t wel op de eerste werkt manier als ik t niet met objecten doe maar gewoon imperatief op de tijdlijn???

ik ben al tegen meerdere van dit soort dingen aangelopen met flash...dat het via het OOP model net ff anders zit...gek wordt ik ervan :@

Roenes
%Europe/Berlin %580 %2005, 13:55
Volgens mij kwam het probleem door deze regel:var stats:StatusWindow;Je zegt daarin dat stats een StatusWindow moet zijn maar als je em attached dan stop je er een MovieClip in. als je van die regel eens dit maakt:var stats:MovieClipwerkt je originele code dan wel? Want dat zou dan wel moeten volgens mij :)

c0redump
%Europe/Berlin %068 %2005, 01:39
Had ik ook geprobeerd...was niet de Oplossing...
StatusWindow is een MovieClip overigens, want hij extend deze. Als dit niet zo kunnen zou er volgens mij ook meteen een type mismatch moeten verschijnen.

Maar de oplossing is daar zoals ik m heb neergezet.

Dit komt vaker voor met OOP en AS. Bijvoorbeeld als je gebruik maakt van setInterval. normaal zou je zoiets doen:

myInterval = setInterval(doSome,1000); //voer elke seconde doSome() uit...

Binnen een klasse werkt dit helaas niet...setInterval heeft geen idee waar ie de functie doSome kan vinden namelijk...beetje vaag natuurlijk, want waar anders zou die zitten dan binnen de klasse zelf als je verder nix aangeeft. Maar het volgende werkt wel:

myInterval = setInterval(this,"doSome",1000); //voer elke seconde doSome() uit...

ik denk dat dit hetzelfde is met mijn eerste probleem...het object weet gewoon niet waar te zoeken, vandaar this["stats"]...

Roenes
%Europe/Berlin %472 %2005, 11:20
Blijft een beetje raar, maar zolang het maar werkt he :)