需要一个对象成为 'unclickable' 落后于某些对象。 As3 闪光 Cs4

Need an object to become 'unclickable' behind certain objects. As3 Flash Cs4

如何在另一个对象后面制作可点击的动画片段 'hide'。例如.. 我有一个兔子电影片段 - 他是可点击的 - 当他走在一棵树后面时(MC)他需要躲在那棵树后面。

目前,如果我点击树 - 鼠标点击似乎完全忽略了树,我仍然可以点击看不见的兔子。

var HitCount:Number = 10;
var RabbitG1X:Number = 0;
var RabbitG1Y:Number = 0;
var RabbitG2X:Number = 0;
var RabbitG2Y:Number = 0;





Mouse.hide();
stage.addEventListener(MouseEvent.MOUSE_MOVE, follow);
function follow(evt:MouseEvent)
{
    Cursor_mc.x =mouseX;
    Cursor_mc.y=mouseY;
}

stage.addEventListener(MouseEvent.CLICK, clickHandler);

function clickHandler(event:MouseEvent):void
{    
     if (Cursor_mc.hitTestObject(RabbitG1_mc))
     {

  trace ("you fed rabbit1 ");
  RabbitG1_mc.x = RabbitG1X + 5000;
  RabbitG1H_mc.x = RabbitG1X + 1271.85;
  RabbitG1H_mc.y = RabbitG1Y + 184.05;
  HitCount = HitCount -1;
  Dec_txt.text = "" + HitCount + "";
  }



   if (Cursor_mc.hitTestObject(RabbitG2_mc))
 {

  trace ("you fed rabbit2 ");
  RabbitG2_mc.x = RabbitG2X + 5000;
  RabbitG2H_mc.x = RabbitG2X + 1271.85;
  RabbitG2H_mc.y = RabbitG2Y + 184.05;
  HitCount = HitCount -1;
  Dec_txt.text = "" + HitCount + "";
  }
   if (HitCount ==0)
  {
  trace("You fed all the rabbits");
  }
   }

我尝试将其添加到树 mc 中,以查看是否可以在鼠标移过树时将其杀死。

Tree2MC.addEventListener(MouseEvent.CLICK, solid);

function solid(e:MouseEvent):void{
 Tree2MC.mouseEnabled = false;
}

然而,这并不理想。如果它位于舞台上另一个对象的后面,我真的需要一个可点击的对象来隐藏它。所以如果他是半隐藏的并且我点击 MC 仍然显示的部分,它会点击..而且它没有用。

首先,不需要使用 hitTest 代码来判断点击了什么。您可以使用鼠标事件的 .target 属性 来解决这个问题 - 这也将解决您知道点击的是树还是兔子的问题。

例如:

function clickHandler(event:MouseEvent):void {    
    if (event.target == RabbitG1_mc){
        //.....do you stuff

    if (event.target == RabbitG2_mc){

现在,需要指出的是,事件的 .target 也可以是兔子的子对象(如果您的兔子 MC 中有其他对象)。所以为了确保它是一致的,你可以在初始化你的兔子时做这样的事情:

RabbitG1_mc.mouseChildren = false;
RabbitG2_mc.mouseChildren = false;

或者,您可以直接为兔子添加鼠标事件监听器,而不是在舞台上添加一个监听器来捕获所有内容。这样,如果一个对象(树)在它们前面(并且启用了鼠标),则单击事件将在树而不是兔子上调度,并且 clickHandler 不会 运行。

RabbitG1_mc.addEventListener(MouseEvent.CLICK, clickHandler);
RabbitG2_mc.addEventListener(MouseEvent.CLICK, clickHandler);

function clickHandler(event:MouseEvent):void {
    //event.currentTarget is a reference to what you attached the listener to
    switch(event.currrentTarget){
        case RabbitG1_mc: 
           //..do your code
           break;
        case RabbitG2_mc: 
           //..do your code
           break;
    }
}