【问题标题】:AS3 reference buttonsAS3 参考按钮
【发布时间】:2012-04-11 16:54:20
【问题描述】:

我怎样才能做到这一点?我需要从引用中删除单词 Button 以引用将被着色的实际项目。提前谢谢你。

disagreeButton.addEventListener(MouseEvent.ROLL_OVER, mouseRollOver);
contentMain.clickButton1.addEventListener(MouseEvent.ROLL_OVER, mouseRollOver);

function mouseRollOver(e:MouseEvent):void { 
    var c:Color = new Color();
    c.setTint (0xFFFFFF, 1);
    //the issue is this line:
    this[e.target.name.replace( "Button", "" )].transform.colorTransform = c;
}

【问题讨论】:

  • 这个解决方案有什么问题?它编译吗?跑?有意想不到的副作用?
  • TypeError:错误 #1010:术语未定义且没有属性。在 index_test_fla::MainTimeline/mouseRollOver() 处仅针对“contentMain.clickButton1”得到此错误
  • 您是否测试过 e.target.name.replace("Button","") 的计算结果与您认为的一样?
  • 好吧,e.target.name.replace("Button","") 是一个字符串,所以它不起作用。
  • 问题是e.target.name.replace("Button","")不包含movieclip所在的名称,即contentMain。

标签: actionscript-3 flash-cs5


【解决方案1】:

既然我了解了您的问题,我会推荐以下内容。

  1. thiscontentMain 和其他任何地方都有单独的按钮方法。然后在适当的情况下通过this[...]contentMain[...] 访问对象。

    disagreeButton.addEventListener(MouseEvent.ROLL_OVER, mainMouseRollOver);
    contentMain.clickButton1.addEventListener(MouseEvent.ROLL_OVER, contentMainMouseRollOver);
    
    function mainMouseRollOver(e:MouseEvent):void { 
        mouseRolloverLogic(this[e.target.name.replace( "Button", "" )];
    }
    
    function contentMainMouseRollOver(e:MouseEvent):void { 
        mouseRolloverLogic(contentMain[e.target.name.replace( "Button", "" )];
    }
    
    function mouseRolloverLogic(item:DisplayObject):void {
        var c:Color = new Color();
        c.setTint (0xFFFFFF, 1);
        item.transform.colorTransform = c;
    }
    
  2. 为您拥有的方法添加额外的逻辑。

    if (this[...] != null) {
        ...
    }else if (contentMain[...] != null) {
        ...
    }
    

【讨论】:

  • 谢谢你的作品。有没有“更清洁”的方式来做到这一点?
  • @Anderson 第一个选项可能会被认为是“更干净”。只需为contentMain 中的按钮和主应用程序中的按钮创建不同的mouseRollOver 函数即可。
  • 仅仅因为目标不同而重复一个函数似乎很奇怪。我只是认为会有一种更有效的方法将所有代码都放在主时间线上。
  • 可以让多个mouseRollOver 函数抓取它们应该处理的任何对象,然后将其传递给内部函数。它们就像实际功能的包装器一样。减少代码重复。
  • 为了确保我在同一页面上,您是说创建一个包含色调的单独函数,mouseRollOver 只是从它所在的位置调用该函数?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-21
相关资源
最近更新 更多