擴展事件僅真的必要:
public class EnemyEvent extends Event
{
// Constants used to represent event type
public static const ENEMY_KILLED:String = "killed";
// Event properties
public var score:int = 0;
/**
* Constructor
* Retain Event behaviours
*/
public function EnemyEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
}
}
所以,當你發送從敵人這個事件中,你可以去:
var evt:EnemyEvent = new EnemyEvent(EnemyEvent.ENEMY_KILLED);
evt.score = myScoreValue;
dispatchEvent(evt);
然後利用score
財產從遊戲引擎內的收聽方法:
enemy.addEventListener(EnemyEvent.ENEMY_KILLED, _countKill);
function _countKill(e:EnemyEvent):void
{
gameTotalScore += e.score;
if(gameTotalScore > 100) getAchievement();
e.target.removeEventListener(e.type, _countKill); // <-- woudn't work without extending event either
}
如果你只需要存儲常量addEventListener(x, ..)
使用,new Event(x)
等那麼你可以只讓持有這些並沒有任何與事件類:
public class CustomEvents
{
public static const MY_CUSTOM_EVENT:String = "myCustomEvent";
}
這樣你可以只使用這些需要:
new Event(CustomEvents.MY_CUSTOM_EVENT);
addEventListener(CustomEvents.MY_CUSTOM_EVENT, _listener);
前一種方法仍然是可取的,因爲它更整齊,更合乎邏輯。
此外;您的有關您的自定義事件的註釋具有常數,例如ENTER_FRAME
並非如此,因爲它們是static
並且屬於事件。如果你試圖在你的答案通過例如訪問ENTER_FRAME
你會得到這個錯誤:
1119:通過 參考靜態類型類可能未定義的屬性ENTER_FRAME的訪問。