Flashhilfe.de - Flash Community

Wie arbeitet Ihr mit Euren Variablen unter as3 [Flash 10]

 


AntwortenRegistrieren Seite1  

Griepto#1
Benutzerbild von Griepto
Beiträge: 41
Wohnort: Berlin
Registriert: Jan 2009

22.02.2009, 10:50

1. als public dynamic class in ein package, das wiederum in eine externe *.as Datei
(in alle movies und in der Hauptzeitleiste  >import< legen)

2. in das erste frame der Hauptzeitleiste
(mit object(root) aus den movies drauf zugreifen)

Ich frage, weil ich mich als AS2 Umsteiger furchtbar mit den Verfügbarkeiten der Variablen quäle und selbst Colin Moock in seinen Essentials mich nicht besonders erhellt.

Allerdings ahne ich auch das ich meine AS2 Denke aufgeben muss :)
Zeit hat man dazu, wozu man Lust hat.
cttogo#2
Benutzerbild von cttogo
Beiträge: 313
Wohnort: Waltrop
Registriert: Jul 2008

22.02.2009, 18:21

Hallo,

deklariere die Variablen auf die Extern (über einer Instance der Klasse) zugegriffen werden soll als public und erstelle pro Variable einen setter und einen getter.

Beispiel:
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
package com.deinprojekt{
   
   
   public class  DeineTestKlasse {
      
      
      public var derTest:String = 'Mein Test!';
      /**
       * Konstruktor der Klasse,
       * wird beim initzialisieren
       * aufgerufen.
       */

      
      public function DeineTestKlasse() {
         
      }
      
      
      /**
       * Setter für derTest
       * @param   _derTest String
       */

      public function setTest(_derTest:String):void {
         this.derTest = _derTest;
      }
      
      /**
       *
       * @return String
       */

      public function getTest():String {
         return this.derTest;
      }
      
   }
   
}


Im Film:
ActionScript:
1
2
3
4
5
6
import  com.deinprojekt.DeineTestKlasse;

var testKlasse:DeineTestKlasse = new DeineTestKlasse(); //Instance von DeinerTestKlasse
trace(testKlasse->getTest()); // Mein Test!
testKlasse->setTest('Dein Test');
trace(testKlasse->getTest());// Dein Test!


Mit private deklarierete Variablen sind nur innerhalb der Klasse verfügbar.


Tom
Irgenwas läuft immer schief!
Griepto#3
Benutzerbild von Griepto
Beiträge: 41
Wohnort: Berlin
Registriert: Jan 2009

Themenautor/in

24.02.2009, 11:18

Moin Tom,
das mache ich ja auch brav so,
nur verdonnert mich das zum Arbeiten in der Hauptzeitleiste.
Ich liebe normalerweise intelligente Movies, die sich ihre Zustandsvariablen einlesen und entsprechend verhalten. Da sind natürlich verschiedene Variablen wie z.B.
PHP:
1
2
3
4
<?
public var sprache:String "english";
?>

recht interessant.
Um mit denen überall zu arbeiten, muss man die ja in den jeweiligen Film importieren.
Rein in die Hauptzeitleiste langt ja nicht. Mit Object(root).sprache dahin zu langen ist natürlich etwas inkonsequent. Importiere ich aber die Variablen aus dem externen .as file,
und packe diese dann in ein Object, um sie ansprechen und verändern zu können, erstelle ich doch jeweils eine neue Instanz der Variablen. Also z.B. in jedem Film auf der Hauptzeitleiste kann ich zwar die Variable Sprache importieren, verändere ich dann diese (z.B. von english auf deutsch) an einer Stelle, wie erfahren dann die anderen davon?
Mit anderen Worten wie baue ich eine globale (nicht nur global erreichbar sondern auch für alle Movies,etc. gleich veränderbare) Variable?

Grüße aus dem Elsaß
Zeit hat man dazu, wozu man Lust hat.
badskill#4
Benutzerbild von badskillFlashhilfe.de Moderator
Beiträge: 5285
Wohnort: Bernau (bei Berlin)
Registriert: Nov 2002

24.02.2009, 11:23

Hi,
schau dir mal das Observer-Pattern sowie das Singleton-Pattern an.
Griepto#5
Benutzerbild von Griepto
Beiträge: 41
Wohnort: Berlin
Registriert: Jan 2009

Themenautor/in

24.02.2009, 11:34

Tausend Dank,
danach bin ich hoffentlich schlauer:
http://www.annekewinter.de/_blog/?p=7
Ich frage mich nur warum so etwas grundlegendes nicht deutlich in den AS3 Büchern herausgearbeitet wird
<schaut grummelnd auf den Stapel neben sich>
Zeit hat man dazu, wozu man Lust hat.
badskill#6
Benutzerbild von badskillFlashhilfe.de Moderator
Beiträge: 5285
Wohnort: Bernau (bei Berlin)
Registriert: Nov 2002

24.02.2009, 11:36

>>Ich frage mich nur warum so etwas grundlegendes nicht deutlich in den AS3 Büchern herausgearbeitet wird
Weil dann die Bücher viermal soviele Seiten hätten und mehere Kilo wiegen dürften. ;)
Griepto#7
Benutzerbild von Griepto
Beiträge: 41
Wohnort: Berlin
Registriert: Jan 2009

Themenautor/in

24.02.2009, 15:46

@cttogo
ich habe jetzt ausführlich mit der set und get Idee rumprobiert.
Innerhalb einer Instanz der importierten Variablen funktioniert das auch prima,
aber ansonsten aus einer anderen Instanz heraus leider nada
die .as datei
ActionScript:
1
2
3
4
5
6
7
8
9
10
package {
   public class alleVariablen {
   //allgemeine dynamiche Variablen
   public var sprache:String = "deutsch";
   public function setzeVariable(_variable:String):void {
        this.sprache = _variable;
      }
   public function holeVariable():String {
        return this.sprache;
      }

und im Hauptfilm
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import alleVariablen;

var mutter:alleVariablen = new alleVariablen();

direkt_txt.text = mutter.holeVariable();
var willi:String = ""; //eine Variable, auf die ich mit Object(root). von überall zugreifen kann

//return taste für die eingabe
stage.addEventListener(KeyboardEvent.KEY_UP, tastenschnuff);

function tastenschnuff(evt:KeyboardEvent):void {
   if (evt.keyCode == Keyboard.ENTER){
      lese(evt);
   }
}
   
function lese(evt:Event):void {
   var eingabeText:String = eingabe_txt.text;
   mutter.setzeVariable(eingabe_txt.text);
   willi = eingabe_txt.text;
   trace(mutter.holeVariable());// klar das klappt, aber halt innerhalb der Instanz
}


und nun aus einem anderen Movie
mit einer eigenen Instanz
ActionScript:
1
2
3
import alleVariablen;
var hierher:alleVariablen = new alleVariablen();
direktM1_txt.text = hierher.holeVariable();

kann nicht gehen, okay also Annekes Beispiel folgen, puh
Zeit hat man dazu, wozu man Lust hat.
cttogo#8
Benutzerbild von cttogo
Beiträge: 313
Wohnort: Waltrop
Registriert: Jul 2008

26.02.2009, 17:22

Hi,

sorry, das es gedauert hat.

Wenn Du eine Klasse nur als eine Instance in deinem Projekt habe möchtest, mach es so.

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
package {
  public class alleVariablen {
  //allgemeine dynamiche Variablen
  public var sprache:String = "deutsch";
private static var instance:alleVariablen = null;

public function alleVariablen() {
         instance = this;
         
      }

public static function getInstance():alleVariablen {
         if (instance == null) {
            return new alleVariablen();
         } else {
            return instance;
         }
      }
  public function setzeVariable(_variable:String):void {
        this.sprache = _variable;
      }
  public function holeVariable():String {
        return this.sprache;
      }


im Hauptfilm

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import alleVariablen;

var mutter:alleVariablen = new alleVariablen();

direkt_txt.text = mutter.holeVariable();
var willi:String = ""; //eine Variable, auf die ich mit Object(root). von überall zugreifen kann

//return taste für die eingabe
stage.addEventListener(KeyboardEvent.KEY_UP, tastenschnuff);

function tastenschnuff(evt:KeyboardEvent):void {
  if (evt.keyCode == Keyboard.ENTER){
      lese(evt);
  }
}
 
function lese(evt:Event):void {
  var eingabeText:String = eingabe_txt.text;
  mutter.setzeVariable(eingabe_txt.text);
  willi = eingabe_txt.text;
  trace(mutter.holeVariable());// klar das klappt, aber halt innerhalb der Instanz
}


und nun aus einem anderen Movie
mit einer eigenen Instanz

ActionScript:
1
2
3
import alleVariablen;

direktM1_txt.text = alleVariablen().getInstance().holeVariable();

alleVariablen().getInstance().setzeVariable('MainText'); // setzt auch die Variable im Hauptfilm
Hoffe es hilft noch.

Tom
Irgenwas läuft immer schief!
Geändert von cttogo am 26.02.09 um 17:25 Uhr
Griepto#9
Benutzerbild von Griepto
Beiträge: 41
Wohnort: Berlin
Registriert: Jan 2009

Themenautor/in

27.02.2009, 17:19

Moin Tom,
vielen Dank für Dein ausführliches Script.
Das wäre ja die echte Alternative gegenüber dem Import der class in die Hauptzeitleiste
und dann immer mit Object(root). drauf zu zu greifen.

Allerdings bekomme ich noch immer (im Movie) den Fehler:
ActionScript:
1
2
1136  Incorrect number of arguments.  Expected 1.
1061 Call to a possibly undefined method getInstance through a reference with static type alleVariablen


für den Ausdruck
ActionScript:
1direktM1_txt.text = alleVariablen().getInstance().holeVariable();
Zeit hat man dazu, wozu man Lust hat.
Geändert von Griepto am 27.02.09 um 17:23 Uhr
springer#10
Benutzerbild von springer
Beiträge: 4909
Wohnort: zuhaus
Registriert: Apr 2004

27.02.2009, 18:02

alleVariablen ohne (), da die funktion getInstance() statischen charakter hat:

ActionScript:
1alleVariablen.getInstance().holeVariable();
lieber chips essen und danach voller zweifel sein, als voller zweifel chips essen...
Geändert von springer am 27.02.09 um 18:02 Uhr
Griepto#11
Benutzerbild von Griepto
Beiträge: 41
Wohnort: Berlin
Registriert: Jan 2009

Themenautor/in

27.02.2009, 19:57

Wow, prima Cheffe.
Endlich kann ich eine fla basteln und das
ActionScript:
1Object(root).

über Bord schmeissen.
Freiheit und Abenteuer warten auf mich :-)
Tausend Dank
auch an Tom
Zeit hat man dazu, wozu man Lust hat.

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   phpwelt.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Impressum
© 1999-2021 Sebastian Wichmann - Flashhilfe.de