在ActionScript 3.0中自定义光标的问题

时间:2011-08-04 11:20:54

标签: flash actionscript-3 oop mouse mouseevent

我写了一个简单的游戏,我想添加自定义指针。我创建了名为Pointer的MovieClip,将其导出到AS3并编写了这段代码:

var pointer:Pointer = new Pointer();
pointer.scaleX=0.1; //that's because cursor turned to be MUCH bigger than needed
pointer.scaleY=0.1;
stage.addEventListener(MouseEvent.MOUSE_MOVE, redrawCursor); 
stage.addEventListener(Event.MOUSE_LEAVE, hideCursor); 
Mouse.hide(); 
function redrawCursor (event:MouseEvent):void { 
    pointer.visible = true; 
    pointer.x = event.stageX; 
    pointer.y = event.stageY; 
} 
function hideCursor (event:Event):void { 
    pointer.visible = false; 
} 

我想没有什么可解释的 - 代码太简单了。 在游戏中,在第74帧上,在舞台上创建了一些对象。如果我在生成和添加其他MovieClip实例之前粘贴此代码,则游标实际上是BEHIND这些对象。如果我将此代码粘贴到AFTER上,则鼠标位于顶部,但MouseListeners根本不会做出反应。有什么问题? :SS

2 个答案:

答案 0 :(得分:2)

每次使用addChild方法时,它都会将DisplayObject置于目标显示列表中的所有其他位置之上。

制作两个DisplayObjects,将鼠标放入顶部,将其他所有内容放入底部,或使用addChildAt方法将鼠标放在鼠标下面。

修改 正常的跟随游标非常滞后,通常不会给用户带来如此好的体验。如果您可以使用flash player 10.2+,则应使用本机鼠标光标。

var cursorData:MouseCursorData = new MouseCursorData();
var bitmapDatas:Vector.<BitmapData> = new Vector.<BitmapData>();
var bitmap:Bitmap = new zoomCursor();
bitmapDatas[0] = bitmap.bitmapData;
cursorData.data = bitmapDatas;
Mouse.registerCursor("myCursor", cursorData);
Mouse.cursor = "myCursor";

答案 1 :(得分:1)

在最顶部为电影添加容器。如果不确定使用:

var container : Sprite = new Sprite();
container.name = "pointer";
stage.addChild(container);

这应该可以让你的指针始终位于最顶层。这是因为您的主应用程序默认是舞台的第一个(也是唯一的)子节点。将容器添加到舞台上会将其放在主应用程序的正上方。

将指针添加到此容器。

Sprite(stage.getChildByName("pointer")).addChild(pointer);

禁用指针的鼠标交互。否则它可能会吞下你的鼠标点击,它们永远不会到达下面的影片剪辑。

pointer.mouseEnabled = false;