ActionScript 3 - добавление и удаление дочерних элементов со сцены - PullRequest
0 голосов
/ 11 апреля 2011

Я только изучаю ActionScript 3, так что это, вероятно, простой вопрос для ваших профессионалов.Я создал видеоклипы, которые я хочу добавить на сцену (из библиотеки) с помощью кнопок.У меня всего шесть кнопок (и шесть мувиклипов), но я пытаюсь заставить первые две сработать, прежде чем перейти к следующим кнопкам.Проблема в том, что я не могу удалить видеоклип, когда нажата другая кнопка или та же кнопка ... Как я уже говорил, я новичок в этом, и я думаю, что создал беспорядок вещей ... Я получаю ошибку2007 сейчас

import flash.events.MouseEvent;
import flash.display.MovieClip;

mix_btn.addEventListener(MouseEvent.CLICK, addbear);
function addbear(event:MouseEvent):void
{
    var movieClip:bear1 = new bear1();
    addChild(movieClip);
    movieClip.x = 240;
    movieClip.y = 45;


mix_btn.removeEventListener(MouseEvent.CLICK, addbear);
mix_btn.addEventListener(MouseEvent.CLICK, removebear);
}
function removebear(event:MouseEvent):void
{
    var movieClip:bear1 = null;
    removeChild(movieClip);
    mix_btn.removeEventListener(MouseEvent.CLICK, removebear);
/*  mix_btn.addEventListener(MouseEvent.CLICK, addbear);*/
}
shake_btn.addEventListener(MouseEvent.CLICK, addbear3);
function addbear3(event:MouseEvent):void
{
    var movieClip:bear3 = new bear3();
    addChild(movieClip);
    movieClip.x = 240;
    movieClip.y = 45;

    shake_btn.removeEventListener(MouseEvent.CLICK, addbear3);
    shake_btn.addEventListener(MouseEvent.CLICK, removebear3);
}
function removebear3(event:MouseEvent):void
{
    var movieClip:bear3 = null;
    removeChild(movieClip);
    shake_btn.removeEventListener(MouseEvent.CLICK, removebear3);
    shake_btn.addEventListener(MouseEvent.CLICK, addbear3);
}

Ответы [ 3 ]

2 голосов
/ 11 апреля 2011
var movieClip:bear1 = null;
removeChild(movieClip);
mix_btn.removeEventListener(MouseEvent.CLICK, removebear);

В этой части вы в основном пытаетесь удалить нулевой объект, что обычно плохо :). Это относится и к «змеям» и другим кнопкам или мувиклипам. Если вы хотите удалить медведя, на которого вы нажали, попробуйте следующее:

var movieClip:bear1 = bear1(event.currentTarget);
removeChild(movieClip);
mix_btn.removeEventListener(MouseEvent.CLICK, removebear);
0 голосов
/ 11 апреля 2011

Это полностью проблема области В вашей функции addbear вы создаете переменную в этой функции под названием movieClip

mix_btn.addEventListener(MouseEvent.CLICK, addbear);
function addbear(event:MouseEvent):void
{
    var movieClip:bear1 = new bear1();
    addChild(movieClip);
    movieClip.x = 240;
    movieClip.y = 45;


mix_btn.removeEventListener(MouseEvent.CLICK, addbear);
mix_btn.addEventListener(MouseEvent.CLICK, removebear);
}
function removebear(event:MouseEvent):void
{
    var movieClip:bear1 = null;
    removeChild(movieClip);
    mix_btn.removeEventListener(MouseEvent.CLICK, removebear);
/*  mix_btn.addEventListener(MouseEvent.CLICK, addbear);*/
}

Чтобы исправить это, вам нужно переместить область действия mopvieClip за пределы функций

   mix_btn.addEventListener(MouseEvent.CLICK, addbear);
    var movieClip:bear1 // **********************global scoping
    function addbear(event:MouseEvent):void
    {
        movieClip = new bear1(); // *************constructing new GLOBAL object here
        addChild(movieClip);
        movieClip.x = 240;
        movieClip.y = 45;


    mix_btn.removeEventListener(MouseEvent.CLICK, addbear);
    mix_btn.addEventListener(MouseEvent.CLICK, removebear);
    }
    function removebear(event:MouseEvent):void
    {
        removeChild(movieClip);//****************** remove movieClip first
        movieClip= null; // **********************destroying GLOBAL object here
        mix_btn.removeEventListener(MouseEvent.CLICK, removebear);
    /*  mix_btn.addEventListener(MouseEvent.CLICK, addbear);*/
    }
0 голосов
/ 11 апреля 2011

Проблема в том, что вы ссылаетесь на movieClip как переменную уровня функции, которая исчезает, когда эта функция завершается. Когда ваша функция удаления происходит позже, сам мувиклип все еще существует, но переменная мувиклипа, которую вы используете для ссылки на нее, исчезла.

Если бы событие удаления было непосредственно на медведе, вы могли бы использовать event.currentTarget, чтобы получить к нему доступ и удалить его.

Вместо этого, поскольку похоже, что ваш слушатель находится на отдельной кнопке, вам понадобится ссылка на мувиклип, который работает откуда угодно. Если вы назначите имя экземпляра для мувиклипа, вы можете использовать его для последующего доступа к нему и его удаления.

function addbear(event:MouseEvent):void 
{ 
    var movieClip:bear1 = new bear1();
    addChild(movieClip); 
    movieClip.x = 240; 
    movieClip.y = 45;
    movieClip.name = "bear1";  
} 

function removebear(event:MouseEvent):void 
{ 
    removeChild(getChildByName("bear1"));
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...