[AS3.0] private vars uit document class uitlezen

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • pepF
  • Registratie: Juli 2006
  • Laatst online: 12-08 22:35
Beste Tweakers,
Ik ben druk bezig met het programmeren in ActionScript 3, en loop tegen het volgende aan. Ik heb een document (Towerpuzzler.fla) en een document class, beschreven in Towerpuzzler.as. Nu heb ik in deze class ook enkele private vars gedefinieerd als zogeheten globale variabelen (score, level nr, towers_left etc.).
Ik heb binnen de class Towerpuzzler dan ook de functies om deze variabelen aan te roepen geschreven:
code:
1
2
3
4
5
6
7
8
public function get_towers_left() {
            return towers_left;
        }
        
        public function set_towers_left(new_towers_left:int) {
            towers_left = new_towers_left;
            
        }

Tot zover niets bijzonders, maar het begon te wringen toen ik probeerde deze functies aan te roepen. Ten eerste heb ik een constructor function, dus wordt een object van deze class "automatisch" gecreeerd bij het afspelen van de movie. Ik heb dus geen instance naam. Nu heb ik bovenaan de constructor even "Trace(this.name)" gezet, en kwam erachter dat deze instance gewoon root1 genoemd wordt. Nu dacht ik dus via root1.get_towers_left(); de private towers_left:int te bemachtigen, maar dat werkte dan weer niet.
Weet iemand hoe ik deze private variabelen dan kan bemachtigen? Ik heb overigens ook gewoon geprobeerd root1.towers_left te tracen, maar dat leverde ook niets op (Access of undefined property root1.)

Pepf's Blob


Acties:
  • 0 Henk 'm!

  • Puc van S.
  • Registratie: Maart 2002
  • Laatst online: 09:27
je kan toch gewoon de functienaam aanroepen? zonder root1 dus.

[http://www.okbreijnen.nl] [Overwatch] [Cennahysh]


Acties:
  • 0 Henk 'm!

  • Tsjilp
  • Registratie: November 2002
  • Niet online

Tsjilp

RS[I]ds

of this.towers_left, of stage.towers_left (stage is de instance van je baseclass).

Waarom gebruik je trouwens geen echte getter / setters?
Zoals dit:
Flash ActionScript:
1
2
3
4
5
6
7
8
private var _towers_left:int;
public function get towers_left():int {
    return this._towers_left;
}
        
public function set towers_left(value:int):void {
    this._towers_left = value;
}

[ Voor 64% gewijzigd door Tsjilp op 10-12-2008 16:52 ]

Raar... Is zo gek nog niet


Verwijderd

Als je maar 1 klasse hebt, waarom daar dan niet alles inzetten? Code voor een specifieke MovieClip die niets aanroept kun je in de MovieClip zelf zetten of in een AS-klasse (gewoon bij Eigenschappen van de MovieClip exporteren naar AS).

Je kan een object op de stage trouwens ook zelf een naam geven ipv af te gaan op namen die Flash eraan geeft. Lijkt me veel veiliger voor het geval Flash opeens de namen zou gaan aanpassen:
this.name = "naam";
of als je het object toevoegt aan de stage via AS:
jeVarNaamVoorJeObject.name = "naam";

  • Bozozo
  • Registratie: Januari 2005
  • Laatst online: 20-02 16:10

Bozozo

Your ad here?

Je kunt objecten niet met hun naam aanroepen. Dit kan wel:

code:
1
2
3
4
var tp = new Towerpuzzler();
stage.addChild(tp);

trace(tp.get_towers_left());


of

code:
1
2
3
4
5
6
7
8
var tp = new Towerpuzzler();
tp.name = "tp1";
stage.addChild(tp);

...

var tp1 = stage.getChildByName("tp1");
trace(tp1.get_towers_left());

TabCinema : NiftySplit


  • pepF
  • Registratie: Juli 2006
  • Laatst online: 12-08 22:35
M1lamb3r schreef op woensdag 10 december 2008 @ 15:55:
je kan toch gewoon de functienaam aanroepen? zonder root1 dus.
De code in TowerPuzzler.as staat binnen de class towerpuzzler, dus moet ik de functie aanroepen met "instancenaam".get_towers_left(); maar het probleem is dus min of meer dat ik niet weet wat er op : "instancenaam" moet komen te staan, omdat al mijn code binnen de constructor functie (public function TowerPuzzler():void) staat.
Tsjilp schreef op woensdag 10 december 2008 @ 16:50:
of this.towers_left, of stage.towers_left (stage is de instance van je baseclass).

Waarom gebruik je trouwens geen echte getter / setters?
Zoals dit:
Flash ActionScript:
1
2
3
4
5
6
7
8
private var _towers_left:int;
public function get towers_left():int {
    return this._towers_left;
}
        
public function set towers_left(value:int):void {
    this._towers_left = value;
}
Ik wist niet van het bestaan van getters/setters in flash, maar het is wel en uitvinding 8) Ik heb ze geimplementeerd, maar krijg nog steeds de foutmelding dat hij Towers_Left in root1 (nee ik heb de naam nogniet veranderd) niet kan vinden.

Als ik Bozozo goed begrijp, dan moet ik eerst een reference var creeren naar mijn instance (met de naam root1) via getChildbyName? Dit ga ik zsm proberen, en ik laat wel weten of het gelukt is :D

Pepf's Blob


  • Puc van S.
  • Registratie: Maart 2002
  • Laatst online: 09:27
PepijnFens schreef op donderdag 11 december 2008 @ 14:20:
[...]


De code in TowerPuzzler.as staat binnen de class towerpuzzler, dus moet ik de functie aanroepen met "instancenaam".get_towers_left(); maar het probleem is dus min of meer dat ik niet weet wat er op : "instancenaam" moet komen te staan, omdat al mijn code binnen de constructor functie (public function TowerPuzzler():void) staat.
nogmaals: (ik neem teminste aan dat de class towerpuzzler de document class is van de SWF die je uitvoer) je kan gewoon die functie (of nu de getter/setter) aanroepen met this.towers_left of zelfs gewoon towers_left

[http://www.okbreijnen.nl] [Overwatch] [Cennahysh]


  • pepF
  • Registratie: Juli 2006
  • Laatst online: 12-08 22:35
het kan idd met this, maar dat kan alleen bínnen de class, dus binnen mijn .as bestand. Nu heb ik een aantal movielclips gemaakt die waarden uít die class moeten vissen, zoals dus een movieclip, met een dynamisch tekstvak waarin dus de variabele towers_left moet komen... Dan zit ik niet meer binnen die document class, want functies aanroepen lukt in ieder geval niet, deze vind hij simpelweg niet...

Pepf's Blob


  • Puc van S.
  • Registratie: Maart 2002
  • Laatst online: 09:27
PepijnFens schreef op donderdag 11 december 2008 @ 15:52:
het kan idd met this, maar dat kan alleen bínnen de class, dus binnen mijn .as bestand. Nu heb ik een aantal movielclips gemaakt die waarden uít die class moeten vissen, zoals dus een movieclip, met een dynamisch tekstvak waarin dus de variabele towers_left moet komen... Dan zit ik niet meer binnen die document class, want functies aanroepen lukt in ieder geval niet, deze vind hij simpelweg niet...
In dat geval kan je 2 (of vast wel meer eigenlijk) dingen doen, aan die movieclips ook een documentclass hangen en de stage meegeven als parameter aan die movieclip, of navigeren dmv de parent fuctie

[http://www.okbreijnen.nl] [Overwatch] [Cennahysh]


Acties:
  • 0 Henk 'm!

  • Tsjilp
  • Registratie: November 2002
  • Niet online

Tsjilp

RS[I]ds

als die movieclips op de stage staan, kun je de functies uit je document class aanroepen met stage.functienaam(). De documentroot == stage namelijk. Kan zijn dat ie dat niet lief vindt, in dat geval spreek je variabelen aan met stage["variabelenaam"] en functies middels de apply / call functie.

Raar... Is zo gek nog niet

Pagina: 1