簡體   English   中英

將For循環與數組和addEventListener結合使用

[英]Using a For loop with an array and addEventListener

我有要在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:value不是函數

並停在

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

因此,從中我可以得出結論,將數組值解析到事件偵聽器時遇到了問題,但就我所知:)。 有人可以幫我解決我的困境嗎?

我看到了可能導致問題的一些原因:

  1. 位置是“字符串”,而不是IEventDispatchers
  2. 不確定是否可以在函數外部運行for循環,請嘗試將其包裝在函數中。

這是它的外觀。


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 ); } }

您必須將places轉換為IEventDispatchers數組,也許是地圖項或您正在執行的任何DisplayObject。

希望有幫助!

遵循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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM