mySprite.setPosition(new Vector(10,10))
之类的东西。我询问这个问题只是出于好奇,我并不寻求其他解决方案,我知道还有很多其他方法。
我能否定义一些通用类型,比如Variant,以便对于我的精灵具有的任何A类型的属性,我可以做出这样的事情:mySprite.myPropOfTypeA = new Variant<A>(new A(“landscape value”),new A(“portrait value”))
,从而使mySprite.myPropOfTypeA.value
根据isLandscape()
的结果返回不同的值?我希望这是通用的,这样我就不必为每个要像这样行为的属性创建派生类。谢谢!
interface IVector{
x:number,
y:number;
}
class Vector implements IVector{
private _x:number;
private _y:number;
public get x() {return this._x;}
public get y() {return this._y;}
constructor(x:number, y:number){
this._x=x;
this._y=y;
}
}
class VariableVector implements IVector{
private _landscape: IVector;
private _portrait: IVector;
constructor(landscape: IVector, portrait: IVector){
this._landscape=landscape;
this._portrait=portrait;
}
public get x() {return isLandscape()? this._landscape.x:this._portrait.x;}
public get y() {return isLandscape()? this._landscape.y:this._portrait.y;}
}
let mySprite=new Sprite(new VariableVector(new Vector(0,0), new Vector(10,10)));
谢谢!
mySprite.myPropOfTypeA.value
而不是mySprite.propOfTypeA
吗? - jcalzinterface A {value: number}
。一个更好的例子是mySprite.position.x,其中mySprite.position是类型为IPosition
的,具有interface IPosition {x:number, y:number;}
,我会执行mySprite.position=new Variant<IPosition>(pos1, pos2)
,其中pos1和pos2是实现IPosition接口的任何对象。 - user1354784