Как получить доступ к объекту видеоролика внутри объекта button в as3 (flash cs4)

#flash #actionscript-3

#flash #actionscript-3

Вопрос:

Я хочу динамически загружать графику кнопки в mc внутри каждого кадра кнопки (вверх и поверх). Внутри каждого кадра у меня есть видеоклип (canvas и canvas_over)

Зеленое поле — это объект button (header_btn):

Зеленое поле - это объект button (header_btn)

Это мой код:

 var hLoader:Loader = new Loader();
hLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, hLoaded);
hLoader.load(new URLRequest("http://django.liveproject.is/misc/current_flash_header/image.png"));

function hLoaded(event:Event):void {
    var image:Bitmap = new Bitmap(event.target.content.bitmapData);
    header_btn.canvas.addChild(image);
}

var hoLoader:Loader = new Loader();
hoLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, hoLoaded);
hoLoader.load(new URLRequest("http://django.liveproject.is/misc/current_flash_header_over/image.png"));

function hoLoaded(event:Event):void {
    var image:Bitmap = new Bitmap(event.target.content.bitmapData);
    header_btn.over_canvas.addChild(image);
}
  

Ошибка, которую я получаю, это:

 TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at MethodInfo-78()
TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at MethodInfo-77()
  

Редактировать — решаемая:

header_canvas и header_canvas_over размещены на сцене. header_canvas_over помещается поверх header_canvas .

Код:

 var context:LoaderContext = new LoaderContext();
context.checkPolicyFile = true;

var hLoader:Loader = new Loader();
hLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, hLoaded);
hLoader.load(new URLRequest("http://django.liveproject.is/misc/current_flash_header/image.png"), context);

function hLoaded(event:Event):void {
    var image:Bitmap = new Bitmap(event.target.content.bitmapData);
    header_canvas_up.addChild(image);
}

var hoLoader:Loader = new Loader();
hoLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, hoLoaded);
hoLoader.load(new URLRequest("http://django.liveproject.is/misc/current_flash_header_over/image.png"), context);

function hoLoaded(event:Event):void {
    var image:Bitmap = new Bitmap(event.target.content.bitmapData);
    header_canvas_over.addChild(image);
    header_canvas_over.visible = false;

    header_btn.addEventListener(MouseEvent.MOUSE_OVER, onHover);
    function onHover(event:Event):void {
        header_canvas_over.visible = true;
    }

    header_btn.addEventListener(MouseEvent.MOUSE_OUT, onOut);
    function onOut(event:Event):void {
        header_canvas_over.visible = false;
    }
}
  

Было бы неплохо, если бы as3 разрешал кнопкам содержать объекты. :/

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

1. Находятся ли клипы «canvas» и «over_canvas» внутри вашей кнопки?

2. Да, они находятся внутри кнопки (header_btn)

Ответ №1:

Класс SimpleButton расширен из DisplayObject, а не DisplayObjectContainer. Это означает, что вы не можете получить доступ к объектам на временной шкале кнопки таким образом, а также вы не можете добавлять или удалять дочерние элементы.

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