嗯,它只显示第 6 个项目上的一张照片,因为您运行了 6 次 for 循环,并将所选照片连续添加到每个新精灵中。您会看到,当您将一个显示对象添加到另一个显示对象,然后将同一显示对象添加到其他对象时,原始项目将从第一个显示对象中拉出并添加到下一个显示对象中。我知道这样写可能很难理解,所以让我们这样分解:
var photo:Sprite = new Sprite();
var container1:Sprite = new Sprite();
var container2:Sprite = new Sprite();
//Add to the first container
container1.addChild(photo);
//At this point when you add to the next container, the object is removed from container1 and placed inside container 2
container2.addChild(photo);
这就是为什么当您使用 _model.photos[ii] 时,您需要为在 for 循环中创建的 6 个新容器精灵中的每一个添加一张唯一的图片,因为每个容器中都需要添加唯一的项目。您可以通过使用随每个循环递增的数组索引(ii var)来访问这些唯一的项目。
如果您想将相同的图片添加到每六个项目中,那么您将需要将原始图片的数据复制 6 次。实现此目的的一种方法是使用 URLLoader 对象并重新加载构成原始图片的二进制数据。你会这样做:
var originalPictureLoader:URLLoader = new URLLoader();
originalPictureLoader.addEventListener(Event.COMPLETE, originalPictureLoaded);
originalPictureLoader.dataFormat = URLLoaderDataFormat.BINARY;
originalPicture.load(new URLRequest("http://www.mysite.com/picture.jpg"));
private function originalPictureLoaded(e:Event):void
{
var pictureBytes:ByteArray = URLLoader(e.currentTarget).data as ByteArray;
var imageDiplicateLoader:Loader;
for (var ii:int; ii < 6; ii++)
{
//Create BG
var s:Sprite = new Sprite();
s.graphics.beginFill(Math.random() * 0xffffff, 0.4);
s.graphics.drawRect(0, 0, 291, 184);
//add Photo
var p:Sprite = new Sprite();
imageDiplicateLoader = new Loader();
imageDiplicateLoader.loadBytes(pictureBytes);
p.addChild(imageDiplicateLoader);
p.scaleX = p.scaleY = 0.2;
p.x = 0;
p.y = 0;
s.addChild(p);
cards.push(s);
}
}
现在请记住,这只是一种方法,而且我已将其写在脑海中。所以,我不确定,但您可能需要在 for 循环内复制 pictureBytes 数据,但我不这么认为。如果你确实需要这样做,你可以这样做:
var bytesCopy:ByteArray = new ByteArray();
pictureBytes.position = 0;
bytesCopy.writeBytes(pictureBytes);