2020-07-22 23:30:31 +08:00
|
|
|
|
module es {
|
|
|
|
|
|
export class SpriteRenderer extends RenderableComponent {
|
|
|
|
|
|
public get bounds(){
|
|
|
|
|
|
if (this._areBoundsDirty){
|
|
|
|
|
|
if (this._sprite){
|
|
|
|
|
|
this._bounds.calculateBounds(this.entity.transform.position, this._localOffset, this._origin,
|
|
|
|
|
|
this.entity.transform.scale, this.entity.transform.rotation, this._sprite.sourceRect.width,
|
|
|
|
|
|
this._sprite.sourceRect.height);
|
|
|
|
|
|
this._areBoundsDirty = false;
|
|
|
|
|
|
}
|
2020-06-10 16:25:39 +08:00
|
|
|
|
|
2020-07-22 23:30:31 +08:00
|
|
|
|
return this._bounds;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2020-06-18 16:35:51 +08:00
|
|
|
|
|
2020-07-22 23:30:31 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 精灵的原点。这是在设置精灵时自动设置的
|
|
|
|
|
|
*/
|
|
|
|
|
|
public get origin(): Vector2{
|
|
|
|
|
|
return this._origin;
|
2020-07-08 18:12:17 +08:00
|
|
|
|
}
|
2020-07-01 14:19:40 +08:00
|
|
|
|
|
2020-07-22 23:30:31 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 精灵的原点。这是在设置精灵时自动设置的
|
|
|
|
|
|
* @param value
|
|
|
|
|
|
*/
|
|
|
|
|
|
public set origin(value: Vector2){
|
|
|
|
|
|
this.setOrigin(value);
|
|
|
|
|
|
}
|
2020-06-29 15:41:02 +08:00
|
|
|
|
|
2020-07-22 23:30:31 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 用归一化方法设置原点
|
|
|
|
|
|
* x/y 均为 0-1
|
|
|
|
|
|
*/
|
|
|
|
|
|
public get originNormalized(): Vector2{
|
|
|
|
|
|
return new Vector2(this._origin.x / this.width * this.entity.transform.scale.x,
|
|
|
|
|
|
this._origin.y / this.height * this.entity.transform.scale.y);
|
|
|
|
|
|
}
|
2020-06-19 19:28:14 +08:00
|
|
|
|
|
2020-07-22 23:30:31 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 用归一化方法设置原点
|
|
|
|
|
|
* x/y 均为 0-1
|
|
|
|
|
|
* @param value
|
|
|
|
|
|
*/
|
|
|
|
|
|
public set originNormalized(value: Vector2){
|
|
|
|
|
|
this.setOrigin(new Vector2(value.x * this.width / this.entity.transform.scale.x,
|
|
|
|
|
|
value.y * this.height / this.entity.transform.scale.y));
|
|
|
|
|
|
}
|
2020-06-19 18:16:42 +08:00
|
|
|
|
|
2020-07-22 23:30:31 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 应该由这个精灵显示的精灵
|
|
|
|
|
|
* 当设置时,精灵的原点也被设置为精灵的origin
|
|
|
|
|
|
*/
|
|
|
|
|
|
public get sprite(): Sprite {
|
|
|
|
|
|
return this._sprite;
|
2020-07-22 20:07:14 +08:00
|
|
|
|
}
|
2020-06-22 15:27:58 +08:00
|
|
|
|
|
2020-07-22 23:30:31 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 应该由这个精灵显示的精灵
|
|
|
|
|
|
* 当设置时,精灵的原点也被设置为精灵的origin
|
|
|
|
|
|
* @param value
|
|
|
|
|
|
*/
|
|
|
|
|
|
public set sprite(value: Sprite) {
|
|
|
|
|
|
this.setSprite(value);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
protected _origin: Vector2;
|
|
|
|
|
|
protected _sprite: Sprite;
|
2020-07-01 14:19:40 +08:00
|
|
|
|
|
2020-07-22 23:30:31 +08:00
|
|
|
|
constructor(sprite: Sprite | egret.Texture) {
|
|
|
|
|
|
super();
|
|
|
|
|
|
if (sprite instanceof Sprite)
|
|
|
|
|
|
this.setSprite(sprite);
|
|
|
|
|
|
else if(sprite instanceof egret.Texture)
|
|
|
|
|
|
this.setSprite(new Sprite(sprite));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 设置精灵并更新精灵的原点以匹配sprite.origin
|
|
|
|
|
|
* @param sprite
|
|
|
|
|
|
*/
|
|
|
|
|
|
public setSprite(sprite: Sprite): SpriteRenderer {
|
|
|
|
|
|
this._sprite = sprite;
|
|
|
|
|
|
if (this._sprite) {
|
|
|
|
|
|
this._origin = this._sprite.origin;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return this;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 设置可渲染的原点
|
|
|
|
|
|
* @param origin
|
|
|
|
|
|
*/
|
|
|
|
|
|
public setOrigin(origin: Vector2): SpriteRenderer{
|
|
|
|
|
|
if (this._origin != origin){
|
|
|
|
|
|
this._origin = origin;
|
|
|
|
|
|
this._areBoundsDirty = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return this;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 用归一化方法设置原点
|
|
|
|
|
|
* x/y 均为 0-1
|
|
|
|
|
|
* @param value
|
|
|
|
|
|
*/
|
|
|
|
|
|
public setOriginNormalized(value: Vector2): SpriteRenderer{
|
|
|
|
|
|
this.setOrigin(new Vector2(value.x * this.width / this.entity.transform.scale.x,
|
|
|
|
|
|
value.y * this.height / this.entity.transform.scale.y));
|
|
|
|
|
|
return this;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public render(camera: Camera) {
|
|
|
|
|
|
// TODO: render
|
|
|
|
|
|
}
|
2020-07-01 14:19:40 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2020-07-22 23:30:31 +08:00
|
|
|
|
|