Avatar billede Slettet bruger
21. december 2006 - 18:10 Der er 16 kommentarer og
1 løsning

this._name fra klasseinstans?

Hej eksperter!

Hvad gør jeg for at få navnet på en klasseinstans retuneret?
Skal bruge det til at oprette mc'er fra hver instans - noget i denne stil:
_root.attachMovie("etellerandet", "mc_"+this.name, _root.getNextHighestDepth());
Avatar billede mat Nybegynder
21. december 2006 - 18:25 #1
Medmindre du har nedarvet fra en klasse med en form for name attribut, så skal du selv lave den.

mvh mat
Avatar billede Slettet bruger
22. december 2006 - 14:05 #2
Okaj, her kommer et eksempel:


--- MyClass.as ---
class MyClass {
    public function MyClass() {
        trace(this.name);
        trace(this.instanceof);
    }
}

--- TEST.fla ---
MyInstance = new MyClass();

--- Output ---
MyInstance
MyClass


Er dette korrekt? Det er det jeg vil vide.
Avatar billede mat Nybegynder
22. december 2006 - 14:07 #3
Du kan da prøve ;)

Jeg vil tro at den giver;

undefined
Object

mvh mat
Avatar billede mat Nybegynder
22. december 2006 - 14:26 #4
Eller rettere får du nok en syntaksfejl da din brug af instanceof er forkert :)

Men pointen er at din klasse ikke har en "name", medmindre du selv giver den en sådan. Og at spørge hvad den er for en type vil formentlig give dig "object".

Det du leder efter kaldes "reflektion" og understøttes så vidt jeg ved ikke af AS 2, men du kan kigge her; http://www.simonwacker.com/blog/archives/000092.php

mvh mat
Avatar billede Slettet bruger
22. december 2006 - 17:34 #5
Det forstår jeg så bare absolut intet af. SKal man da inkludere noget i Flash og hvorfor dog?! Og Flash har da et seriøst handicap hvis ikke det jeg søger findes!
Avatar billede mat Nybegynder
22. december 2006 - 20:00 #6
Du kunne prøve at skitsere dit problem, og så kan det da være man kan finde en løsning?
Avatar billede Slettet bruger
23. december 2006 - 07:44 #7
Okaj.
Her kommer er resume af hele produktionen:

Jeg vil lave et computerspil udelukkende i Flash. Det skal være set oppefra, og man skal styre en karakter gennem forskellige baner. De personer, dyr og objekter karakteren møder, skal være dynamisk bygget op - ud fra skabeloner.
Altså: Jeg har en klasse, TEMPLATE. Af denne oprettes dynamisk under spillet forskellige instanser. Hver instans af TEMPLATE har en række egenskaber for den type af objekter den  ræpræsenterer. Desuden har den en funktion, der opretter en MC i et MC der vælges via en parameter. Det nyoprettede MC får så en onEnterFrame-funktion der er dynamisk genereret af Flash ud fra de egenskaber og den onEnterFrame instansen af TEMPLATE har. Her er en lille figur der viser strukturen:

class TEMPLATE => instance enInstans => movieClips

Men MC'erne skal også have en værdi der viser, hvilken instans af TEMPLATE der oprettede dem. Hvordan kan dette ellers gøres?
Avatar billede mat Nybegynder
23. december 2006 - 10:40 #8
Ved at du giver dine instanser et unikt ID hver.

Eksempelvis kan du have en static variabel i TEMPLATE der inkrementeres af constructoren, og tildeles instancet.
Eller du kan have et factory der står for at levere instances, der vedligeholder en id attribut og tildeler instancerne dem.

Uanset er der altid ét instance knyttet til ét id.

mvh mat
Avatar billede Slettet bruger
23. december 2006 - 11:30 #9
Øh... eksempel, tak :)
Avatar billede mat Nybegynder
23. december 2006 - 12:08 #10
class TEMPLATE {

private static var ID:Number = 0;
private var instance_id:Number;

public function TEMPLATE () {
TEMPLATE.ID += 1;
instance_id = TEMPLATE.ID;
}

public function getID():Number {
return instance_id;
}

}

mvh mat
Avatar billede Slettet bruger
24. december 2006 - 09:19 #11
Okaj, det var en mulighed. Men hvad betyder static så? At variablen ID kun kan ændres af constructoren?
Bare smid et svar :)
Avatar billede mat Nybegynder
24. december 2006 - 12:24 #12
statiske variabler er klasse variabler, og er "fælles ejendom" så at sige, hvor ikke-statiske alene er knyttet til de enkelte instanser. Du kender formentlig selv statiske metoder, eksempelvis fra Math klassen i flash, hvor du aldrig laver et Math objekt men kalder metoderne på klassen istedet.

mvh mat
Avatar billede Slettet bruger
24. december 2006 - 17:47 #13
Okaj, er ikke heeelt sikker på, jeg fatter det, men er da godt nok med nu :)
Takker!
Avatar billede Slettet bruger
24. december 2006 - 17:48 #14
Hov, vil det sige, at når den kaldes, skal man simpelt hen skrive KLASSENS_NAVN.METODE() og ikke INSTANS_NAVN.METODE()???
Avatar billede Slettet bruger
24. december 2006 - 23:28 #15
God jul!
Avatar billede mat Nybegynder
25. december 2006 - 11:17 #16
Det er nemli rigtigt :)
Avatar billede Slettet bruger
25. december 2006 - 12:05 #17
Dejligt! Takker igen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester