Прежде всего, вы определяете mybutton как MovieClip, но фактически никогда не создаете его с помощью ключевого слова «new», а также не присваиваете эту ссылку какому-либо существующему объекту, поэтому эта ссылка по умолчанию «null».Но даже если вы действительно создали новый мувиклип, например, так:
public var mybutton:MovieClip;
public function Button () {
mybutton = new MovieClip();
if(stage){
stage.addChild(mybutton);
}
buttonMode=true;
mybutton.fromFile.addEventListener (MouseEvent.CLICK , handle )
}
В таком случае вы столкнетесь с той же проблемой, и строка кода, вызывающая проблемы, будет:
mybutton.fromFile.addEventListener (MouseEvent.CLICK , handle );
Класс MovieClip - это динамический класс, который означает, что вы можете динамически определять свойства этого объекта во время выполнения, но до тех пор, пока эта ссылка не будет нулевой или неопределенной.Возьмем, к примеру, ваш код:
mybutton.fromFile
Свойство «fromFile» должно быть либо именем символа мувиклипа, который вы уже создали внутри myButton, либо оно должно быть сначала определено в вашем коде где-то передВы можете получить к нему доступ.Вы получаете доступ к этой неопределенной ссылке, когда используете следующий код:
mybutton.fromFile.addEventListener
Вы говорите flash: «Хорошо, существует объект EXISTING, присоединенный к myButton с именем fromFile, так что идите, получите его и прикрепитеслушатель ".Поскольку вы на самом деле никогда не создавали объект и не присоединяли его к динамическому пользовательскому свойству «fromFile», этот «термин» не определен.Ниже приведен единственный способ работы этого кода:
package button
{
import flash.display.*;
import flash.events.*;
public class Button extends MovieClip
{
public var mybutton:MovieClip;
public function Button () {
buttonMode=true;
mybutton.fromFile = new MovieClip();
//OR
//mybutton.fromFile = someOtherMovieClip;
mybutton.fromFile.addEventListener (MouseEvent.CLICK , handle )
}
public function handle (e:MouseEvent) {
trace ("hello")
}
}
}
Обратите также внимание, что для присоединения слушателя к любому объекту этот объект должен иметь либо реализацию IEventDispatcher на некотором уровне в цепочке наследования объектов, либо нанекоторый уровень, из которого объект должен быть получен или расширен EventDispatcher.MovieClips, Sprites и другие объекты DisplayObject делают это.
Также обратите внимание, что если вы просто присоедините прослушиватель события CLICK к простому, пустому новому объекту MovieClip, вы никогда не будете запускать это событие, потому что вы никогда не сможетенажмите здесь.Вы не можете щелкнуть по нему, потому что вы не поместили ничего, что физически кликабельно, внутри этого мувиклипа.Следующий код должен работать так, как вы рассчитывали:
package button
{
import flash.display.*;
import flash.events.*;
public class Button extends MovieClip
{
public var mybutton:MovieClip;
public function Button () {
mybutton = new MovieClip();
mybutton.graphics.beginFill(0, 1);
mybutton.graphics.drawRect(0,0,200,200);
mybutton.graphics.endFill();
if(stage){
stage.addChild(mybutton);
}
mybutton.buttonMode = true;
mybutton.fromFile.addEventListener (MouseEvent.CLICK , handle )
}
}
}