我写了一个简单的游戏,我想添加自定义指针。我创建了名为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实例之前粘贴这段代码,光标实际上在这些对象的后面。如果我粘贴这段代码AFTER,鼠标在最上面,但是mousellistener根本没有反应。有什么问题吗?: SS
每次使用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";
在顶部添加一个容器。如果不确定,请使用:
var container : Sprite = new Sprite();
container.name = "pointer";
stage.addChild(container);
这应该可以使你的指针始终位于最顶端。这是因为默认情况下,主应用程序是该阶段的第一个(也是唯一的)子应用程序。将容器添加到舞台上,将把它放在主应用程序的正上方。
将指针添加到容器中
Sprite(stage.getChildByName("pointer")).addChild(pointer);
禁用指针的鼠标交互。否则,它可能会吞噬你的鼠标点击,它们永远不会到达下面的电影剪辑。
pointer.mouseEnabled = false;