与装载机决斗加载同样的东西两次的麻烦

时间:2011-07-19 16:46:07

标签: flash actionscript-3 programming-languages loading external

我有一个背景符号,用于加载外部jpg作业,以及一个引擎as3,可在屏幕上连续循环2个背景。但是,只有一个背景可以加载文件,尽管它们是来自同一符号的“新”。为了测试这个urr ...现象,我交换了2个背景的“新”代码的顺序,然后在顶部将完美加载jpg文件而另一个将保持空白。 以前有人遇到过这个问题吗?或者知道如何解决它?请教我。从一开始,这种外部装载对我来说真的很痛苦。

对于代码:(因为它非常基本,所以我认为我可以忽略它;抱歉给您带来不便)

背景代码

var URLvar:URLRequest;
var fBGLoader : Loader = new Loader( );
URLvar = new URLRequest( "background collection/fyrise/fyriseFront.png" );
fBGLoader.load(URLvar);
this.addChild(fBGLoader);

引擎代码

private var B1:fBG;
private var B2:fBG;
private var Container= new MovieClip();
BLen=2500;
B2=new fBG();
B1=new fBG();

B1.x=0;
B1.y=0;
B2.x=B1.x-BLen;
B2.y= B1.y;
Container.addChild(B1);
Container.addChild(B2);
stage.addChild(Container);

所以你可以看到,我把B2 =新fBG()放在B1 =新fBG()之前,然后我可以看到B2而不是B1,如果我交换订单,我可以看到B1而不是B2。那就是问题!

4 个答案:

答案 0 :(得分:1)

您要加载图像两次还是只加载一次?如果您加载图像一次并将其用于两个fBG对象,您将遇到该问题,因为Bitmap对象只能有一个父对象(最后一个addChild(fBGLoader)是唯一有效的,第一个将被后一个取消)。

要解决此问题,您需要确保两个fBG对象都有自己的Bitmap实例(但它们可以共享相同的BitmapData)。所以无论你在做什么:

this.addChild(fBGLoader);

请改为:

var img : Bitmap = Bitmap(fBGLoader.content);
this.addChild(new Bitmap(img.bitmapData));

这将确保每个fBG对象都有自己的坐标和信息集来显示背景图像。

答案 1 :(得分:0)

我在wonderfl:http://wonderfl.net/c/1dze

上放了一个小例子

我只是尝试加载相同的图像两次 - 它的工作原理。这是代码:

package {
  import flash.net.URLRequest;
  import flash.display.Loader;
  import flash.display.Sprite;
  public class FlashTest extends Sprite {

     private var loader1:Loader;
     private var loader2:Loader;

     public function FlashTest() {
        loader1 = new Loader();
        loader2 = new Loader();
        loader2.x = 40;
        loader2.y = 40;

        loader1.load(new URLRequest("http://4.bp.blogspot.com/_zqzgnaU9IiE/TIuSdJyuWsI/AAAAAAAAAA0/4qVZxO503vE/s1600/fat+cat.jpg"));
        loader2.load(new URLRequest("http://4.bp.blogspot.com/_zqzgnaU9IiE/TIuSdJyuWsI/AAAAAAAAAA0/4qVZxO503vE/s1600/fat+cat.jpg"));
        addChild(loader1);
        addChild(loader2);
     }
  }
}

问题必须出在代码的其他地方。

可能首先尝试更改动画片段的位置以查看是否都加载了 - 就像我在上面的代码中所做的那样。

修改

你也可以把它分成两个类:

package {
  import flash.display.Sprite;

  public class FlashTest extends Sprite {
    private var bgLoader1:BGLoader;
    private var bgLoader2:BGLoader;

    public function FlashTest() {
        bgLoader1 = new BGLoader();
        bgLoader2 = new BGLoader();
        bgLoader2.x = 40;
        bgLoader2.y = 40;
        addChild(bgLoader1);
        addChild(bgLoader2);
    }
  }
}

然后

package {
  import flash.display.Loader;
  import flash.display.Sprite;

  public class BGLoader extends Sprite {
    private var loader:Loader;
    public function BGLoader() {
        loader = new Loader();
        loader.load("URLTOIMAGE");
        addChild(loader);
    }
  }
}

答案 2 :(得分:0)

“背景代码”是fBG类吗?如果是这样,那个代码是在构造函数中运行的吗?如果是这样,我认为您的解决方案应该有效。但是如果没有更多的背景,很难说。

您应该可以加载相同的图像两次,没有问题。所以我的猜测是你的问题围绕你如何设置你的类(例如我之前提到的上下文)。我猜你在那里有一些其他问题没有在你提供的代码中显示。

顺便说一句,如果您只想要两个相同的图像,则不需要两个单独的加载器。您可以只加载一次图像,然后使用Bitmap类创建Loader内容的副本。

哦,再看看你的陈述:

BLen=2500;

不起作用。你需要这样的东西:

var BLen:Number = 2500;

答案 3 :(得分:0)

如果我正确阅读了您的代码,您的一个实例是屏幕上的-2500像素x坐标。图形是否可能正在加载,但因为它位于视口左侧,所以您无法看到它?

另外,我同意其他一些海报,最好只加载一次文件,然后复制它。您可以在此处找到有关执行此操作的详细信息:http://www.adobe.com/devnet/flash/articles/blitting_mc.html

HTH;

艾米