首页 > 解决方案 > 共享接口常用功能的有效方法

问题描述

好的,快速免责声明,我来自 C++ 世界,过去一个月左右只使用 Typescript。在这一点上可以公平地说,我对 Typescript 有点笨拙。

顺便说一句,我将 Typescript 与 pixi.js 一起使用。

我已经用DisplayObject接口抽象了 pixi.js 显示对象。该接口的主要目的之一是为现实世界空间与 pixi.js 坐标系提供接口。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来自DisplayObjectextends来自适当的 pixi.js 类的精灵。

例如,Sprite如下所示:

export class Sprite extends PIXI.Sprite implements DisplayObject {
}

我发现设置 x/y 值和/或屏幕 x/y 值的代码通常是相同的。但我不能一般地将代码与接口相关联。

有没有分享这个通用代码的好方法?或者有没有更好的方法来使用interfaceclasses改进设计。

所有显示对象类都派生自 pixi.js 类。而那些 pixi.js 类本身extend来自一个PIXI.Container类。

我知道如何在 C++ 和 Swift 中做到这一点,但 Typescript 不支持多重继承。或者也许 Typescript 有一些类似于 Swift 的东西extension

标签: javascripttypescript

解决方案


我最终使用 Mixins 来解决这个问题。我基于这篇优秀的文章:

https://www.bryntum.com/blog/the-mixin-pattern-in-typescript-all-you-need-to-know/


推荐阅读