在课堂上使用鼠标

时间:2011-03-29 05:52:14

标签: flash actionscript-3 class mouse flash-cs4

我创建了一个不从任何其他flash类扩展的简单类。问题是,在这个简单的类中使用鼠标协调。这是我的课程代码。

package src { 

      public dynamic class guider{
      public function move01(xxx:int, yyy:int , speed:int) {
            trace (mouseX);
            return true;
        }
    }   
}

编译后,它会给出错误:“ 1120:访问未定义属性mouseX ”这是显而易见的。我尝试通过导入一些与鼠标相关的类来解决它。所以我改写了我的代码:

package src {
    import flash.utils.getDefinitionByName;     
    public dynamic class guider{
        public function move01(xxx:int, yyy:int , speed:int) {
            trace (getDefinitionByName("flash.ui.Mouse").mouseX);
            return true;
        }
    }
}

现在编译时出现错误,但是当我使用它时,它会追溯到“ undefined ”!我的问题在这里是什么?

注意:此类用于与鼠标的实时交互,我更喜欢简化以获得更高的性能。此函数的返回值将是基于鼠标x协调和其他输入的数字。在这里,我使用“ return true;”仅用于测试。

1 个答案:

答案 0 :(得分:1)

在类的构造函数中,您应该传递阶段(类型为Stage),然后说:

stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);

private function mouseMoveHandler(event:MouseEvent):void {
        trace(event.stageX + " " + event.stageY);
}

编辑1:

如果您想知道鼠标相对于该对象的位置,则无法使用Object(extend none)作为基类。要找到鼠标,您需要在舞台上显示该对象以找到鼠标所在的位置。因此,您可以使用DisplayObject的MouseX功能。所以扩展那个而不是MovieClip。或者您可以使用舞台再次找到鼠标。再次将阶段传递给构造函数中的类,并将其保存在私有或受保护的var。

public function move01(xxx:int, yyy:int , speed:int):void {
        trace (stage.mouseX);
}