0

我想要做的是构建图像墙,比如 2 个随机图像。

X0X0X0X0X0(其中 X 和 O 是图像。)

现在要加载这些,我通常会使用 for 循环,例如(代码不准确,但希望你明白)

imageArray = "X", "O";

for (x = 0; x < numberOfImagesInWall; x++){

randomNum = random(2)

imageName = imageArray[randomNum];

loadimage (imageName)

.....etc....

}

当我使用这种方法时,我发现它每次都会为 X 和 O 加载图像。我想知道是否有一种方法可以预加载 X 和 O 的图像,并在我想要的任何时候重用它们,而不涉及加载。

4

2 回答 2

0
var images.Array=[new Image1().bitmapData,new Image2().bitmapData]; // adjust for your case
// this syntax is valid if you have Image1 and Image2 in your library, as bitmap images
for (var i:int=0;i< numberOfImagesInWall; i++)
{
    var b:Bitmap=new Bitmap(images[Math.floor(Math.random()*2.0)]); 
        // provide existing BitmapData as source for the image
    b.x=getX(i);
    b.y=getY(i); // give coordinates as you need it
    addChild(b);
}

提供现有 BitmapData 作为所有 Bitmap 的链接具有低内存消耗的好处,并且能够通过对所引用 BitmapData 的单个操作来更改所有相关 Bitmap。因此,例如,如果您这样做了,images[0].fillRect(images[0].rect,0xffff0000)那么您有一半的围墙位图会在没有额外努力的情况下变成红色。

于 2013-03-18T12:05:15.500 回答
0

尝试这个!

var images:Array = [img1, img2];//u will obviously need to populate this with real images
var pos:int = 0;
var newX:int = 0;

for(var i:int = 0; i < numberOfImagesInWall; i++)
{
    var bd:BitmapData = new BitmapData(images[pos].width, images[pos].height, true, 0x00000000);
    bd.draw(images[pos]); 
    var b:Bitmap = new Bitmap(bd);
    addChild(b);
    b.x = newX;
    newX += b.width;

    if(pos == 0)
        pos++;
    else
        pos = 0; 
}
于 2013-03-02T00:27:20.547 回答