Actionscript 3 子类中的方法(函数)未在鼠标事件上调用

Actionscript 3 子类中的方法(函数)未在鼠标事件上调用,actionscript-3,flash,Actionscript 3,Flash,我的目标是: 定义一个名为Ship的Sprite子类 在运行时使用事件调用此新类中的函数 似乎我已经知道了如何使用链接的.as文件中的包创建我的Ship类。但我似乎无法访问该类中的函数。有人能看出我做错了什么吗 var ShipMc:Ship = new Ship(); addChild(ShipMc);// This successfully adds an instance, so I know the class is working. addEventListener(MouseEven

我的目标是:

  • 定义一个名为Ship的Sprite子类
  • 在运行时使用事件调用此新类中的函数
  • 似乎我已经知道了如何使用链接的.as文件中的包创建我的Ship类。但我似乎无法访问该类中的函数。有人能看出我做错了什么吗

    var ShipMc:Ship = new Ship();
    addChild(ShipMc);// This successfully adds an instance, so I know the class is working.
    addEventListener(MouseEvent.CLICK, ShipMc.addShip);//But this doesn't seem to run the function
    
    这段代码可以很好地实例化Sprite,但是Ship.as文件中的代码,特别是函数,不起作用。没有运行时错误,但也没有跟踪到输出窗口

    package
    {
        import flash.display.Sprite
    
        public class Ship extends Sprite
        {
            public function addShip():void
            {
                trace("running addShip function")     
            }
        }
    }
    
    上一次在flash中对任何东西进行编码时,它是AS2

    我要说的是,我试过使用
    addShip():void
    addShip()
    。两者的反应相同。它应该带有
    :void
    ,对吗?不管怎样,两个都没有抛出的事实告诉我,我认为这段代码甚至没有被读取


    非常感谢您的帮助!把我的头发拔出来。

    您的代码不工作,因为它包含一些问题,让我们看看

    您应该知道您正在附加
    MouseEvent。单击
    事件侦听器到主时间线,该时间线现在还不包含任何可单击的对象(它是空的),因此让我们首先向
    Ship
    类添加一些内容,以避免:

    public class Ship extends Sprite
    { 
        // the constructor of your class, called when you instantiate this class 
        public function Ship()
        {
            // this code will draw an orange square 100*100px at (0, 0)
            graphics.beginFill(0xff9900);
            graphics.drawRect(0, 0, 100, 100);
            graphics.endFill();
        }   
        public function addShip():void
        {
            trace("addShip function run");
        } 
    }
    
    N.B:您可以将
    MouseEvent附加到舞台上。单击
    事件监听器到舞台上,即使舞台上没有任何东西,它也会工作

    现在,如果你测试你的应用程序,你会在后台的左上角看到一个可点击的橙色方块,但是编译器会触发一个错误(ArgumentError),因为它正在等待一个侦听器函数(这里的
    Ship.addShip()
    函数),该函数接受一个
    MouseEvent
    对象

    因此,为了避免该错误,您的
    Ship.addShip()
    函数可以如下所示,例如:

    public function addShip(e:MouseEvent):void
    {
        trace("addShip function run");
    }
    
    那么你的代码应该可以工作了

    您还可以通过在主代码中使用另一个侦听器函数来简化工作,该函数可以调用
    Ship.addShip()
    函数,例如:

    var ShipMc:Ship = new Ship();
    addChild(ShipMc);
    
    addEventListener(MouseEvent.CLICK, onMouseClick);
    
    function onMouseClick(e:MouseEvent): void 
    {
        ShipMc.addShip();
    }
    

    有关所有这些的更多信息,您可以查看在哪里可以找到有关AS3的所有需要了解的信息


    希望能有所帮助。

    谢谢。非常感谢。@Neal如果这解决了您的问题,请单击左侧的勾号接受它作为答案。