Soy nuevo en esto del desarrollo en flash y todabia no estoy muy acostumbrado al lenguaje.
Os comento mi problema a ver si me podeis indicar que hago mal ya que llevo mas de una semana y no consigo avanzar nada ni sacar nada en claro:
Estoy desarrollando una herramienta cuyo funcionamiento es el siguiente, un SWF PADRE en AS3 que carga y reproduce MovieClips(MC) y videos AVM1(AV). Para los MC no hay problema cargandolos con un Loader y añadiendoselos como hijo en el padre, hasta ahi todo correcto.
Para poder cargar los AV tengo un SWF HIJO en AS2, de manera que si tengo que cargar en el PADRE videos de tipo AV lo que hago es cargar en un loader el SWF HIJO y comunicarme con el mediante LocalConnection para que sea el HIJO el que reproduzca el video AV y realice eventos. Hay comunicacion bidireccional entre PADRE e HIJO
Los 2 SWF PADRE e HIJO estan en el mismo servidor, en la misma ruta de echo para evitar problemas
Codigo del HIJO:
Código ActionScript :
import mx.events.EventDispatcher;
EventDispatcher.initialize(MovieClip.prototype);
var AVM_lc:LocalConnection = new LocalConnection();
var marco:MovieClip = createEmptyMovieClip("marco", this.getNextHighestDepth());
var mcLoader:MovieClipLoader = new MovieClipLoader();
var listener = new Object();
//mcLoader.loadClip("../01-01-001.swf", marco);
listener.onLoadInit = function(mc:MovieClip) {
AVM_lc.send("hijo2padre", "hijo2padre_mensaje", "play...");
}
listener.onLoadComplete = function(mc:MovieClip) {
AVM_lc.send("hijo2padre", "hijo2padre_mensaje", "cargado");
}
listener.onLoadProgress = function(mc:MovieClip, loadedBytes:Number, totalBytes:Number) {
AVM_lc.send("hijo2padre", "hijo2padre_mensaje", "cargando",
Math.round((mc.getBytesLoaded()/mc.getBytesTotal())*100));
}
mcLoader.addListener(listener);
function onEnterFrame(mc:MovieClip) {
if (marco._totalframes > 0){
if (marco._currentframe == marco._totalframes){
marco.stop();
AVM_lc.send("hijo2padre", "hijo2padre_mensaje", "finsec");
}
}
}
AVM_lc.init = function(){
marco.unloadMovie();
AVM_lc.send("hijo2padre", "hijo2padre_mensaje", "init");
}
AVM_lc.loadPeli = function(url:String){
marco.unloadMovie();
mcLoader.loadClip(url, marco);
AVM_lc.send("hijo2padre", "hijo2padre_mensaje", "loadPeli");
}
//Funciones play y pause
AVM_lc.stopPeli = function(){
marco.stop();
AVM_lc.send("hijo2padre", "hijo2padre_mensaje", "stopPeli");
}
AVM_lc.playPeli = function(){
marco.play();
AVM_lc.send("hijo2padre", "hijo2padre_mensaje", "playPeli");
}
AVM_lc.connect("padre2hijo");
AVM_lc.client = this;
Codigo del PADRE:
Código ActionScript :
import .... (import necesarios)
public class PADRE extends MovieClip {
private var AVM_lc:LocalConnection = new LocalConnection();
private var _loadAVM1:Loader;
private var sec4hijo:MovieClip;
public function PADRE() { //Constructor
//Listener de la conexion y preparada para recibir mensajes del HIJO
AVM_lc.addEventListener(StatusEvent.STATUS, onConnStatus);
AVM_lc.connect("hijo2padre");
AVM_lc.client = this;
cargarHIJO();
}
private function onConnStatus(event:StatusEvent):void{
switch (event.level) {
case "status":
trace("---- LocalConnection.send() succeeded");
break;
case "error":
trace("---- LocalConnection.send() failed");
break;
}
}
private function cargarHIJO():void{
_loadAVM1 = new Loader();
_loadAVM1.contentLoaderInfo.addEventListener(Event.COMPLETE, HIJOcargado);
try {_loadAVM1.load(new URLRequest("HIJO.swf"));}
catch (error:ArgumentError) { trace("ArgumentError"); }
catch (error:SecurityError) { trace("SecError");}
}
private function HIJOcargado(ev:Event):void {
sec4hijo= new MovieClip();
sec4hijo.addChild(_loadAVM1);
//Ya tengo el hijo cargao y le enviamos el primer mensaje
AVM_lc.send("padre2hijo", "init");
}
//Funcion k escucha los mensajes del HIJO
public function hijo2padre_mensaje(dato:String):void{
trace("---- MsgDelHIJO: [" + dato + "]");
switch(dato){
case "init": //el puente ya esta inicializado
//envio al HIJO un mensaje con la URL del video que tiene que crgar
AVM_lc.send("padre2hijo", "loadPeli", "videoAV.swf");
......
break;
case "finsec":
....
break;
default:
}
}
}
Visto este codigo el flujo es el siguiente el PADRE se construye y carga en memoria el SWF del HIJO, cuando este se ha cargado en memoria se le envia un primer mensaje (que no hace nada interesante) y en cuanto el HIJO responde al PADRE, este le manda de nuevo otro mensaje indicando la URL que tiene que cargar el HIJO.
Contado el flujo y toda la parrafada anterior, mi problema es que si ejecuto esto en local depurandolo, la primera traza del LocalConnection.send() es "---- LocalConnection.send() failed" siempre!! aun asi, el HIJO esta respondiendo ya que la siguiente traza que pinta le PADRE es "---- bridgeMsg: [init]"
Acto seguido al invocar el loadPeli desde el PADRE sale la traza "---- LocalConnection.send() succeeded" y la respuesta del HIJO "---- bridgeMsg: [loadPeli]"
Haga lo que haga siempre la primera llamada que hago con el LocalConnection me sale fallida aunque el hijo responda. Y cuando hago la prueba subiendo mis swf compilados al servidor, nunca se me llega a cargar ningun video y creo que es porque el fallo del LocalConnection me esta parando el flujo
Muchisimas gracias de antemano y un saludo
Jorge
