嗯它只是顯示,因爲你正在運行一個for循環的6倍並將選擇的照片陸續每個新的精靈六號項目的一張照片。您將看到何時將顯示對象添加到其他顯示對象,然後將該顯示對象添加到其他顯示對象,原始項目將從第一個顯示對象中拉出並添加到下一個顯示對象中。我知道什麼時候寫了這樣的方式讓突破,可能是很難理解下來是這樣的:
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]你添加一個獨特的畫面到每個6個新的您在for循環中製作的容器精靈,因爲有添加到每個容器的獨特項目。您正在通過使用數組索引(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);
非常感謝。自從我與AS3合作以來,我感覺有點傻了,我只是通過返回並訪問位圖數據並創建一個克隆來識別出一種方式...... var newPhoto:Bitmap = new Bitmap(photoBM.BitmapData );' – davivid 2011-06-03 10:34:10
很高興它爲你工作。 – 2011-06-03 10:36:35