好吧,快速免责声明,我来自 C++ 世界,在过去一个月左右的时间里只使用了 Typescript。可以公平地说,我对 Typescript 有点笨拙。
解决了这个问题,我将 Typescript 与 pixi.js 结合使用。
我用 DisplayObject
抽象了 pixi.js 显示对象界面。该接口(interface)的主要目的之一是为现实世界空间与 pixi.js 坐标系提供接口(interface)。我这样做还有其他一些原因,因为它会使处理DisplayObject
如果我有一个可以使用的通用界面,那就更容易了。
一个例子DisplayObject
看起来如下:
export interface DisplayObject {
// These are in "game space" (Cartesian)
getX(): number;
setX(val: number): void;
getY(): number;
setY(val: number): void;
// These are in "screen space" (canvas coordinates: upper left, +Y down)
getScreenX(): number;
setScreenX(val: number): void;
getScreenY(): number;
setScreenY(val: number): void;
}
然后我要做的是创建特定的显示对象,例如 implements
的 Sprite 来自DisplayObject
和extends
来自适当的 pixi.js 类。
例如,Sprite
看起来像下面这样:
export class Sprite extends PIXI.Sprite implements DisplayObject {
}
我发现设置 x/y 值和/或屏幕 x/y 值的代码通常是相同的。但我通常无法将代码与界面关联起来。
有没有好的方法可以分享这个通用代码?或者有更好的方法使用interface
和classes
改进设计。
所有显示对象类均派生自 pixi.js 类。那些 pixi.js 类本身 extend
来自PIXI.Container
类(class)。
我知道如何在 C++ 和 Swift 中执行此操作,但 Typescript 不支持多重继承。或者也许 Typescript 有类似于 Swift 的 extension
的东西是吗?
最佳答案
我最终使用 Mixins 来解决这个问题。我基于这篇优秀的文章:
https://www.bryntum.com/blog/the-mixin-pattern-in-typescript-all-you-need-to-know/
关于javascript - 共享接口(interface)公共(public)功能的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58212316/