Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 04-07-2011, 10:06   #1 (permalink)
Padawan
 
Benutzerbild von Seebold
 
Registriert seit: Dec 2005
Ort: Hannover
Beiträge: 75
Question Getter und "nicht definierte Eigenschaft": WARUM?

Hallo liebes Forum,

das Thema ist zwar schon oft im Forum angesprochen worden, aber eine Lösung zu meinem (ich dachte einfachen) Problem konnte ich nicht finden:

Ich habe einen Parentmovieclip mit der Klasse "E3" darin wird über einen CustomEvent der Stage aus die Funktion "onCallE3" aufgerufen:

Code:
public var filmname:String;

public function E3() {
	//Konstruktor;
	this.filmname = "";
}

public function onCallE3(evt:CustomEvent = null):void {
	if (evt.methode == "Aktualisieren" && evt.zielebene >= 3) {
		var nameArray:Array = evt.argument.split("_");
		this.filmname = nameArray[0]+"_"+nameArray[1]
		var libname = "lib_" + nameArray[0];
		imgObj = getDisplayObject(libname);
		this.addedChild = this.addChildAt(imgObj, 0);
}

public function get getFilmName():String {
	return this.filmname;
}
Die Funktion instanziert einen MC aus der Bibliothek mit dem Namen z.b. "lib_movieplayer". Der Getter soll den abzuspielenden Dateienamen des Filmclips ausspucken, wenn das soeben instanzierte Child danach fragt.

Das sieht dann so aus:

Code:
public function cl_videocont() {
	this.addEventListener(Event.ADDED_TO_STAGE, onAdded);
}

function onAdded() {
	arguments;
	trace("cl_videocont: onAdded " + this.name + " parent " + this.parent.name + "Filmname " + this.parent.getFilmName );
}
Die Rückgabe von this.parent.name ist "E3", also korrekt. Die Rückgabe von this.parent.getFilmName gibt folgende Fehlermeldung zurück:

Zitat:
Z:1119: Zugriff auf eine möglicherweise nicht definierte Eigenschaft getFilmName über einen Verweis mit statischem Typ flash.displayisplayObjectContainer
Warum? Das sollte doch so gehen, oder? Dass ich nicht auf Eigenschaften anderer Klassen zugreifen kann, macht mir bei diesem Projekt ohnehin viele Sorgen. Eine eventbasierte Lösung, die ich zuvor erprobt habe, scheiterte am Timing :-(

Danke für Eure Hilfe

PS: Ich finde es taktlos bei einem Mann in meiner Lage, dass die Forumssoftware einen Smily in display : D isplayObjectContainer baut als wolle sie mich verhöhnen ;-)
Seebold ist offline   Mit Zitat antworten
Alt 04-07-2011, 10:22   #2 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Die Eigenschaft parent ist nun mal vom Typ DisplayObjectContainer. Und da diese Klasse eben nicht die Eigenschaft getFilmName besitzt bekommst Du diese Fehlermeldung. Für eine typsicheren Zugriff müsstest Du diese Variable also auf E3 casten:
PHP-Code:
traceE3(parent).getFilmName ); 
Generell sollte man solche Zugriffe nach oben aber vermeiden (oder über Events lösen), da die Klasse E3 ja überhaupt nicht wissen kann, von welcher Klasse sie instanziiert und in welchem DisplayObject sie positioniert wird.

Eine get-Funktion sollte IMHO kein "get" im Funktionsnamen haben, weil das spätestens dann seltsam aussieht, wenn man mal eine zugehörige set-Funktion anlegt:
PHP-Code:
public function set getFilmName():String //... 
Und da filmname eh schon public ist, kannst Du Dir die get-Funktion übrigens auch schenken und direkt auf diese Variable zugreifen.

Zitat:
Zitat von Seebold Beitrag anzeigen
Dass ich nicht auf Eigenschaften anderer Klassen zugreifen kann, macht mir bei diesem Projekt ohnehin viele Sorgen.
Natürlich kann man das - solange diese public deklariert sind und die Referenz auf die Instanz den richtigen Typ hat.
Zitat:
Zitat von Seebold Beitrag anzeigen
Eine eventbasierte Lösung, die ich zuvor erprobt habe, scheiterte am Timing :-(
Das ist seltsam
Events sind eigentlich das Mittel der Wahl für die Kommunikation nach oben (parent) und wurden zudem gerade dafür, erfunden Timing-Problem zu vermeiden...

Wie sah denn der Code dieser Lösung aus?
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!

Geändert von Martin Kraft (04-07-2011 um 10:25 Uhr)
Martin Kraft ist offline   Mit Zitat antworten
Alt 04-07-2011, 10:49   #3 (permalink)
Padawan
 
Benutzerbild von Seebold
 
Registriert seit: Dec 2005
Ort: Hannover
Beiträge: 75
Eventbasiert...

Ich habe allerlei Umbaumaßnahmen hinter mir, dadurch leidet der Code :-( "E3" hatte bei mir den Event ausgerufen, der dem Videoplayer den "Play"-Aufruf samt Filmname übermittelt hat. Das war zu Zeiten, als der MoviePlayer zu Beginn des Projekts gestartet wurde und die ganze Zeit lief. Leider hat er bei bestimmten Wegen durch die Navigation den close()-Aufruf nicht ausgeführt, weshalb Videos sind überlagerten. Nun wollte ich den Player jedesmal komplett eliminieren. Nun kommt aber der Player nicht so schnell auf die Füße, das Event zu empfangen.

Nun zu meinem Verständnis und dem Fakt, dass Build-in-Events keine Argumente übermitteln:
Natürlich müsste der Movieplayer einen Event schmeißen, wenn er bereit ist. Darauf reagiert dann "E3" und macht was? Wie kommt der Filmname zum MoviePlayer? Darf ich da dann direkt get/set des Childs ausführen oder gar Variablen setzen?
Seebold ist offline   Mit Zitat antworten
Alt 04-07-2011, 11:06   #4 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Zitat:
Zitat von Seebold Beitrag anzeigen
Natürlich müsste der Movieplayer einen Event schmeißen, wenn er bereit ist. Darauf reagiert dann "E3" und macht was? Wie kommt der Filmname zum MoviePlayer?
Übergib Ihn doch einfach an den Konstruktor, oder ruf eine Funktion auf, nachdem Du den Player instanziiert hast.

Hier mal ein BeispielCode. MoviePlayer ist die Klasse Deines VideoPlayers und wird in der Bibliothek mit dem zugehörigen Symbol verknüpft. start ist die Funktion zum Abspielen des Videos.
PHP-Code:
package {
    
import flash.display.Sprite;
    
    public class 
MoviePlayer extends Sprite {
        
        public function 
MoviePlayer() {
            
// Initialisieren des Players
        
}
        
        public function 
starturl:String ):void {
            
// Abspielen der URL
        
}
        
    }
    

Das Script im übergeordneten Objekt sähe dann so aus:
PHP-Code:
function startVideourl:String ):MediaPlayer {
  var 
moviePlayer:MoviePlayer = new MoviePlayer();
  
addChild(moviePlayer);
  
moviePlayer.starturl );

Zitat:
Zitat von Seebold Beitrag anzeigen
Darf ich da dann direkt get/set des Childs ausführen oder gar Variablen setzen?
Klar. Warum auch nicht?
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!

Geändert von Martin Kraft (04-07-2011 um 11:09 Uhr)
Martin Kraft ist offline   Mit Zitat antworten
Alt 04-07-2011, 12:46   #5 (permalink)
Padawan
 
Benutzerbild von Seebold
 
Registriert seit: Dec 2005
Ort: Hannover
Beiträge: 75
Ok, wenn ich richtig verstehe:

- Die Eltern setzen die Kinder in die Welt
- Wenn die Kinder was wollen, müssen sie brüllen
- und die Eltern gucken dann, ob das Kind was in der Windel hat.

Momentan brüllen bei mir auch die Eltern rum und die Kinder gucken sich selbst in die Windel um das Ergebnis dann wieder zurück zu brüllen. Darum ist das so laut hier ;-)

Danke dafür und für die schnelle Antwort. Das war sehr wichtig für mein Weiterkommen/Fertigwerden :-)
Seebold ist offline   Mit Zitat antworten
Alt 04-07-2011, 14:06   #6 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Zitat:
Zitat von Seebold Beitrag anzeigen
Ok, wenn ich richtig verstehe:

- Die Eltern setzen die Kinder in die Welt
- Wenn die Kinder was wollen, müssen sie brüllen
- und die Eltern gucken dann, ob das Kind was in der Windel hat.

Momentan brüllen bei mir auch die Eltern rum und die Kinder gucken sich selbst in die Windel um das Ergebnis dann wieder zurück zu brüllen. Darum ist das so laut hier ;-)
Sehr schön ausgedrückt
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!
Martin Kraft ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
1119, eigenschaft, getter, nicht definierte, variable übergeben

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
onMouseWheelEvent: delta ist nicht definierte Eigenschaft. Warum? Seebold ActionScript 3 12 02-09-2010 09:39
[Flash 8] Eigenschaft "Visible" funktioniert nicht Sylvus Flash Einsteiger 2 11-08-2009 15:36
Externe Dokumentenklasse / "nicht definierte Eigenschaft" websister ActionScript 3 5 08-08-2009 10:41
Warum fehlt bei der Checkbox Komponente, sowas wie eine "data" Eigenschaft? Oscar07 Komponenten und SmartClips 3 16-05-2007 16:21
fscommand("exec","file.exe") ... WARUM KLAPPT DAS NICH? Nelkenpflanzer Flash 4 und Flash 5 7 15-12-2002 15:50


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:12 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele