actionscript-3 flex flash

actionscript 3 - URLRequest enlaces SWF mĂșltiples que no funcionan correctamente



actionscript-3 flex (4)

Sospecho que el archivo SWF externo establece algunas variables en el nivel raíz. Por lo tanto, cada carga anulará los valores anteriores y terminará con el mismo puntaje en todos los "tickers".

Lo más probable es que esta interferencia se pueda resolver cargando cada SWF en su propio ApplicationDomain . De forma predeterminada, los archivos SWF se están cargando en el mismo dominio de aplicación y comparten su código.

Entonces, en lugar de hacer esto:

urlLoader.load(request);

Deberías hacer algo como esto:

// create a new LoaderContext with a spearate ApplicationDomain var context:LoaderContext = new LoaderContext(false, new ApplicationDomain()); // load the request and use the context with the separate ApplicationDomain urlLoader.load(request, context);

Estoy tratando de cargar 3 tickers diferentes en 3 contenedores diferentes. Cuando elimino esta línea:

loader2.load(new URLRequest("http://tickers.playtech.com/jackpots/new_jackpot.swf?casino=cityclub&info=1&game=bl&font_face=Arial&bold=true&font_color=FFFFFF&bg_color=240000&font_size=24&currency=eur")); loader3.load(new URLRequest("http://tickers.playtech.com/jackpots/new_jackpot.swf?casino=cityclub&info=1&game=bl&font_face=Arial&bold=true&font_color=FFFFFF&bg_color=240000&font_size=24&currency=eur"));

y cargarlos por separado, funcionan bien:

pero cuando los cargo juntos, tal como está escrito en este documento en adobe, los tres tickers muestran el mismo número:

package { import flash.display.MovieClip; import flash.net.URLRequest; import flash.display.Loader; public class importExternalSWF extends MovieClip { private var loader:Loader = new Loader(); private var loader2:Loader = new Loader(); private var loader3:Loader = new Loader(); public function importExternalSWF() { loader.load(new URLRequest("http://tickers.playtech.com/jackpots/new_jackpot.swf?casino=cityclub&info=1&game=mrj-4&font_face=Arial&bold=true&font_color=FFFFFF&bg_color=240000&font_size=24&currency=eur")); loader2.load(new URLRequest("http://tickers.playtech.com/jackpots/new_jackpot.swf?casino=cityclub&info=1&game=bl&font_face=Arial&bold=true&font_color=FFFFFF&bg_color=240000&font_size=24&currency=eur")); loader3.load(new URLRequest("http://tickers.playtech.com/jackpots/new_jackpot.swf?casino=cityclub&info=1&game=grel&font_face=Arial&bold=true&font_color=FFFFFF&bg_color=240000&font_size=24&currency=eur")); ticker1.addChild(loader); ticker1.width=50; ticker1.height=20; ticker2.addChild(loader2); ticker2.width=50; ticker2.height=20; ticker3.addChild(loader3); ticker3.width=50; ticker3.height=20; } } }

No puedo encontrar una solución en ningún lado

Gracias

edit Reescribo mi código a esto, y sigue siendo el mismo resultado

public class importExternalSWF extends MovieClip { public function importExternalSWF() { var url = "http://tickers.playtech.com/jackpots/new_jackpot.swf"; var urlParams:Array = ["grel", "bl", "game=mrj-4"]; var tickers:Array = [ticker1, ticker2, ticker3]; var tickerHeight:Number = 50; var tickerWidth:Number = 50; loadUrls(); function loadUrls():void { for(var i:uint = 0; i<urlParams.length; i++) { var urlLoader = new Loader(); var flashvars:URLVariables = new URLVariables(); flashvars["casino"] = "cityclub"; flashvars["info"] = "1"; flashvars["game"] = urlParams[i]; flashvars["currency"] = "eur"; flashvars["font_face"] = "arial"; flashvars["bold"] = "true"; flashvars["font_size"] = "10"; flashvars["bg_color"] = "0x000000"; flashvars["font_color"] = "ffffff"; var request:URLRequest = new URLRequest(url); request.data = flashvars; urlLoader.load(request); tickers[i].width=tickerWidth; tickers[i].height=tickerHeight; tickers[i].addChild(urlLoader); } } }


Tengo malas noticias, intenté todo, pero no puedo cargar correctamente los archivos swf. Entonces, comencé a investigar esto, y descubrí que, primero, su SWF tiene el formato AVM1Movie (new_jackpot.swf), por lo tanto, concluyo que este SWF se creó con la versión 1 o 2 de ActionScript. Si ve la referencia de AVM1Movie Class (aquí el enlace ), dice lo siguiente:

Hay varias restricciones en un archivo SWF de AVM1 cargado por un archivo SWF de AVM2:

  • El archivo SWF de AVM1 cargado por un archivo SWF de AVM2 no puede cargar otro archivo SWF en esto. Es decir, no puede cargar otro archivo SWF sobre sí mismo. Sin embargo, los objetos Sprite secundarios, los objetos MovieClip u otros archivos SWF de AVM1 cargados por este archivo SWF pueden cargarse en esto.

Luego, lo intenté también, con una biblioteca que implementa Threads in Flex, y encontré esto (aquí este enlace async-threading ):

  • La máquina virtual Actionscript (AVM) en Flash Player está severamente limitada por tener solo un hilo ...

He creado varios proyectos usando cargadores, SWFLoaders, ByteArrays, etc., todo esto en actionscript 3 en Flex SDK 3.2. Tal vez si crea este proyecto en una versión anterior podría funcionar, o intente utilizar la misma biblioteca que implementa los hilos.

De todos modos, si encuentro algo más, editaré esta respuesta con otra solución que sea correcta.


Intente agregar un 1 después de «laoder» en estos lugares:

private var loader:Loader = new Loader();


loader.load(new URLRequest("http://tickers.playtech.com/jackpots/new_jackpot.swf?casino=cityclub&info=1&game=mrj-4&font_face=Arial&bold=true&font_color=FFFFFF&bg_color=240000&font_size=24&currency=eur"));


No hubo solución a este problema debido a la falta de compatibilidad de la empresa de terceros que proporciona los tickers.