Actionscript 3 AS3如何在不保留任何现有事件类型的情况下扩展事件类?

Actionscript 3 AS3如何在不保留任何现有事件类型的情况下扩展事件类?,actionscript-3,class,inheritance,Actionscript 3,Class,Inheritance,我想扩展事件类来添加我在游戏中使用的一些事件。 但是我不希望新的事件类具有旧的公共静态类型。。 例如,我不想有: NewEventClass.ENTER_FRAME 如何在不混合旧类型的情况下扩展事件类 有没有办法比AS3更聪明,省去非联合类型 或者我应该避免创建一个新的事件类型,而只添加新的字符串吗?只有在您想向事件添加一些额外属性时,才真正需要扩展事件,例如: public class EnemyEvent extends Event { // Constants used to

我想扩展事件类来添加我在游戏中使用的一些事件。 但是我不希望新的事件类具有旧的公共静态类型。。 例如,我不想有:

NewEventClass.ENTER_FRAME
如何在不混合旧类型的情况下扩展事件类

有没有办法比AS3更聪明,省去非联合类型

或者我应该避免创建一个新的事件类型,而只添加新的字符串吗?

只有在您想向事件添加一些额外属性时,才真正需要扩展事件,例如:

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
}
因此,您可以根据需要使用这些:

  • 新事件(CustomEvents.MY\u CUSTOM\u事件)
  • addEventListener(CustomEvents.MY_CUSTOM_EVENT,_listener)
前一种方法仍然更可取,因为它更整洁、更符合逻辑

此外;您关于自定义事件具有常量(如
ENTER\u FRAME
)的说明并非如此,因为它们是
static
,属于事件。如果您通过答案中的示例尝试访问
ENTER\u FRAME
,则会出现此错误:

1119:通过 引用静态类型类

public class CustomEvents
{
    public static const MY_CUSTOM_EVENT:String = "myCustomEvent";
}