2015-07-01 3 views
0

У меня есть три изображения из одного и того же загрузчика на экране. Мне нужно удалить конкретное (целевое) растровое изображение после щелчка. У меня есть функция 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(); 
+1

Что вы подразумеваете под * конкретным (целевым) растровым изображением *? Вы пытаетесь удалить растровое изображение при нажатии? Прямо сейчас, ваш код прослушивает (три раза) для щелчка по сцене, а затем пытается удалить «e.target» (который даже не является «DisplayObject») из «DisplayList». Пожалуйста, подробно объясните, что именно вы пытаетесь удалить, и когда вы пытаетесь удалить его. – phasma

+0

У меня есть три изображения, каждое из которых равномерно распределено по вертикали с указанным выше кодом. Я просто хочу сделать событие мыши, которое позволит мне удалить изображение, на которое я нажимаю. Я понимаю, что e.target не является DisplayObject, вот что мне нужно для помощи, спасибо. Надежда, которая приносит ясность. –

ответ

0

Хорошо, первое, что я сделал здесь было удалить 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); 

Наконец, создать метод для удаления щелкнутой Bitmap из images_container (обратите внимание, здесь я удалил вложенную функцию - это предотвращает аргумент двусмысленности и, как правило, хорошая практика).

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); 
} 

Надеюсь, это поможет!

+0

Спасибо, я попробовал ваш код и получил следующую ошибку: Неявное принуждение значения со статическим типом Object к возможно несвязаному типу flash.display: DisplayObject. Ошибка выделяет images_container.removeChild (e.currentTarget); –

+0

Упс, мой плохой. Измените эту строку на 'images_container.removeChild (e.currentTarget как растровое изображение);' – phasma

+0

Хм, все еще не удаляя растровые изображения. Я думаю, что битмапы не обнаруживают ввод мыши. Однако никаких проблем с компиляцией. –

Смежные вопросы