我有一个背景符号,用于加载外部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。那就是问题!
答案 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;
艾米