আমি আমার সময় বাঁচাতে এবং ক্লাসে PIXI ক্লাসগুলি (একটি 2 ডি ওয়েবজিএল রেন্ডারির পাঠাগার) প্রসারিত করার জন্য সাধারণ কোডটি পুনরায় ব্যবহার করতে চাই।
অবজেক্ট ইন্টারফেস:
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
এবং আরো।
আমার এখানে অভিজ্ঞ টাইপসক্রিপ্ট প্রতিক্রিয়া / পরামর্শ প্রয়োজন, এটি করা অবশ্যই সম্ভব হবে, তবে একাধিক প্রসার দ্বারা নয় যেহেতু এই সময়ে কেবল একটিই সম্ভব, আমি অন্য কোনও সমাধান খুঁজে পাইনি।