EventDispatcher和函数问题

时间:2013-11-14 15:15:33

标签: actionscript-3 flash

我是AS3的新手,我正在尝试制作一个简单的Flash游戏原型。现在,我要做的就是让flash告诉我它实际上正在接收用户的键输入,但我遇到了以下两个问题:

  1. 在我向舞台添加事件侦听器的行中,我得到一个Error1061:通过带有静态类型Class的引用调用可能未定义的方法addEventListener。

    • 我的研究让我相信这是因为我的Backlayer类没有扩展EventDispatcher,但我无法扩展它,因为Backlayer必须扩展MovieClip
  2. 在这些相同的行上,我试图告诉代码,当发生这样的事件时,执行命名函数,但是我得到一个错误1120告诉我两者都是未定义的属性。

    • 我想这可能是因为班级还没有扩展事件调度员呢?
  3. 我对AS3的理解都是自学成才,我仍在努力学习这门语言的礼仪,所以如果这是一个非常简单的问题我很抱歉,但我还是找不到谷歌搜索的答案那还行吗? 这是我的代码:

    package  {
    
    import flash.display.MovieClip;
    import flash.events.KeyboardEvent;
    import flash.ui.Keyboard;
    import flash.display.Stage;
    import flash.events.EventDispatcher;
    public class Backlayer extends MovieClip
    {
    Stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
    Stage.addEventListener(KeyboardEvent.KEY_UP,keyUpHandler);
    
    public function keyDownHandler(e:KeyboardEvent):void
    {
    if(e.keyCode == Keyboard.LEFT)
    {
        trace("left pressed");
    }
    
    else if(e.keyCode == Keyboard.RIGHT)
    {
        trace("right pressed");
    }
    
    else if(e.keyCode == Keyboard.UP)
    {
        trace("up pressed");
    }
    
    else if(e.keyCode == Keyboard.DOWN)
    {
        trace("down pressed");
    }
    
    }
    public function keyUpHandler(e:KeyboardEvent):void
    {
    if(e.keyCode == Keyboard.LEFT)
    {
        trace("left released");
    }
    
    else if(e.keyCode == Keyboard.RIGHT)
    {
        trace("right released");
    }
    
    else if(e.keyCode == Keyboard.UP)
    {
        trace("up released");
    }
    
    else if(e.keyCode == Keyboard.DOWN)
    {
        trace("down released");
    }
    
    }
    }
    }
    

1 个答案:

答案 0 :(得分:0)

MovieClip确实从EventDispatcher继承,因此您的类也应该继承。 请参阅:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/MovieClip.html

以下行有两个问题:

Stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
Stage.addEventListener(KeyboardEvent.KEY_UP,keyUpHandler);

1)他们不属于某个职能部门。

2)Stage.addEventListener意味着你试图调用Stage类的静态函数。它应该写成stage.addEventListener(调用存储在属性阶段的Stage类实例的函数)。