我目前正在编程一种点和点;使用adobe flash cs5点击AS3中的游戏。
每当我点击一扇门时,我都想检查钥匙是否被按住以解锁它。当从库存中选择键时,我想要光标(不是原始光标,而是我用startDrag链接的特定光标)来获取键的图标。
这是我的代码:
var selectedKey:Boolean = false;
key_obj.addEventListener(Mouse.CLICK, selectKey);
door.addEventListener(Mouse.CLICK, openDoor);
inventory_spot.addEventListener(Mouse.CLICK, drop);//send back key to inventory
function selectKey(e:MouseEvent):void
{
cursor.stopDrag();
removeChild(cursor); //disable the old cursor style
key_obj.removeEventListener(Mouse.CLICK, selectKey);
key_obj.startDrag(true);
selectedKey = true;
addChild(inventory_spot);
}
function openDoor(e:MouseEvent):void
{
if (selectedKey)
// open the door
else
// error : you don't have the key
}
function drop(e:MouseEvent):void
{
key_obj.stopDrag();
key_obj.addEventListener(Mouse.CLICK, selectKey);
selectedKey = false;
addChild(cursor); // enable the old cursor
cursor.startDrag(true);
key_obj.x = inventory_spot.x [...] // position of the key in the inventory
key_obj.y = inventory_spot.y [...]
removeChild(inventory_spot);
}
这是我的问题:
当我用门上的键光标点击时没有任何反应,实际上程序甚至没有调用openDoor()
,但是一旦我把钥匙放回库存并将旧光标拿回来,那么{{工作得很好。
我不明白,是不是因为我改变了光标而调用的功能?
感谢您的帮助
答案 0 :(得分:0)
因为点击可能是你的键光标而不是门。要修复,你想让你的光标mouseEnabled = false和mouseChildren = false。
我使用以下内容检查点击事件的传播。因此,在您的示例中,您可以检查最初单击的内容,然后检查事件传播的位置。 “永远不会被称为问题”通常是因为您认为被点击的内容不是。
所以加上这个:
stage.addEventListener(MouseEvent.CLICK,Functions.checkMouseEventTrail,false,0,true);
打电话给:
function checkMouseEventTrail($e:MouseEvent):void{
// displays the mouse event trail for any selected item
var p:* = $e.target;
trace("\nMOUSE EVENT TRAIL\n time: "+getTimer()+" type: "+$e.type+" target: "+$e.target.name+" cur target: "+$e.currentTarget);
var spacing:String="";
while (p){
var curFrame = "none";
if (p is MovieClip){curFrame = String(p.currentFrame);}
trace(spacing+">>", p.name,": ",p+" vis: "+p.visible+" loc: "+p.x+","+p.y+" width: "+p.width+" height: "+p.height+" frame : "+curFrame+" class: "+getClassName(p));
if (p != null){p = p.parent;}
spacing+=" ";
}
trace("");
}
您将在输出中看到您的点击事件发生了什么。