AS3 Как расширить класс Event, не сохраняя существующие типы событий? - PullRequest
0 голосов
/ 20 декабря 2011

Я хотел бы расширить класс Event, чтобы добавить некоторые события, которые я использую в игре.Но я не хочу, чтобы новый класс событий имел старые общедоступные статические типы. Например, я не хочу иметь:

NewEventClass.ENTER_FRAME

Как вы расширяете класс Event, не получаястарые типы смешаны?

Есть ли способ перехитрить AS3, чтобы исключить ненужные типы?

Или мне вообще следует избегать создания нового типа события и просто добавлять новые строки?

1 Ответ

7 голосов
/ 20 декабря 2011

Расширение 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...