VideoPlayer Class Problem

oaki

Erfahrenes Mitglied
Hallo zusammen!

Ich möchte mir einen VideoPlayer basteln und das ganze in OOP programmieren.
Bei dem Code weiter unten will ich jede halbe Sekunde die derzeitig Position des Videos ausgeben. Das funktioniert soweit auch aber nur, wenn ich den die NetStream Variable "nets" der Funktion "getVideoPosition" weitergebe.
Eigentlich müsste ich doch das gar nicht tun da ja die "nets" Variable oben in der Klasse deklariert wurde oder?
Wenn ich sie weglasse das wird aber nur "undefined" ge-traced...
Weiss jemand wieso?

Vielen Dank!

Code:
class videoPlayer {
	var netConn;
	var nets;
	var meta;
	var interval_id;
 	var testvar = "Hello world!"; 
	
 function videoPlayer() {
		this.netConn = new NetConnection();
		this.netConn.connect(null);
			trace("NetConnection established");
		this.nets = new NetStream(this.netConn);
			trace("NetStream established");
	
		this.play("test_video.flv");
				
		this.interval_id = setInterval(getVideoPosition, 1000, nets);
		trace(testvar);
 }
	
	function getVideoPosition(nets)	{
			trace(nets.time);
			return nets.time;
	}
	
	function play(url)	{
		if (url != undefined) 		{
			this.nets.play(url);
			return;
		}
	}


// CLASS END	
}
 
Hi,

wenn Du die Methode per setInterval mit dieser Syntax aufrufst, geht Dir die Referenz auf das aktuelle Objekt (und daher auch seinen Membern) verloren. Probiers mal so:
Code:
this.interval_id = setInterval(this, "getVideoPosition", 1000);
(Beachte, dass bei dieser Parameterreihenfolge der Methodenname in Anführungszeichen notiert wird)
Code:
	function getVideoPosition():Void{
			trace(this.nets.time);
			return;
	}
(Es bringt hier m.E. nichts, wenn die Funktion einen Wert zurückgibt, da Du mit der setInterval-Methode ja keine Wertzuweisung oder -verarbeitung vornimmst.

Gruß
.
 
perfekt!

Vielen Dank Tobi!
Hast du ne Ahnung wieso das die erste Variante nicht ging?

Gruss
 
Wie gesagt: Beim Schema [ Funktionsreferenz, Intervall, Parameter ] wird der aufgerufenen Methode kein Verweis auf das aktuelle Objekt (this) mitgegeben (die Gründe dafür dürften in den internen Abläufen des Interpreters liegen). (u.a.) Daher gibt es eine zweite Implementation [ Objektreferenz(, auf dem die Methode ausgeführt wird), Methodenname, Intervall[, Parameter] ]

Gruß
.
 

Neue Beiträge

Zurück