从加载程序中删除特定图像
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);
}
希望对您有所帮助!
我在屏幕上显示了来自同一个加载程序的三张图片。单击后我需要删除特定(目标)位图。我在下面有一个 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);
}
希望对您有所帮助!