1

我有一个背景符号,加载外部jpg作业,并引擎as3连续循环2背景在屏幕上。但是,只有一个背景可以加载文件,尽管它们是来自同一个符号的“新”。为了测试这个urr ...现象,我交换了2个背景的“新”代码的顺序,然后上面的任何一个将完美加载该jpg文件,另一个将保持空白。 有没有人遇到过这个问题?或知道如何解决它? PLZ教我。从一开始,这种外部负载对我来说真的很痛苦。与加载程序加载相同的东西两次决斗的麻烦

的代码:(因为它是非常非常基本的,所以我认为我可以忽视它,敬请原谅)

后台代码

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

所以你可以看到,我在B1 = new fBG()之前放置了B2 = new fBG(),然后我可以看到B2但不是B1,如果交换顺序,我可以看到B1而不是B2。那就是问题所在!

+0

什么是T_T?并请添加一些相关的代码。否则很难猜测问题。 – taskinoor

+0

你能发表你正在用来加载和循环的代码块吗? – Corey

+0

@taskinoor T_T是一个微笑 –

回答

1

您是否加载图像两次或只是一次?如果你加载一次图像并将它用于两个fBG对象,你将会遇到这个问题,因为Bitmap对象只能有一个父对象(最后一个addChild(fBGLoader)是唯一可用的,第一个将被后一个对象取消)。

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

this.addChild(fBGLoader); 

而是执行此操作:

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

这将确保每个FBG对象有它自己的一套坐标和信息的显示背景图片。

+0

如果您通过Loader类加载图像,则不必混淆Bitmap或BitmapData类/对象 - 至少不需要,如果只是想显示它们。 – pkyeck

+0

谢谢你,但它说TypeError:错误#1009:无法访问空对象引用的属性或方法 –

+0

对不起,我犯了一个错误的代码,它不是加载器,而是需要被注释的加载器的内容。我会更新答案 – Godfather

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); 
    } 
    } 
} 
+0

是的,它可以工作,因为你有2个加载器,但我只有一个在后台符号。我只是在主AS中新增了这个符号2次,而且它看起来不能在背景符号中复制加载代码。非常感谢你,也许我有2个2符号代表两个新代码的好处。 T_T –

+0

然后你也有两个装载机... :( – pkyeck

+0

??我只在后台代码中得到1:fBGLoader.load(URLvar) –

0

就是 “后台代码” 的fBG类?如果是这样,代码是否在构造函数中运行?如果是这样,我认为你的解决方案应该工作。但是如果没有看到更多的背景,很难说。

你应该能够加载相同的图像两次,没有问题。所以我的猜测是你的问题是围绕你如何设置你的课程(例如我之前提到的上下文)进行的。我猜你还有其他问题没有在你提供的代码中显示。

顺便说一句,如果你只是想要两个相同的图像,你并不需要两个独立的装载机。您只需加载一次图像,然后使用Bitmap类创建Loader内容的副本。

哦,在第二次看,你的发言:

BLen=2500; 

将无法​​正常工作。你需要这样的东西:

var BLen:Number = 2500; 
+0

非常感谢你,很抱歉,我没有正确地从as文件复制我的代码。我之前做过var。在我使用Flash文件中的实例更改加载外部文件之前,所有工作都完美无缺。我认为我的情况就像教父上面所描述的那样。请帮我解决这个问题。非常感谢。 –

+0

那么,在这种情况下,我们肯定需要更多地了解您的文件的结构。如果你发布的代码之前工作过,那似乎表明你已经完成了其他事情(你如何组织你的类,文件是什么样的,等等)是问题所在。我建议你发布有关每个文件的外观的更多信息(或者如果你没有使用外部.as类文件,你的FLA的结构如何)。 – Allan

0

你的一个实例是在屏幕上-2500像素的x坐标,如果我正确地读你的代码。是否有可能加载了图形,但是因为它距离视口左侧很远,所以看不到它?

此外,我同意一些其他海报,它可能更好只加载一次,然后复制它。你可以在这里找到更多关于这样做的技术:http://www.adobe.com/devnet/flash/articles/blitting_mc.html

HTH;

Amy