PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ActionScript Architektur


pate33
21.09.2006, 14:26
Hi,

ich hab mein Programm soweit fertig und es funktioniert auch zum groessten Teil. Da ich allerdings anfangs noch keinen Plan von AS hatte ist das ganze Prog prozedual und der Quellcode ist nicht sonderlich aestetisch. :(

Nun moechte ich zum Beispiel alle Objekte (sind nicht sehr viele) auf der Stage ueber eine Klasse steuern. Hab gesehen dass das mit einem MovieClip/Symbol sehr gut geht, aber auch fuer das komplette Document?

Waere nett, wenn ihr mir ein paar Tipps zum Thema geben koenntet, was ich so beachten muss.

Danke


gencha
21.09.2006, 14:28
Im Grunde kannst du in ActionScript alles in Klassen packen. In Flash ist das aber nur begrenzt möglich. Die komplette Stage durch eine Klasse zu ersetzen geht soweit ich weiss nur in Flex.

pate33
21.09.2006, 14:33
hmm. Waere halt sinnvoll bei mir, da anhand eines Status verschiedene Elemente angezeigt werden. Dann braeuchte ich die nur in der Klasse zu aendern und einmal nen Screen-Refresh zu machen.

mnemonic
21.09.2006, 15:10
Voraussetzung für sowas ist, dass Du allen MovieClip Instanzen auf der Bühne auch einen Instanznamen verpasst hast, bzw. alles was Du steuern willst muss von AS ansprechbar sein.

Angenommen Du hast auf der Stage einen Button mit dem Namen "btn1", dann könntest Du eine Klasse implementieren, die die Koordination übernimmt.

Hier mal ein kleines fiktives Beispiel...

Fogender Code gehört in eine externe AS Datei:
class de.coding-board.heneise.StageManager {
private stage : MovieClip;

function StageManager(theStage : MovieClip) {
stage = theStage;
}

function showMyBtn1() {
stage.btn1._visible = true;
}
}

Dann schreibst Du ins erste Frame Deines Hauptmovies:
import de.coding-board.heneise.StageManager;

var sm : StageManager = new StageManager(this);

Dann kannst Du z.B. irgendwo anders im Movie folgendes tun:
sm.showMyBtn1();

Die einzige Grenze, die es bei der Aktion gibt ist Deine Phantasie.

pate33
21.09.2006, 15:36
hmmm ... ok, scheint soweit zu funktionieren, aber ich bekomm bei einem Button.setStyle (was vorher ohne Klassen funktioniert hat) einen Fehler:

this.btnBlue.setStyle("themeColor","haloBlue");

StageManager.as: Line 13: There is no method with the name 'setStyle'. this.btnBlue.setStyle("themeColor","haloBlue");

was hat es damit aufsich?

mnemonic
21.09.2006, 15:40
Kannst Du bitte mal den kompletten Code der Klasse posten?
So ohne Zusammenhang kann ich nichts sagen.

Hört sich aber so an als wär da was nicht korrekt deklariert.

pate33
21.09.2006, 15:42
das ist eigentlich alles. Mehr hab ich noch nicht Probiert.

class StageManager {
private var btnBlue:Button;
private var stage:MovieClip;

function StageManager(theStage : MovieClip) {
stage = theStage;
}

function initStage() {
this.btnBlue.setStyle("themeColor","haloBlue");
}
}

pate33
21.09.2006, 16:03
import mx.controls.Button;

:mauer:

mnemonic
21.09.2006, 16:07
:D

Komisch, dass er nicht schon bei der Deklaration gemeckert hat...
Aber das wäre auch der nächste Tip gewesen. ;)

pate33
21.09.2006, 16:10
Danke fuer die Hilfe. :)

pate33
21.09.2006, 16:14
hm, Button ist auf der Stage, Programm rennt, aber bei _visible bzw. visible (beides Ausprobiert) = false verschwindet der Button nicht. :(

setStyle() hat auch keine Auswirkungen auf den Button.

pate33
21.09.2006, 16:15
stage.* vergessen... :mauer:

Vielen Dank.

mnemonic
21.09.2006, 16:17
In 99% aller Fälle stimmt der Pfad dann nicht.

Teste mal:
function initStage() {
trace("der baddn: "+btnBlue);
this.btnBlue.setStyle("themeColor","haloBlue");
}

Das sollte Dir den Pfad zum Button ausgeben, wenn nicht, dann ist der Pfad nicht korrekt.

Edit:

Genau...

Das könntest Du aber vermeiden, indem Du direkt
this.btnBlue = stage.btnBlue;
zuweist.