Createjs, как вы расширяете класс объекта библиотеки Animate CC?
Я нахожусь в процессе преобразования большого flash-приложения в canvas с использованием 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' не может быть назначен параметру типа '() => any'. Тип "BtnClass" не соответствует подписи "(): любой".
Любые идеи приветствуются.
2 ответа
extend
Метод принимает классы в качестве параметров, а не экземпляры.
createjs.extend(BtnClass, lib.btn2_mc);
Затем он возвращает прототип, к которому вы можете добавлять методы. Затем вы можете продвигать методы из суперкласса, предоставляя вам доступ к методам прототипа, если вы переопределите их. См. Классы EaselJS для конкретного использования.
Не уверен, что это решит вашу проблему, но по крайней мере его правильный синтаксис.
Я расширяю компонент createjs следующим образом и он работает. Пожалуйста, попробуйте сообщить мне, если у вас есть какие-либо проблемы
class BtnClass extends (lib.btn2_mc as { new(): any; }) {
}