Klassen mit AS 2.0

jenno

Erfahrenes Mitglied
Wollte grad mal versuchen, mir die Objektorientierung von Flash MX reinzuziehen. Hab mir die Anleitungen von der Flash Hilfe angesehen "ActionScript 2.0 mit Objekten und Klassen verwenden"

Nur leider funktionieren bei mir die Beispiele nicht. Wenn ich irgendwas von den Beispielen veröffentliche, passiert rein gar nichts.

:(
 
Hi,

So aus dem Stehgreif ist es schwer, Dir zu helfen, da ich nicht weiß, was Du probiert hast. Hast Du Dir die generelle Anleitung zum Arbeiten mit Klassen durchgelesen?

Vielleicht kannst Du Deine Datei einmal posten.

Gruß

P.S.: Wenn's mit Klassen nicht klappt, kann es oft auch eine falsche Adresse beim Importieren sein. ;)
.
 
Hallo,

ich vermute mal schwer, dass du die Beispiele, die in der Flash-Hilfe mit Code ergänzt sind, direkt in die Klassen-Files geladen hast. Die sind tatsächlich nicht immer mit korrekter Syntax aufgeführt und nur (dann dafür aber richtig) zu verstehen, wenn man die Thematik begriffen hat. Da diese Beispiele unter Umständen ein bisschen abstrakt geschildert sind und ein gewisses "Gefühl" für Programming voraussetzen, versteh ich dein Problem sehr gut.
In meinem Fall hat da die Anschaffung des Macromedia AS 2.0-Referenzbuches enorm geholfen. Ich arbeite heute fast ausschliesslich mit Klassen und hab das Wesentliche darüber aus diesem Buch gelernt. Obwohl dessen Inhalt eigentlich weitestgehend dem der Flash-Hilfe entspricht, empfand ich das Buch als extrem hilfreich und horizonterweiternd. Auch wenn dieser Tipp hier nicht ein Link beinhaltet, der dir sozusagen eine "instant"-Lösung bietet, finde ich, dass du um diese Art von Lernen nicht herumkommst, solltest du dich wirklich in AS 2.0 und dessen Möglichkeiten einarbeiten wollen.

Gruss

PS:
1. Eine Frage: Wenn du dich mit AS 2.0 beschäftigst, solltest du eigentlich die MX 2004-Version von Flash besitzen und nicht wie von dir angegeben, die MX-Version.
2. Der häufigste Fehler ist wie von Datic beschrieben, der falsche Import des as-Files. Poste mal deine Dateien, dann kann man dir sicher helfen.
 
Okay, ja ich habe Macromedia Flash MX Professional 2004.

Und hier das Beispiel aus der Flash Hilfe:

PHP:
//gespeichert in product.as

class Product
{
    var id:Number;
    var prodName:String;
    var description:String
    
    function Product (id:Number, prodName:String, description:String) {
      setID(id);
      setProdName(prodName);
      setDescription(description);
}
    public function setID (id:Number) :Void
{
      this.id = id;
}
    public function setProdName (prodName:String) :Void 
{
      this.prodName = prodName;
}
    public function setDescription (description:String) :Void 
{
      this.description = description;
}
    public function getID () :Number {
      return id;
}
    public function getProdName () :String {
      return prodName
}
    public function getDescription () :String {
      return description;
  }
}

Und dann werden so die Objekte erstellt:

PHP:
var pedals:Product=new Product(0,"Clipless Pedals","Excellent cleat engagement");
var handleBars:Product = new Product (1, "ATB", "Available in comfort and aero design");

trace (pedals.getDescription ());

Was ich eigentlich suche, ist ein einfaches Beispiel, wie man in Flash eine Klasse erstellt und daraus dann die Objekte. Aus diesem Beispiel will ich dann meine eigene Klasse ableiten. Objektorientiert programmieren ist mir nicht unbekannt, habs nur in Flash noch nicht getan. Aber es bereitet mir Herzschmerz, wenn ich in meiner eigenen Anwendung 500 Zeilen Code schreiben muss, die ich mit Hilfe der Objektorientierung auf 50 Zeilen Code reduzieren kann.
 
Hi,

Die Klassendatei sollte unter dem Klassennamen abgespeichert werden, also Produkt.as.

Ausserdem hast Du Die Klasse nicht importiert:
PHP:
import Produkt;

Probier es doch für den Anfang mal mit einer ganz simplen Klasse:
PHP:
// Person.as
class Person {
  private var _vorname:String;
  private var _nachname:String
 
  function Person(v:String, n:String) {
    _vorname = v;
    _nachname = n;
  }

  public function getVorname():String {
    return _vorname;
  }

  public function setVorname(v:String):Void {
    _vorname = v;
  }

  public function getNachname():String {
    return _nachname;
  }

  public function setNachname(n:String):Void {
    _nachname = n;
  }
}
PHP:
// person.fla
import Person; // <-- Klasse importieren

var ich = new Person("Otto", "Normalverbraucher");

trace(ich.getVorname());
trace(ich.getNachname());

Ich würde Dir auf jeden Fall empfehlen, die Anleitung Schritt für Schritt durchzugehen (Importieren, Konstruktoren, Private/Public/Statische Member, explizite Setter/Getter usw.) - ein AS2+Buch ist sicher auch sinnvoll, wenn man nicht dauernd in der Hilfe blättern will. ;)

Gruß
.
 
Zuletzt bearbeitet:
Ich habe jetzt eine Datei Person.as
...und eine Datei person.fla
So wie Du die Inhalte oben gepostet hast.
Beide Dateien liegen im selben Ordner.
Wenn ich jetzt in meiner fla-Datei Crtl+Enter drücke
(Film testen), dann sehe ich einen weissen Bildschirm,
weiter nichts. Erwartet hätte ich jetzt, dass da "Otto Normalverbraucher"
erscheint. Oder etwa nicht?

Sorry, bin grad wirklich noch ganz am Anfang mit Flash und so,
und bisher klappts auch ganz gut, nur eben das nicht. Kann es
sein, dass ich noch irgendwas einstellen muss?

Ein Buch werde ich mir wahrscheinlich auch zulegen, aber heute ist
Sonntag und es kribbelt mir in den Fingern ;-)
 
Jupp, mir sind zwei kleine Fehler unterlaufen (das kommt davon, wenn man das aus dem Kopf tippt und nicht in Flash ausprobiert ;) ):

1.

Im Konstruktor habe ich zweimal v angegeben, muss natürlich n beim Nachnamen sein:
PHP:
function Person(v:String, n:String) {
    _vorname = v;
    _nachname = n;
}

2. Ich habe die Klammern nach den Funktionsaufrufen vergessen:
PHP:
trace(ich.getVorname());
trace(ich.getNachname());
;)

Gruß

P.S.: Wenn Du wirklich ganz am Anfang mit Flash stehst: Du musst nicht unbedingt mit Klassen anfangen - das meiste lässt sich auch mit internen Scripten prima erledigen
(aber Psst! - das ist natürlich ein Sakrileg ^^)
.
 
Zuletzt bearbeitet:
Ja, ich weiss dass ich es nicht unbedingt über Klassen und Objekte machen muss. Aber ich habe keine Lust auf den Wartungsaufwand. Meine Anwendung schreit quasi nach ner Klasse. Und deswegen will ich es lieber gleich richtig machen.

Leider habe ich immernoch nur nen weissen Bildschirm.
Hier nochmal der Code, den ich jetzt habe:

PHP:
class Person {
  private var _vorname:String;
  private var _nachname:String

  function Person(v:String, n:String) {
    _vorname = v;
    _nachname = n;
} 

  public function getVorname():String {
    return _vorname;
  }

  public function setVorname(v:String):Void {
    _vorname = v;
  }

  public function getNachname():String {
    return _nachname;
  }

  public function setNachname(n:String):Void {
    _nachname = n;
  }
}

und

PHP:
// person.fla
import Person; // <-- Klasse importieren

var ich = new Person("Otto", "Normalverbraucher");

trace(ich.getVorname());
trace(ich.getNachname());

Hmm, sollte doch eigentlich nich so schwierig sein. Sieht eigentlich ganz easy aus. Doch noch irgendwas mit den Einstellungen?
 
hmm. Ich nehme an, Dir ist klar, dass trace-Aktionen nicht auf der Bühne ausgegeben werden und in den Exporteinstellungen auch deaktiviert werden können? (sorry für die Frage, will Dir nichts unterstellen ;) ).

Apropros Exporteinstellungen: Du exportierst auch für AS 2.0?

Gruß
.
 
Kein Problem, darfst alles fragen!
Kann gut sein, dass mir so einiges nicht klar ist :)

Ja, ich exportiere für AS 2.0
Und wie und wann werden die trace-Aktionen denn ausgeführt und angezeigt?
Wenn ich Strg+Enter drücke, das will ich den Film testen, ich bin sozusagen
im Testmodus. Dann müsste ich doch die Anzeige bekommen?

Ich habe nochmal in den Exporteinstellungen nachgesehen, trace-Aktionen
übergehen ist nicht angeklickt.
 
Zurück