2013-02-28 64 views
0

我正在做一个自上而下的视图游戏。其实是一个非常简单的。玩家在屏幕上点击时角色会移动。但是,我也有一个消防按钮。 我想知道如何在玩家按下按钮时禁用鼠标。因为当这种情况发生时,角色会移动到按钮位置。AS3 MouseEvents

这里是我的代码:

var walk = false; 
var goX = player.x; 
var goY = player.y; 
var speed = 10; 
var dir = "down"; 

stage.addEventListener(Event.ENTER_FRAME, loop); 

btn.addEventListener(MouseEvent.MOUSE_DOWN, btn1); 

function btn1(event:MouseEvent):void 
{ 

fireBullet(); 

} 


function fireBullet():void { 
var playerDirection:String; 
if(player.scaleX < 0){ 
    playerDirection = "left"; 
} else if(player.scaleX > 0){ 
    playerDirection = "right"; 

} 
if(char.scaleY < 0){ 
    playerDirection = "up"; 
} else if(char.scaleY > 0){ 
    playerDirection = "down"; 
} 

var bullet:Bullet = new Bullet(player.x, player.y, playerDirection); 
stage.addChild(bullet); 
} 



function loop(Event) 
{ 

if (walk == true) 
{ 
player.w.play(); 
} 
else 
{ 
player.w.gotoAndStop(1); 
} 

player.gotoAndStop(dir); 


if ((goY-speed)>player.y) 
{ 
player.y += speed; 
dir = "down"; 
} 
else if ((goY+speed)<player.y) 
{ 
player.y -= speed; 
dir = "up"; 
} 
if ((goX-speed)>player.x) 
{ 
player.x += speed; 
dir = "right"; 
} 
else if ((goX+speed)<player.x) 
{ 
player.x -= speed; 
dir = "left"; 
} 

if ((goY-speed)>player.y || (goY+speed)<player.y || (goX-speed)>player.x || (goX+speed)     <player.x){ 
walk = true; 
} else { 
walk =false 
} 
} 

stage.addEventListener(MouseEvent.CLICK, set); 

function set(MouseEvent){ 
goX=mouseX 
goY=mouseY} 

感谢。

+0

你是指键盘上的按钮?就像当你按住空格键时,走路会被禁用? – Marty 2013-02-28 07:34:36

+0

不是。我是使用MouseEvent实现的一个虚拟按钮 - 并且我还使用MouseEvent将角色沿着屏幕移动 - “因为我正在将此游戏制作成触控设备。 – CptAwesome 2013-02-28 07:49:30

回答

0

简单地说,使用target的概念可以如下处理。

试试这个:

function set(e:MouseEvent):void 
{ 
     var target = e.target; 

     //ex) if(target is MovieClip) return; 
     if(target is <#your fire button type#>) return; 

     goX=mouseX; 
     goY=mouseY; 
} 

所不同的是 “目标” 与 “currentTarget当前”?

  • 目标:已触发事件的对象。
  • currentTarget:您应用侦听器的对象。
+0

Thx,男人。现在工作。 – CptAwesome 2013-02-28 08:20:40

2

由于鼠标事件会在显示列表中产生气泡,并且您有一个监听器添加到舞台上,所以当用户按下按钮时,您需要停止传播该事件。

为了实现这一点,在按钮处理程序中,您需要调用stopImmediatPropagation方法。所以,你的BTN1方法是这样的:

function btn1(event:MouseEvent):void 
{ 
    fireBullet(); 
    event.stopImmediatePropagation(); 
} 

这种方式,可以防止click事件冒泡一路攀升的阶段,进而导致阶段的点击处理程序被调用。

希望这会有所帮助。祝你有美好的一天。

+0

感谢您的帮助。但不幸的是不适合我,我的角色仍然会去按钮点。 – CptAwesome 2013-02-28 07:50:50

+0

我明白了。那么这意味着代码中可能存在另一个错误。也许在回车框架上调用的'循环'方法仍然会转换播放器,即使按钮点击事件不起泡。 – 2013-02-28 10:11:09