从加载程序中删除特定图像

Delete specific image from loader

我在屏幕上显示了来自同一个加载程序的三张图片。单击后我需要删除特定(目标)位图。我在下面有一个 onClick 函数,非常感谢任何帮助。谢谢!

var nb_images:int = 3;

var bmp:Bitmap = new Bitmap;

var img_margin:int = stage.stageHeight/3.5;
var img_request:URLRequest;
var img_loader:Loader;

var images_container:Sprite = new Sprite();
addChild(images_container);

function remove_all_images():void {
    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++) {
        img_request = new URLRequest('../img/planet' + (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.x = 600, bmp.width = bmp.height = 80;
    bmp.y = images_container.numChildren * (bmp.height + img_margin);
    images_container.addChild(bmp);
    stage.addEventListener(MouseEvent.CLICK, onClick);
    function onClick(event:MouseEvent):void {
        removeChild(e.target);
    }
}

load_images();

好的,我在这里做的第一件事就是删除 var bmp:Bitmap = new Bitmap。您正在创建一个您并不真正需要的引用,所以让我们完全摆脱它。

现在,在您的 on_img_loaded 方法中,您需要为每个加载的图像创建一个新的 Bitmap

var bmp:Bitmap = e.currentTarget.content;

然后,您需要将事件侦听器直接添加到 InteractiveObject 而不是舞台。位图不是 InteractiveObjects,因此我们需要在添加侦听器之前将其包装在其他东西中。

var sprite: Sprite = new Sprite();
sprite.addChild(bmp);
addChild(sprite);
sprite.addEventListener(MouseEvent.CLICK, onClick);

最后,创建一个方法来从 images_container 中删除点击的 Bitmap(注意这里我删除了嵌套函数 - 这可以防止参数歧义并且通常是好的做法)。

function onClick(e:MouseEvent):void
{
    images_container.removeChild(e.currentTarget);
}

这是完整的相关代码(未经测试)。

//remove var bmp:Bitmap = new Bitmap from the beginning of the code
function on_img_loaded(e:Event):void {
    e.currentTarget.removeEventListener(Event.COMPLETE, on_img_loaded);
    var bmp:Bitmap = e.currentTarget.content;
    bmp.x = 600, bmp.width = bmp.height = 80;
    bmp.y = images_container.numChildren * (bmp.height + img_margin);
    var sprite: Sprite = new Sprite();
    sprite.addChild(bmp);
    addChild(sprite);
    images_container.addChild(sprite);
    sprite.addEventListener(MouseEvent.CLICK, onClick);
}

function onClick(e:MouseEvent):void
{
    e.currentTarget.removeEventListener(MouseEvent.CLICK, onClick)
    images_container.removeChild(e.currentTarget as DisplayObject);
}

希望对您有所帮助!