Flashhilfe.de - Flash Community

AS3 public var? [Flash 9]

 


AntwortenRegistrieren Seite1  

sullivan#1
Benutzerbild von sullivan
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".

Werbung
Beiträge: 0
Registriert: Feb 2016


sullivan#2
Benutzerbild von sullivan
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
omega psi#3
Benutzerbild von omega psi
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
sullivan#4
Benutzerbild von sullivan
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.

Werbung
Beiträge: 0
Registriert: Feb 2016


omega psi#5
Benutzerbild von omega psi
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
sullivan#6
Benutzerbild von sullivan
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...

omega psi#7
Benutzerbild von omega psi
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
sullivan#8
Benutzerbild von sullivan
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!


AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   php-resource.de   phpforum.de   phpwelt.de   Pixelio.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Hier Werben   Impressum
© 1999-2019 Sebastian Wichmann - Flashhilfe.de