如何在不向舞台添加另一个 child 的情况下更改位图
How to change bitmap without adding another child to the stage
我确切地知道这个函数在做什么,但是我不知道如何更改它以便 3 个符号只添加一次并且只有位图发生变化。谢谢您的帮助!这可能很简单,但我似乎无法弄清楚,我是一名中级 as3 程序员,但我的知识仍有一些漏洞。
var randCount:int = 3
function loadImage():void
{
for(var i:int = 0; i<randCount; i++)
{
var imgLoader:Loader = new Loader();
var imgRequest:URLRequest = new URLRequest();
imgRequest.url = "../img/planet" + int(2*Math.random()) +".png";
trace(imgRequest.url);
imgLoader.load(imgRequest);
imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadedImg);
}
}
function onLoadedImg(e:Event):void
{
e.currentTarget.removeEventListener(Event.COMPLETE, onLoadedImg);
var bmp:Bitmap = e.currentTarget.content;
bmp.x = 600;
bmp.y = Math.random() * 520;
bmp.width = 80;
bmp.height = 80;
addChild(bmp);
}
button.addEventListener(MouseEvent.CLICK, changeBitmap);
function changeBitmap(event:MouseEvent):void {
loadImage();
}
我猜你是这样问的,因为你只是在之前的位图之上添加了更多的位图,而 "change bitmap" 你的意思是添加新位图。
您需要先删除之前添加的,然后才能添加新的。例如一个简单的改变:
var randCount:int = 3
var bitmaps:Array = [];
function loadImage():void
{
for(var i:int = 0; i<randCount; i++)
{
var imgLoader:Loader = new Loader();
var imgRequest:URLRequest = new URLRequest();
imgRequest.url = "../img/planet" + int(2*Math.random()) +".png";
trace(imgRequest.url);
imgLoader.load(imgRequest);
imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadedImg);
}
}
function onLoadedImg(e:Event):void
{
e.currentTarget.removeEventListener(Event.COMPLETE, onLoadedImg);
var bmp:Bitmap = e.currentTarget.content;
bitmaps.push(bmp);
bmp.x = 600;
bmp.y = Math.random() * 520;
bmp.width = 80;
bmp.height = 80;
addChild(bmp);
while(bitmaps.length > randCount)
{
var oldbitmap:DisplayObject = bitmaps.shift() as DisplayObject;
removeChild(oldbitmap);
}
}
只需创建一个新的 BitmapData 并将其分配给 Bitmap#bitmapData。这是处理该问题的最经济的方法。 (一个 BitmapData 也适用于多个位图。)
要完成您正在寻找的事情,您还可以使用 Sprite
作为图像的容器,每次您都可以删除它们以添加新图像。看看这个例子:
var nb_images:int = 3,
bmp:Bitmap,
// set 5px as vertical margin between images
img_margin:int = 5,
img_request:URLRequest,
img_loader:Loader;
var images_container:Sprite = new Sprite();
addChild(images_container);
function remove_all_images(): void
{
// remove all images
for(var i:int = images_container.numChildren - 1; i >= 0; i--)
{
images_container.removeChildAt(i);
}
}
function load_images(): void
{
remove_all_images();
for(var i:int = 0; i < nb_images; i++)
{
// to generate randomly values between 0 and n (excluded) we use : int(n * Math.random())
img_request = new URLRequest('images/' + (int(nb_images * Math.random())) + '.png')
img_loader = new Loader();
img_loader.load(img_request);
img_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, on_img_loaded);
}
}
function on_img_loaded(e:Event): void
{
e.currentTarget.removeEventListener(Event.COMPLETE, on_img_loaded);
bmp = e.currentTarget.content;
bmp.smoothing = true;
bmp.x = 0, bmp.width = bmp.height = 80;
// set image.y
// 1st image : y = 0, 2nd image : y = 80 + 5 = 85, 3rd image : y = 2 x 85 = 170
bmp.y = images_container.numChildren * (bmp.height + img_margin);
// add the image to images_container
images_container.addChild(bmp);
}
希望能帮到你。
我确切地知道这个函数在做什么,但是我不知道如何更改它以便 3 个符号只添加一次并且只有位图发生变化。谢谢您的帮助!这可能很简单,但我似乎无法弄清楚,我是一名中级 as3 程序员,但我的知识仍有一些漏洞。
var randCount:int = 3
function loadImage():void
{
for(var i:int = 0; i<randCount; i++)
{
var imgLoader:Loader = new Loader();
var imgRequest:URLRequest = new URLRequest();
imgRequest.url = "../img/planet" + int(2*Math.random()) +".png";
trace(imgRequest.url);
imgLoader.load(imgRequest);
imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadedImg);
}
}
function onLoadedImg(e:Event):void
{
e.currentTarget.removeEventListener(Event.COMPLETE, onLoadedImg);
var bmp:Bitmap = e.currentTarget.content;
bmp.x = 600;
bmp.y = Math.random() * 520;
bmp.width = 80;
bmp.height = 80;
addChild(bmp);
}
button.addEventListener(MouseEvent.CLICK, changeBitmap);
function changeBitmap(event:MouseEvent):void {
loadImage();
}
我猜你是这样问的,因为你只是在之前的位图之上添加了更多的位图,而 "change bitmap" 你的意思是添加新位图。
您需要先删除之前添加的,然后才能添加新的。例如一个简单的改变:
var randCount:int = 3
var bitmaps:Array = [];
function loadImage():void
{
for(var i:int = 0; i<randCount; i++)
{
var imgLoader:Loader = new Loader();
var imgRequest:URLRequest = new URLRequest();
imgRequest.url = "../img/planet" + int(2*Math.random()) +".png";
trace(imgRequest.url);
imgLoader.load(imgRequest);
imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadedImg);
}
}
function onLoadedImg(e:Event):void
{
e.currentTarget.removeEventListener(Event.COMPLETE, onLoadedImg);
var bmp:Bitmap = e.currentTarget.content;
bitmaps.push(bmp);
bmp.x = 600;
bmp.y = Math.random() * 520;
bmp.width = 80;
bmp.height = 80;
addChild(bmp);
while(bitmaps.length > randCount)
{
var oldbitmap:DisplayObject = bitmaps.shift() as DisplayObject;
removeChild(oldbitmap);
}
}
只需创建一个新的 BitmapData 并将其分配给 Bitmap#bitmapData。这是处理该问题的最经济的方法。 (一个 BitmapData 也适用于多个位图。)
要完成您正在寻找的事情,您还可以使用 Sprite
作为图像的容器,每次您都可以删除它们以添加新图像。看看这个例子:
var nb_images:int = 3,
bmp:Bitmap,
// set 5px as vertical margin between images
img_margin:int = 5,
img_request:URLRequest,
img_loader:Loader;
var images_container:Sprite = new Sprite();
addChild(images_container);
function remove_all_images(): void
{
// remove all images
for(var i:int = images_container.numChildren - 1; i >= 0; i--)
{
images_container.removeChildAt(i);
}
}
function load_images(): void
{
remove_all_images();
for(var i:int = 0; i < nb_images; i++)
{
// to generate randomly values between 0 and n (excluded) we use : int(n * Math.random())
img_request = new URLRequest('images/' + (int(nb_images * Math.random())) + '.png')
img_loader = new Loader();
img_loader.load(img_request);
img_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, on_img_loaded);
}
}
function on_img_loaded(e:Event): void
{
e.currentTarget.removeEventListener(Event.COMPLETE, on_img_loaded);
bmp = e.currentTarget.content;
bmp.smoothing = true;
bmp.x = 0, bmp.width = bmp.height = 80;
// set image.y
// 1st image : y = 0, 2nd image : y = 80 + 5 = 85, 3rd image : y = 2 x 85 = 170
bmp.y = images_container.numChildren * (bmp.height + img_margin);
// add the image to images_container
images_container.addChild(bmp);
}
希望能帮到你。