2013-04-05 5 views
0

Короче, вот что я хотел бы выполнить:Add/Remove Event Listener к/от ребенка Видеоклипа в AS3

  1. Нажмите кнопку Movie Clip, добавьте ребенка
  2. Нажмите ребенок кино клип, играть звук
  3. Нажмите на ребенок снова, остановить звуковой
  4. Щелкнуть ребенок в третий раз, удалить ребенок

к сожалению, я только получил, насколько шаг 1. Я понял, как получить так и для воспроизведения, когда щелкнут родительский клип (я использую ссылку), но когда я пытаюсь повторить это с ребенком, я получаю следующую ошибку:

ТипError: Ошибка # 1010: Термин не определен и не имеет свойств. (Я больше не получаю эту ошибку)

Сцена 1, действия слоя ', рамка 1, строка 29 1120: доступ к неопределенному свойству newBox.

 

    leftBox.addEventListener(MouseEvent.CLICK, addBox); 
    function addBox(event:MouseEvent):void 

    { 
    var newBox:right_box = new right_box(); 
    addChild(newBox); 
    newBox.x = 0; 
    newBox.y = 0; 
    newBox.width = leftBox.width; 
    newBox.height = leftBox.height /2; 

    } 
    newBox.addEventListener(MouseEvent.CLICK, playSound); 
    function playSound(event:Event) 
    { 
    var mySound:testSound = new testSound(); 
    mySound.play(); 

    } 

Любая помощь будет очень признательна.

Спасибо!

(PS Я n00b, поэтому, пожалуйста, быть хорошо!)

+0

Пожалуйста, добавьте фрагмент кода, который, по вашему мнению, является проблематичным для вопроса. – Ihsan

+0

@ Исан, я просто добавил фрагмент. Но проблема, безусловно, в функции playSound. Все отлично работает, когда я прокомментирую это. – user2247402

ответ

0

Вы пытаетесь добавить прослушиватель событий newbox, прежде чем он будет создан .. Попробуйте следующее:

// mySound should be availible in scope 
var mySound:testSound = new testSound(); 

// newBox also 
var newBox:right_box; 
// here is a channel for you 
var channel: SoundChannel; 

// ok this adds the first listener... 
leftBox.addEventListener(MouseEvent.CLICK, addBox); 


function addBox(event:MouseEvent):void { 
    newBox = new right_box(); 
    addChild(newBox); 
    newBox.x = 0; 
    newBox.y = 0; 
    newBox.width = leftBox.width; 
    newBox.height = leftBox.height /2; 
    // you should add listener here... 
    newBox.addEventListener(MouseEvent.CLICK, playSound); 
    // you have to avoid multiple newBoxes on each other and 
    // leaving the older ones under.. 
    // So stop listening to the newBox generating event: 
    leftBox.removeEventListener(MouseEvent.CLICK, addBox); 
} 

function playSound(event:Event){ 
    channel = mySound.play(); 
    // On next click you want sound to stop so 
    // First remove the old listener to avoid play over: 
    newBox.removeEventListener(MouseEvent.CLICK, playSound); 
    // and hook listener to stop method 
    newBox.addEventListener(MouseEvent.CLICK, stopSound); 
} 

function stopSound(event:Event){ 
    channel.stop(); 
    // On next click you want to remove newBox 
    // First remove the old listener to avoid play over: 
    newBox.removeEventListener(MouseEvent.CLICK, stopSound); 
    newBox.addEventListener(MouseEvent.CLICK, removeNewBox); 
} 

function removeNewBox(event:Event){ 
    // First remove the listener : 
    newBox.removeEventListener(MouseEvent.CLICK, removeNewBox); 
    removeChild(newBox); // now remove from display list 
    newBox = null; // make contents eligible for garbage collection 
} 
+0

Хмм, теперь я получаю «1120: доступ к неопределенному свойству newBox» в «newBox.removeEventListener (MouseEvent.CLICK, playSound);». – user2247402

+0

Поскольку вы определили его как функцию var, поэтому он недоступен из области действия (символ newBox указывает на ничего). – Ihsan

+0

Я думал, что это может быть частью моей проблемы! Но поскольку я использую его с MouseEvent, какой синтаксис имел бы смысл? – user2247402