ERLEDIGT
NEIN
NEIN
ANTWORTEN
10
10
ZUGRIFFE
431
431
EMPFEHLEN
-
Dieses Thema bereitet mir nach leider wie vor gewisse Probleme in ActionScript, es geht um folgendes:
Ich habe eine Klasse, welche eine Instanz von einem Objekt erstellt.
In dieser Klasse wird zudem eine weitere Klasse aufgerufen, zum einfaden des Objektes - wenn dies erfolgt ist, wird eine Callback-Funktion aufgerufen, diese Funktion befindet sich ebenfalls in der Klasse, welches die Instanz erstellt, die hierfür relevanten Funktionen:
Gallery.as - Daten aus XML File werden geladen und per Funktion in der Klasse einer statischen Variable zugewissen
Code 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
static var linkID:Number = 0; private var masterTarget:MovieClip; static var dataXML:XML; private var links:MovieClip; static var artworks:Array public function Gallery() { links = this.createEmptyMovieClip("linkContainer_mc", 0); var mc:Function = gatherData; var masterTarget:Gallery = this; dataXML = new XML; dataXML.ignoreWhite = true; dataXML.onLoad = function (b:Boolean) { if (b) { trace("hoffe das ist nur einer hier"); var artworks:Array = this.firstChild.childNodes; masterTarget.setVars(artworks); } }; dataXML.load ("gallery.xml"); }
Code actionscript:1 2 3 4 5
public function setVars(a:Array) { artworks = a; gatherData(); }
Gallery.as - Funktion zum herausfiltern der einzelnen Daten der XML und aufruf zur Funktion createLink
Code actionscript:1 2 3 4 5 6 7 8 9 10
public function gatherData() { var date:Number = artworks[linkID].attributes["date"]; var file:String = artworks[linkID].attributes["file"]; var desc:String = artworks[linkID].childNodes; if(linkID <= artworks.length - 1) createLink(date, file, desc);trace(createLink()); }
Gallery.as - Erstellen und einfaden der Instanz
Code actionscript:1 2 3 4 5 6 7 8 9 10 11 12
public function createLink(date:Number, file:String, desc:String) { trace(linkID); var linkPath:MovieClip = links.attachMovie("Link", "link"+linkID, linkID); linkPath._alpha = 0; linkPath._y = 15 * linkID; var linkAction = new Action(linkPath); ++linkID linkAction.useFade(100, gatherData) }
Action.as - ausführen des Fades und bei fertigstellung Aufruf der Callback Funktion
Code actionscript:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
public function useFade (n:Number, _cb:Function) { var c:MovieClip = master.createEmptyMovieClip("fadeFunction", 9901); var alpha:Number = master._alpha; master.fadeFunction.onEnterFrame = function () { var master:MovieClip = this._parent; alpha += (n - alpha) / 5; master._alpha = alpha; if (master._alpha >= n - 1 && master._alpha <= n + 1) { master._alpha = n; _cb(); this.removeMovieClip(); } }; }
Am Ende scheint jede Auslesung und Verarbeitung der Variablen fehlzuschlagen.
Bei dem 2. Ausführen des Ablaufes, wird mir für den trace "trace(createLink())", "undefined" zurückgegeben, somit scheint er diese Funktion nichteinmalmehr zu finden. Sehr nervig das ganze.
Habe schon verschiedene Ausführungen ausprobiert, nichts hat geklappt...
PS: Sollte jemand gute Fachlektüre über pure OOP bei ActionScript kennen, immer her damit. Die Lektüren, welche ich bisher habe, kratzen das Thema leider nur immer sehr Oberflächlich ein.
Ich wäre zudem sehr dankbar für einfache Snippets aus komplexeren Klassen, damit müsste ich hier nicht andauernt irgendwelchen Leute mit meinen fragen belästigen
und ich könnte es einfach mal studieren, wie man Klassen vorzugsweiße aufbaut.
-
Hi,
nach dem ersten Drüberschauen:Was willst Du mit trace(createLink()) bezwecken? Die Methode "createLink" gibt keinen Wert zurück, daher kann die Ausgabe nur "undefined" sein. Zudem erwartet die Methode 3 Parameter (wie im vorherigen Aufruf).Code actionscript:1
if(linkID <= artworks.length - 1) createLink(date, file, desc);trace(createLink());
Gruß
.
-
Nach meiner Erfahrung sollte ich [type Function] als Rückgabewert erhalten, was ich im ersten Durchlauf auch tue.
Anscheinend übersehe ich gerade etwas, es werden doch immer 3 Parameter übergeben?
-
Hi,
wenn Du eine Funktion mit abschließenden Klammern () aufrufst, wird die Funktion ausgeführt und Du bekommst bestenfalls ihren Rückgabewert. Willst Du den Typ des Objekts ausgeben, lass die Klammern weg:Code :1
trace(createLink);
Das bezog sich auf den Aufruf in der trace-Aktion.Anscheinend übersehe ich gerade etwas, es werden doch immer 3 Parameter übergeben?
Mit Deiner Zeile rufst Du die Methode zweimal hintereinander auf: Einmal mit allen Parametern, und einmal ohne, wobei Du versuchst, ihren Rückgabewert auszugeben.
Gruß
.
-
Das mit den Klammern war mir neu, danke schonmal für die Aufklärung diesbezüglich

Code actionscript:1
if(linkID <= artworks.childNodes - 1) createLink(date, file, desc); trace(createLink);
So sieht es nun aus (habe das Array noch in XMLNodes umgewandelt) - aber getraced bekomme ich folgendes:
(trace(createLink) ist derzeit das einzige, was getraced wird)
Code actionscript:1 2
[type Function] undefined
-
Hi,
ich vermute, beim Aufruf der Callback-Funktion in der Methode "useFade" geht die Referenz auf die ursprüngliche Klasseninstanz verloren. Probier mal folgendes:Code actionscript:1 2
// Methode createLink in der Gallery.as: linkAction.useFade(100, gatherData, this); // Referenz auf diese Instanz mitgeben
Code actionscript:1 2 3 4
// Methode useFade in der Action.as: public function useFade (n:Number, _cb:Function, _tgt:Gallery) { // Gallery-Klasse mugg ggf. inkludiert werden ... _tgt._cb(); // Callback-Methode als Member der Originalinstanz ausführen
Sollte das Problem nach wie vor auftreten, kann ich das Ding mal direkt testen - es wäre hilfreich, wenn Du mir in diesem Fall alle beteiligten Dateien, die zum Testbetrieb nötig sind (auch die xml-Datei) als Anhang mitschicken könntest.
Gruß
,
-
Letzte Korrekturfrage, wenn das nicht klappt, werde ich dein Angebot dankend annehmen..
Alles sieht nun wie folgt aus:
Code actionscript:1
linkAction.useFade(100, gatherData, this)
Code actionscript:1 2 3
public function useFade (n:Number, _cb:Function, _tgt:Gallery) [...] _tgt._cb();
Allerdings tritt ein Fehler dabei auf:
Code actionscript:1 2 3 4
**Fehler** C:\Dokumente und Einstellungen\[...]Action.as: Zeile 110: Keine Methode mit dem Namen '_cb' vorhanden. _tgt._cb(); Anzahl der ActionScript-Fehler: 1 Gemeldete Fehler: 1
Wäre es eine normale Variable, wüsste ich mir schon zu helfen, bei einer Funktion jedoch nicht.
-
Grmpf - hätt' ich mir eigentlich denken können.

Probiers mal so:Code actionscript:1 2
var fn:Function = _tgt[_cb]; fn();
Gruß
.
-
Will bei mir wohl nichts werden.
Ich habe im Anhang einmal eine .zip mit den Verwendeten Klassen - die hierfür relevanten sind jedoch einzig und alleine Action.as und Gallery.as
Danke für diese Hilfe!
-
Hi,
ich muss mich korrigieren - der Funktionsname sollte als String übergeben werden:Code actionscript:1
linkAction.useFade(100, "gatherData", this);
Code actionscript:1 2 3
public function useFade (n:Number, _cb:String, _tgt:Gallery) { _tgt[_cb](); }
(getestet)
Gruß
,
-
Es tut immerhin gut zu wissen, das jeder sich mal irren kann

Klappt nun soweit perfekt.Also nochmals herzlichen Dank!
Ähnliche Themen
-
Frage zu Klassen und Funktionen
Von tioz im Forum PHPAntworten: 3Letzter Beitrag: 28.01.08, 19:14 -
VB6 - Klassen: Funktionen Private?
Von nerddestroyer im Forum Visual Basic 6.0Antworten: 5Letzter Beitrag: 01.05.07, 21:03 -
Klassen: Funktionen
Von Sterpfi im Forum C/C++Antworten: 4Letzter Beitrag: 15.03.05, 13:46 -
PHP, Klassen und Funktionen
Von pxlArtizzt im Forum PHPAntworten: 3Letzter Beitrag: 26.02.05, 00:56 -
Klassen vs. Funktionen
Von chris_sit im Forum PHPAntworten: 2Letzter Beitrag: 13.10.03, 13:04





Zitieren
Login





