Тут два варианта.
1) метод swap(e:MouseEvent) вообще не вызывается, потому что нахоидтся не в классе персонажа
2) Подписан не тот экземпляр, который шлет событие
п.с.
вот это:

Код AS3:
trace(type);//проверка на досягаемость этого места
Вообще бред. Естественно этот код сработает, если создать новое событие. Это же конструктор.
Ровно как и вот эта бессмысленная проверка

Код AS3:
this.addEventListener(cEvents.INDEX_CHANGE, changed);
if (this.hasEventListener(cEvents.INDEX_CHANGE)) trace("have it");//проверка
Конечно же слушатель будет, сразу после того как его добавили