| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| ... Registriert seit: May 2003 Ort: berlin
Beiträge: 414
| Methode der Main-Klasse aufrufen von eingebetteter Klasse
Hallo, ich habe ein Problem und komme einfach nicht drauf, deshalb habe ich jetzt mal eine Musterklasse geschrieben, in der ich es so mache, wie ich denke, dass es genmacht werden muss (tut's aber nicht): PHP-Code: PHP-Code: |
| | |
| | #2 (permalink) |
| Perverted Hermit Registriert seit: Mar 2004 Ort: Delmenhorst
Beiträge: 12.139
| Da ist einiges durcheinander. ActionScript:
ActionScript:
__________________ http://icodeapps.net | Meet me at the Flex user group Hamburg talking about CoffeeScript Geändert von Omega Psi (06-02-2008 um 18:14 Uhr) |
| | |
| | #4 (permalink) |
| ... Registriert seit: May 2003 Ort: berlin
Beiträge: 414
|
ähm, ich glaube, ich habe mich nicht verständlich genug gemacht... Mir geht es darum, aus der unterklasse eine Funktion in der Hauptklasse aufzurufen. Wie geht das? Das mit dem Event-Ding war nur als Beispiel gedacht... |
| | |
| | #5 (permalink) |
| Perverted Hermit Registriert seit: Mar 2004 Ort: Delmenhorst
Beiträge: 12.139
| Ich sagte ja, du solltest dich nochmal mit der Vererbung und dem Eventsystem befassen. Ein Beispiel für Vererbung: ActionScript:
ActionScript:
__________________ http://icodeapps.net | Meet me at the Flex user group Hamburg talking about CoffeeScript |
| | |
| | #6 (permalink) |
| Perverted Hermit Registriert seit: Mar 2004 Ort: Delmenhorst
Beiträge: 12.139
| So nebenbei: schaue dir nochmal die ganzen Fachwörter an. Wenn du von eingebetteter Klasse sprichst, könnte man meinen du sprichst von einer gekapselten Klasse. Vererbung ist was anderes.
__________________ http://icodeapps.net | Meet me at the Flex user group Hamburg talking about CoffeeScript Geändert von Omega Psi (07-02-2008 um 20:15 Uhr) |
| | |
| | #7 (permalink) |
| ... Registriert seit: May 2003 Ort: berlin
Beiträge: 414
|
So, hier habe ich jetzt die Lösung gefunden: http://greenethumb.com/article/23/un...t-class-in-as3 Man muss also angeblich das root als type der Hauptklasse casten ![]() danke und vielleicht hilfts ja jemandem. |
| | |
| | #8 (permalink) |
| ... Registriert seit: May 2003 Ort: berlin
Beiträge: 414
|
Entschuldige, habe deine Beiträge nicht bemerkt... Mein Problem ist, dass ich garnicht weiss, wo ich in der riesigen Flash-Hilfe überhaupt anfangen soll zu lesen, ausserdem weiss nicht, was Vererbung auf Englisch heisst ![]() Das Geheimnis bei Deinem Beispiel scheint also irgendwie dieses ominöse »super()« im Konstrukor zu sein und dass die SubClass die MainClass extendet, oder? Tut mir leid, ich habe dazu in der Hilfe wirklich noch nichts gefunden... |
| | |
| | #9 (permalink) |
| Perverted Hermit Registriert seit: Mar 2004 Ort: Delmenhorst
Beiträge: 12.139
| Deutsch/Englisch, Englisch/Deutsch: http://dict.leo.org/, http://www.dict.cc/ Wenn du in der Hilfe nichts über super gefunden hast, hast du sie nicht benutzt oder falsch. super(); im Konstruktor ruft den Konstruktor der Superklasse auf. super.<Functionsname>() ruft die Funktion der Superklasse auf, wenn die Methode public oder protected deklariert ist. Und hier findest du die Dokumentation auf deutsch: Link
__________________ http://icodeapps.net | Meet me at the Flex user group Hamburg talking about CoffeeScript |
| | |
| | #11 (permalink) |
| - Registriert seit: Jul 2003
Beiträge: 714
|
root ist keine schöne Lösung Lösung 1: Anstatt stage.addChild() verwende this.addChild(), wenn du die Klasse Main als Dokumenten Klassen verwendest Code: package {
import flash.display.*;
import flash.events.*;
public class Main extends MovieClip {
public function Main() {
super();
var myTrigger:Trigger = new Trigger();
this.addChild(myTrigger);
myTrigger.init();
}
public function traceIt():void {
trace("la");
}
}
} Code: package {
import flash.display.*;
import flash.events.*;
public class Trigger extends MovieClip {
public function Trigger() {
super();
}
public function init():void {
stage.addEventListener(MouseEvent.CLICK, clickHandler);
}
public function clickHandler(event:MouseEvent):void {
var parentClip:MovieClip = MovieClip(this.parent);
parentClip.traceIt();
}
}
} Lösung 2, aber nicht sehr schön: Wenn du unbedingt stage.addChild verwenden willst , dann ist die Instanz der Klasse Main ein Kind (Child) von stage. Und das ist in diesem Fall das erste Kind. Code: package {
import flash.display.*;
import flash.events.*;
public class Main extends MovieClip {
public function Main() {
super();
var myTrigger:Trigger = new Trigger();
stage.addChild(myTrigger);
myTrigger.init();
}
public function traceIt():void {
trace("la");
}
}
} Code: package {
import flash.display.*;
import flash.events.*;
public class Trigger extends MovieClip {
public function Trigger() {
super();
}
public function init():void {
stage.addEventListener(MouseEvent.CLICK, clickHandler);
}
public function clickHandler(event:MouseEvent):void {
var parentClip:MovieClip = MovieClip(this.parent.getChildAt(0));
parentClip.traceIt();
}
}
} Lösung 3: Du übergibt eine Referenz. Code: package {
import flash.display.*;
import flash.events.*;
public class Main extends MovieClip {
public function Main() {
super();
var myTrigger:Trigger = new Trigger();
myTrigger.target = this;
// stage oder this
stage.addChild(myTrigger);
myTrigger.init();
}
public function traceIt():void {
trace("la");
}
}
} Code: package {
import flash.display.*;
import flash.events.*;
public class Trigger extends MovieClip {
public var target:MovieClip;
public function Trigger() {
super();
}
public function init():void {
stage.addEventListener(MouseEvent.CLICK, clickHandler);
}
public function clickHandler(event:MouseEvent):void {
this.target.traceIt();
}
}
} |
| | |
| | #12 (permalink) |
| ... Registriert seit: May 2003 Ort: berlin
Beiträge: 414
|
Oh mann, genial, das funktioniert super! Danke für die tollen Beispiele, messingfeld! Ich werde mich wohl an Methode 3 halten, weil dann kann ich ja auch zwischen verschiedenen Unterklassen kommunizieren, einfach indem man die Ziele Methoden bei der Instanzierung in der Main-Klasse übergibt, ne? Das einzige, was ich noch nicht kapiere, ist, warum ihr immer im Konstruktor dieses »super()« angebt. Nach der Hilfe ruft dieses den Konstruktor der Übergeordneten Klasse auf. Warum genau macht ihr das? Wenn ich es weglasse, funktioniert es nämlich trotzdem... |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |