使用带有数组和addEventListener的For循环

时间:2009-11-11 04:30:31

标签: flex flash actionscript-3 actionscript

我在Flash中创建了这张地图。单击状态,然后可以单击图标以查看某些信息的工具提示/弹出窗口。我试图做的不是为每个不同的图标创建新的函数和事件监听器,而是使用for循环...但它不是那么顺利。我很长时间没有碰过AS,所以忍受我:)

var ToolTipMC = map.toolTip;
ToolTipMC.alpha = 0;
var places:Array = new Array();

places = [ "map.paulsens", "map.plutonic", "map.jundee", "map.wiluna", "map.darlot", "map.lawers", "map.gwaliaDeeps", "map.sunriseDam", "map.marvelLoch" ];

function enableToolTips( event:MouseEvent ):void {
    ToolTipMC.x = places[ i ].x + 10;
    ToolTipMC.y = places[ i ].y - ( ToolTipMC.height - 9 );
    Tweener.addTween( ToolTipMC, { y: ToolTipMC.y + 5, alpha: 1, transition: "easeInOutExpo", time: 0.3 } );
    ToolTipMC.toolTipTextField.text = "It worked!";
    trace( "Mouse Over" );
}

function disableToolTips( event:MouseEvent ):void {
    Tweener.addTween( ToolTipMC, { alpha: 0, transition: "easeInOutExpo", time: 0.3 } );
    trace( "Mouse Out" );
}

for( var i:uint = 0; i < places.length; i++ ) {
    places[ i ].addEventListener( MouseEvent.MOUSE_OVER, enableToolTips );
    places[ i ].addEventListener( MouseEvent.MOUSE_OUT, disableToolTips );
}

数组中的项是实例名称,我正在使用Tweener类。

以下内容抛出输出错误

  

TypeError:错误#1006:值不是函数

并停在

places[ i ].addEventListener( MouseEvent.MOUSE_OVER, enableToolTips );

所以从这里我可以得知它在解析数组值到事件监听器时遇到了问题,但这就是我得到的:)。有人可以帮我解决我的困境吗?

2 个答案:

答案 0 :(得分:1)

我看到可能导致问题的一些事情:

  1. 地方是“字符串”,而不是IEventDispatchers
  2. 不确定您是否可以在函数外部运行for循环,尝试将其包装在函数中。
  3. 这就是它的样子。

    
    function addListeners():void {
        for( var i:uint = 0; i < places.length; i++ ) {
            (places[ i ] as IEventDispatcher).addEventListener( MouseEvent.MOUSE_OVER, enableToolTips );
            (places[ i ] as IEventDispatcher).addEventListener( MouseEvent.MOUSE_OUT, disableToolTips );
        }
    }

    您必须将function addListeners():void { for( var i:uint = 0; i < places.length; i++ ) { (places[ i ] as IEventDispatcher).addEventListener( MouseEvent.MOUSE_OVER, enableToolTips ); (places[ i ] as IEventDispatcher).addEventListener( MouseEvent.MOUSE_OUT, disableToolTips ); } }转换为IEventDispatcher数组,可能是地图项或您正在做的任何事情,一些DisplayObject。

    希望有所帮助!

答案 1 :(得分:1)

继来自viatropos的回答 - 我假设您想要使用发送活动的工具提示访问“地点”?您可以使用event.target

执行此操作
function enableToolTips( event:MouseEvent ):void {
    var place:DisplayObject = DisplayObject(event.target);
    ToolTipMC.x = place.x + 10;
    ToolTipMC.y = place.y - ( ToolTipMC.height - 9 );

    //the rest of your function...
}

(我也猜测你的“地方”是放在舞台上的动画片段 - 因此演员阵容DisplayObject