Как классы в проекте actionscript переопределяют классы в файле Flash CS3 SWC?

#actionscript-3 #actionscript #swc

#actionscript-3 #actionscript #swc

Вопрос:

У меня есть проект actionscript, который использует визуальные символы из SWC.

У меня есть CheckoutButton , с которым связан следующий класс (скомпилированный в SWC во Flash CS3).

 public class CheckoutButton extends SimpleButton {

    public function CheckoutButton () {     
        this.addEventListener(MouseEvent.CLICK, checkoutClicked);
    }

    // click on the button and the alpha will go to 50%
    public function checkoutClicked(e:MouseEvent):void {
        this.alpha = .5;  // take user to checkout
    }

    public function dispose ():void {

    }
}
  

Важно: CheckoutButton.as файл находится в пути к классу для проекта actionscript, который использует SWC.


Я использую скомпилированный SWC в проекте actionscript, и я запустил следующие сценарии :

1) Я УДАЛЯЮ CheckoutButton.as из пути к классам для моего проекта actionscript:

 var x:CheckoutButton = new CheckoutButton();
addChild(x);
  

Я получаю экземпляр визуального символа из моего файла Flash CS3. Когда я нажимаю на него, альфа-значение увеличивается до 50%. Это снова именно то, что я ожидал.

2) Я запускаю этот код с CheckoutButton.as в пути к классу для моего проекта actionscript:

 var x:CheckoutButton = new CheckoutButton();
addChild(x);
  

Вообще ничего не происходит. Это именно то, чего я ожидал, потому что я в основном переопределил определение класса из SWC с помощью SimpleButton , которое не имеет никакой визуальной функциональности вообще.


Теперь у меня также есть анимация временной шкалы CheckoutAnimation в моем Flash-файле, которая просто случайно содержит экземпляр CheckoutButton символа.

3) Я запускаю проект actionscript после УДАЛЕНИЯ CheckoutButton.as из пути к классу:

 var x:CheckoutAnimation  = new CheckoutAnimation();
addChild(x);
  

Символ в анимации воспроизводит определение класса (в том виде, в каком оно было первоначально скомпилировано в SWC), и когда я нажимаю на него, альфа символа увеличивается до 50%. Это именно то, что ожидалось.

4) Я запускаю проект actionscript с CheckoutButton.as по-прежнему указанным путем к классам:

 var x:CheckoutAnimation  = new CheckoutAnimation();
addChild(x);
  

В анимации появляется символ проверки, но нажатие на него ничего не делает!!

ПОЧЕМУ ЭТО! Я НЕ ПОНИМАЮ! Я не понимаю, почему я не получаю тот же результат, что и в (2) выше, и я определенно не понимаю, почему код не выполняется. В чем здесь конфликт?

Ответ №1:

Это рискованный шаг, но, основываясь на небольшом фрагменте кода, который вы предоставили, это единственное, что приходит на ум. В вашем примере вы добавили x в список отображения 4 раза. Возможно, что в списке отображения имеется несколько экземпляров этого символа, наложенных друг на друга. Когда вы устанавливаете альфа-значение для любого из них или для всех, вы не замечаете изменений, потому что видите другие символы под ним.

Я понимаю, что ваш приведенный здесь код может быть просто примером, но если вы добавили x в список отображения 4 раза, то это ваша проблема. Я делал это раньше, и это может остаться незамеченным, пока вы не начнете играть с альфа-символами или перемещать объекты.

Комментарии:

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