4

我正在尝试在 3 个不同的容器中加载 3 个不同的代码。当我删除这一行时:

 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"));

并分别加载它们工作正常:

在此处输入图像描述

但是当我将它们加载在一起时,就像在 adobe 中的本文档中所写的那样,所有三个代码都显示相同的数字:

在此处输入图像描述

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;      
        }
    }
}

我在任何地方都找不到解决方案

谢谢

编辑我将我的代码重写为这个,它仍然是相同的结果

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);
            }
        }
    }
4

4 回答 4

3

我怀疑外部 SWF 文件在根级别设置了一些变量。因此,每个负载都将覆盖以前的值,并且您最终会在所有“代码”中获得相同的分数。

这种干扰很可能可以通过将每个 SWF 加载到自己的ApplicationDomain. 默认情况下,SWF 被加载到同一个ApplicationDomain并共享它们的代码。

所以不要这样做:

urlLoader.load(request);

你应该这样做:

// 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);
于 2013-07-25T15:39:30.237 回答
3

我有坏消息,我尝试了所有方法,但无法正确加载 swf 文件。因此,我已经开始对此进行调查,并且我发现,首先,您的 SWF 具有 AVM1Movie 格式 (new_jackpot.swf),因此,我得出结论,此 SWF 是使用版本 1 或 2 的 ActionScript 创建的。如果您看到 AVM1Movie Class 的参考资料(此处为链接),说明如下:

AVM2 SWF 文件加载的 AVM1 SWF 文件有几个限制:

  • 由 AVM2 SWF 文件加载的 AVM1 SWF 文件无法将另一个 SWF 文件加载到此文件中。也就是说,它不能在自身之上加载另一个 SWF 文件。但是,此 SWF 文件加载的子 Sprite 对象、MovieClip 对象或其他 AVM1 SWF 文件可以加载到此。

然后,我也尝试了一个在 Flex 中实现线程的库,并找到了这个(这里是这个链接async-threading):

  • Flash Player 中的 Actionscript 虚拟机 (AVM) 受到严重限制,只有一个线程...

我已经使用 Loaders、SWFLoaders、ByteArrays 等创建了几个项目,所有这些都在 Flex SDK 3.2 的 actionscript 3 中。也许如果您在以前的版本中创建这个项目可以工作,或者尝试使用实现线程的相同库。

无论如何,如果我发现更多内容,将使用另一个正确的解决方案编辑此答案。

于 2013-07-29T01:49:41.403 回答
2

尝试在这些地方的 «laoder» 之后添加 1:

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"));
于 2013-07-31T02:43:43.767 回答
0

由于提供代码的第三方公司缺乏兼容性,因此无法解决此问题。

于 2013-08-22T17:14:21.547 回答