【问题标题】:Could an array or two, solve this?一两个数组可以解决这个问题吗?
【发布时间】:2012-12-31 07:10:24
【问题描述】:

我接手了一个项目,我对 as3 真的很陌生!我需要解决一个未解决的问题,而不是从头开始。

我有一个 contaner_mc,有四个 puppet_mc(puppet_mc1puppet_mc2puppet_mc3puppet_mc4),每个 puppet_mc 有四个按钮(buddy_bnt_1buddy_bnt_2buddy_bnt_3、@987653 )。

我需要听者知道点击了哪个按钮以及点击了哪个 puppet?

Object(this).contaner_mc.puppet_mc?.buddy_bnt_?.addEventListener(MouseEvent.CLICK, fl_Click);

function fl_Click(event:MouseEvent):void
{
    gotoAndPlay(15);
}

任何建议将不胜感激!

【问题讨论】:

    标签: arrays actionscript-3


    【解决方案1】:

    事件冒泡应该是魔法:

    container_mc.addEventListener(MouseEvent.CLICK, click_handler);
    
    function click_handler(event:MouseEvent):void {
      if (event.currentTarget == event.target) {
        return; // the container is the dispatcher
      }
    
      const sprite:Sprite = event.target as Sprite; // just for a typing
      if (!sprite) {
        trace("event.target is no sprite, set break point here for debugging.");
        return;
      }
    
      if (sprite.name == 'buddy_bnt_1' || sprite.name == 'puppet_mc1') {
        // do something
      } else if (sprite.name == 'buddy_bnt_2' || sprite.name == 'puppet_mc2') {
        // do something different
      } else if (sprite.name == 'buddy_bnt_3' || sprite.name == 'puppet_mc3') {
        // do something different
      } else if (sprite.name == 'buddy_bnt_4' || sprite.name == 'puppet_mc4') {
        // do something different
      }
    }
    

    【讨论】:

    • 您好,感谢您的快速回复!但我收到此错误类型错误:错误 #1009:无法访问空对象引用的属性或方法。在 chatV3_fla::MainTimeline/click_handler()
    • 看来对 sprite 的强制转换已损坏。你使用图像作为按钮吗?
    • 我增强了脚本以检查位图的父级是否是调度程序。请使用断点确认调度员的身份。
    【解决方案2】:
    container_mc.addEventListener(MouseEvent.CLICK, clickHandler);
    
    function clickHandler(event:MouseEvent):void
    {
        var clickedObject:DisplayObject = event.target as DisplayObject;
    
        trace (clickedObject.name);   // name of button clicked
        trace (clickedObject.parent.name);  // name of the parent
    }
    

    我使用了 DisplayObject,以便代码可以与 sprite、movieclip 或任何 DisplayObject 一起使用。因此,如果您还没有导入,请确保导入:

    import flash.display.DisplayObject;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 2012-02-07
      • 2011-07-16
      • 1970-01-01
      相关资源
      最近更新 更多