Расширение Event требуется только действительно , если вы хотите добавить к нему некоторые дополнительные свойства, например:
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)
и т. Д., То вы можете просто создать класс, который содержит их и не имеет никакого отношения к Event:
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 через
ссылка со статическим типом Class.