Createjs, как расширить класс объекта библиотеки Animate CC?

Я нахожусь в процессе преобразования большого флеш-приложения в холст с помощью Typescript, и у меня возникают проблемы с использованием классов для расширения объектов библиотеки.

Используя библиотеку классов для кнопок,

class BtnClass { 
    constructor(el: createjs.MovieClip) {
        el.addEventListener("mouseover", MouseOverHandler.bind(el));
    }
}

Если бы у меня был объект, размещенный на сцене в Animate CC, я мог бы использовать этот класс, добавляя действия в кадр для экспорта, и все работало бы хорошо.

Btn1 = new BtnClass(this.buttons.btn1_mc);

Но я не могу заставить это работать для динамически размещенных объектов библиотеки.

Я получаю сообщение об ошибке при попытке расширить свой объект с помощью этого класса в библиотечном объекте, который не размещен на этапе Animate CC.

var libraryObject = new lib.btn2_mc();
var dynamicButton = createjs.extend(new BtnClass(libraryObject), libraryObject);
currentElement.addChild(dynamicButton);

Ошибка: Аргумент типа «BtnClass» нельзя присвоить параметру типа «() => любой». Тип «BtnClass» не соответствует подписи «(): any».

Любые идеи приветствуются.


person dross    schedule 27.02.2018    source источник


Ответы (2)


Я расширяю компонент createjs следующим образом, и он работает. Пожалуйста, попробуйте дайте мне знать, если у вас есть какие-либо проблемы

class BtnClass extends (lib.btn2_mc as { new(): any; }) {
}
person Pradeep Prabhu B R    schedule 25.03.2018

Метод extend принимает в качестве параметров классы, а не экземпляры.

createjs.extend(BtnClass, lib.btn2_mc);

Затем он возвращает прототип, к которому вы можете добавлять методы. Затем вы можете продвигать методы из суперкласса, предоставляя вам доступ к методам прототипа, если вы их переопределяете. См. классы EaselJS для конкретных применений.

Не уверен, что это решит вашу проблему, но, по крайней мере, это правильный синтаксис.

person Lanny    schedule 26.03.2018