在鼠标事件中未调用subClass中的方法(函数)

时间:2016-04-12 17:39:37

标签: actionscript-3 flash

我的目标是:

  1. 定义一个名为Ship
  2. 的Sprite子类
  3. 在运行时使用事件来调用此新类中的函数
  4. 似乎我已经弄清楚如何使用链接的.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,对吗?无论如何,没有人抛出的事实告诉我,这部分代码甚至没有被阅读,我想。

    非常感谢任何帮助!把头发拉出来。

1 个答案:

答案 0 :(得分:1)

您的代码无效,因为它包含一些问题,所以让我们看看。

您应该知道您正在将MouseEvent.CLICK事件监听器附加到主时间轴上,该时间轴现在还没有包含任何可点击的对象(它是空的),所以让我们开始通过在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.CLICK事件监听器附加到舞台上,即使舞台上没有任何内容也可以使用。

现在,如果您测试应用程序,您将在舞台的左上角获得一个可点击的橙色方块,但编译器将触发错误(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 fundamentals,在那里您可以找到有关AS3的所有信息。

希望可以提供帮助。