時間を節約し、PIXIクラス(2d webGlレンダラーライブラリ)を拡張するクラス間で共通のコードを再利用したいと思います。
オブジェクトインターフェイス:
module Game.Core {
export interface IObject {}
export interface IManagedObject extends IObject{
getKeyInManager(key: string): string;
setKeyInManager(key: string): IObject;
}
}
私の問題は、コード内のことであるgetKeyInManager
とsetKeyInManager
変更されませんし、私はないそれを複製し、それを再利用したい、ここでの実装は次のとおりです。
export class ObjectThatShouldAlsoBeExtended{
private _keyInManager: string;
public getKeyInManager(key: string): string{
return this._keyInManager;
}
public setKeyInManager(key: string): DisplayObject{
this._keyInManager = key;
return this;
}
}
私がやりたいのManager.add()
は、マネージャーで使用されるキーを介して、オブジェクト自体の内部のオブジェクトをそのプロパティで参照するために自動的に追加することです_keyInManager
。
それでは、テクスチャの例を見てみましょう。ここに行きますTextureManager
module Game.Managers {
export class TextureManager extends Game.Managers.Manager {
public createFromLocalImage(name: string, relativePath: string): Game.Core.Texture{
return this.add(name, Game.Core.Texture.fromImage("/" + relativePath)).get(name);
}
}
}
私がそうするときthis.add()
、私はGame.Managers.Manager
add()
メソッドがによって返されるオブジェクトに存在するであろうメソッドを呼び出すことを望みますGame.Core.Texture.fromImage("/" + relativePath)
。このオブジェクトは、この場合はTexture
:になります。
module Game.Core {
// I must extends PIXI.Texture, but I need to inject the methods in IManagedObject.
export class Texture extends PIXI.Texture {
}
}
これIManagedObject
はインターフェースであり、実装を含めることはできませんが、クラスをクラスObjectThatShouldAlsoBeExtended
内に挿入するために何を書くべきかわかりませんTexture
。同じプロセスをするために必要とされるであろうことを知ってSprite
、TilingSprite
、Layer
およびより。
ここには経験豊富なTypeScriptフィードバック/アドバイスが必要です。それは可能である必要がありますが、一度に1つしか不可能であるため、複数の拡張ではなく、他の解決策は見つかりませんでした。