AS3 public var? [Flash 9]
| Beiträge: 126 Wohnort: Berlin Registriert: Nov 2006
| 03.04.2008, 11:09
Hallo,
ich habe mehrere eine Hauptklasse zum initialisieren der Bühne und so weiter und bis jetzt zusätzlich eine Klasse für den Hintergrund und weitere Folgen fürs Interface usw. In diesen würde ich gern immer wieder bestimmte Variabeln, also zb Farben, verwenden.
Geht das mit public var oder müssten die anderen Klassen dazu von der Hauptklasse erben? Ich bekomme da immer den Fehler "Zugriff auf eine nicht definierte Eigenschaft".
| | | Beiträge: 126 Wohnort: Berlin Registriert: Nov 2006
Themenautor/in
| 03.04.2008, 11:28
Hmm,
hab jetzt mal was ausprobiert und es geht, frag mich nur ob man das so ohne weiteres darf? Vielleicht kann ja mal wer drauf schauen:
Hauptklasse:
ActionScript:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | package de.xyz {
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.MouseEvent;
import de.xyz.sp_graphics.*;
public class Screenproof extends Sprite {
public var mainColor:uint;
private var bg:SPBackground;
public function Screenproof() {
mainColor = 0xcccccc;
init();
}
private function init():void {
addBackground();
...
}
private function addBackground():void {
bg = new SPBackground(mainColor);
addChild(bg);
}
}
}
|
Background:
ActionScript:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | package de.xyz.sp_graphics {
import flash.display.Sprite;
import flash.display.GradientType;
import flash.display.SpreadMethod;
import flash.geom.Matrix;
public class SPBackground extends Sprite {
private var mainColor:uint;
public function SPBackground(c) {
mainColor = c;
init();
}
private function init():void {
drawBackground();
}
private function drawBackground():void {
var m:Matrix = new Matrix();
m.createGradientBox(800, 600);
graphics.beginGradientFill(GradientType.RADIAL, [0xffffff, mainColor], [1, 1], [0, 255], m, SpreadMethod.PAD);
graphics.drawRect(0, 0, 800, 600);
graphics.endFill();
}
public function resize(w:Number, h:Number):void {
this.width = w;
this.height = h;
}
public function set color(c:uint):void {
mainColor = c;
drawBackground();
}
}
}
|
Allerdings ist mir dann nicht ganz klar, ob es dann wirklich sinnvoll ist die Farbe als public zu deklarieren... | Geändert von sullivan am 03.04.08 um 11:32 Uhr | |
| | Beiträge: 791 Registriert: Apr 2004
| 03.04.2008, 11:36
Nein, man sollte immer einen indirekten Zugriff wählen über get und set Methoden:ActionScript:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | package {
/**
* Created with BeanButler © 2007, Omega Psi
*/
public class Screenproof {
private var _color:int;
public function Screenproof() {
}
public function get color():int {
return this._color;
}
public function set color(color:int):void {
this._color = color;
}
public function toString():String {
var asString:String = "Screenproof";
asString += "\n\t- color: "+this._color.toString();
return asString;
}
}
}
|
Architectures - Refactoring - Prototyping - Coding - Training | | | Beiträge: 126 Wohnort: Berlin Registriert: Nov 2006
Themenautor/in
| 03.04.2008, 11:58
Bin noch nicht so fit in AS3. Könntest du dazu noch eine Erklärung schreiben, zb was ich mit der Funktion dann in der Backgroundklasse anstelle und wozu diese toString-Funktion gut ist.
| | | Beiträge: 791 Registriert: Apr 2004
| 03.04.2008, 12:13
Die toString() Methode sollte man implementieren, um eine vernünftige Ausgabe bei Tests zu bekommen.
Mit der Funktion musst du in der Klasse erstmal nichts machen. Im Hinblick auf Vererbung kann es aber schon Sinn machen, da erbende Klassen die Funktionen evtl. überschreiben sollen. Die aufrufenden Klassen rufen dann die Eigenschaften so auf:ActionScript:1 2 | var sp: Screenproof = new Screenproof();
trace(sp.color);
|
Architectures - Refactoring - Prototyping - Coding - Training | | | Beiträge: 126 Wohnort: Berlin Registriert: Nov 2006
Themenautor/in
| 03.04.2008, 12:27
Also mir geht es ja darum die Farbe, die ich in Screenproof festlege in Background verwenden kann. Vielleicht stell ich mich auch einfach zu blöd an, aber um dein Skript auszuführen müsste ich ja Screenproof in Background importieren. Allerdings erstelle ich Background bereits aus Screenproof heraus.
Ich hoffe du verstehst was ich meine...
| | | Beiträge: 791 Registriert: Apr 2004
| 03.04.2008, 12:50
Ach so, hatte mich in der Klasse verguckt. Du übergibst die festgelegte Farbe aber trotzdem über get und set Methoden, wie du es schon machst.
Architectures - Refactoring - Prototyping - Coding - Training | | | Beiträge: 126 Wohnort: Berlin Registriert: Nov 2006
Themenautor/in
| 03.04.2008, 13:23
Ah super, jetzt hab ichs verstanden. Man nutzt diese get und set Methoden also um "Eigenschaften" an Instanzen zu übergeben.
Zur Vollständigkeit, nochmal der geänderte Teil:
ActionScript:1 2 3 4 5 | private function addBackground():void {
bg = new SPBackground();
bg.color = mainColor;
addChild(bg);
}
|
Vielen Dank, das hat mir sehr geholfen!
| |
| Ähnliche Beiträge zum Thema | |
|
Flashhilfe.de Flash Platform Tipps & Tutorials Flash Platform Andere Programmiersprachen Jobangebote Diskussionen
Flashhilfe News 
Regeln & Bedingungen
|