2013-08-14 4 views
0

Я изучаю AS3 OOP и пытаюсь сделать некоторые простые вещи, здесь я просто пытаюсь добавить кнопку на сцену и обработать событие click.AS3 OOP: кнопка не отображается

Вот мой простой код:

package 
{ 
    import flash.display.Stage; 
    import flash.display.MovieClip; 
    import flash.events.MouseEvent; 

    public class External extends MovieClip 
    { 

    private var counter:Number; 
    public var HitButtonA:RedButton; 

     public function External() // constructor 
     { 
     HitButtonA= new RedButton(); 
     HitButtonA.x = 40; 
     HitButtonA.y = 65; 
     addChild(HitButtonA); 

     setupListeners();  
     counter=0;   
     } 


    public function setupListeners() 
    { trace("bbbb"); 
     HitButtonA.addEventListener(MouseEvent.CLICK, hitButtA); 
    } 

    public function hitButtA(e:MouseEvent) 
    { 
     //display.text=String(++counter); 
     trace("aaaaa"); 
    } 



    } 
} 

К сожалению, это не даже добавить кнопку на сцену, без ошибок или что-нибудь ... ни малейшего представления, что случилось?

+1

Вы указали ссылку ActionScript в FLA для RedButton на любой MovieClip в библиотеке? – Andreas

+0

Я связал это следующим образом: http://picthost.net/v.php?id=adc8325521d37df4d6924a0452026fe7 – Ryan

+1

Является ли ваш класс RedButton расширением класса SimpleButton? – Andreas

ответ

2

Кажется, что вы забыли добавить свой внешний объект на сцену.

Убедитесь, что вы добавить его следующим образом:

var myExternal:External = new External(); 
stage.addChild(myExternal); 

Edit:

Спасибо! В любом случае, чтобы обе эти линии были одной линией? Так что, когда I экземпляр выше, он добавляется на сцену?

Да, если вам не нужны ссылки, просто вызовите stage.addChild(new External()); В качестве альтернативы, можно добавить ребенка на сцену через конструктор, передавая ссылку на сцене через конструктор var myExternal:External = new External(this.stage);.

Затем вам нужно изменить свой конструктор так:

public function External(DisplayObject theStage) // constructor 
    { 
    HitButtonA= new RedButton(); 
    HitButtonA.x = 40; 
    HitButtonA.y = 65; 
    addChild(HitButtonA); 

    setupListeners();  
    counter=0; 
    theStage.addChild(theStage); 
    } 

Однако, это не очень хорошая практика, поскольку она способствует наизнанку перспективу, которая может вызвать проблемы позже.

+0

Спасибо! В любом случае, чтобы обе эти линии были одной линией? Итак, когда я создаю экземпляр выше, он добавляется на сцену? – Ryan

+1

@Ryan, см. Мое редактирование в ответе выше. – Andreas

+0

Еще раз спасибо! У вас потрясающий день! – Ryan

2

Вот несколько возможных ошибок, которые вы могли бы сделать:

  • External.as не ваш класс документа, и вы не создали и/или добавить объект внешнего класса на сцену.
  • Если External.as является вашим классом документов по вашему дизайну, проверьте, действительно ли он задан как класс документа. Если вы используете Flash Professional на панели свойств, нажмите кнопку редактирования справа от поля ввода класса документа, если создан пустой сгенерированный класс - у вас есть источник вашей ошибки.
  • Проверить, если вы можете добавить экземпляр RedButton только за кадром сценариев

    вар RButton: RedButton = новый RedButton(); addChild (rButton);

Другое, тогда я не вижу проблем с вашим кодом.

Надейтесь, что помогите, удачи!

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