diff --git a/demo/libs/framework/framework.d.ts b/demo/libs/framework/framework.d.ts index 6bcec3d0..1ca79471 100644 --- a/demo/libs/framework/framework.d.ts +++ b/demo/libs/framework/framework.d.ts @@ -311,19 +311,6 @@ declare class Mesh extends RenderableComponent { render(camera: Camera): void; reset(): void; } -declare class Sprite { - texture2D: egret.Texture; - readonly sourceRect: Rectangle; - readonly center: Vector2; - origin: Vector2; - readonly uvs: Rectangle; - constructor(texture: egret.Texture, sourceRect?: Rectangle, origin?: Vector2); -} -declare class SpriteAnimation { - readonly sprites: Sprite[]; - readonly frameRate: number; - constructor(sprites: Sprite[], frameRate: number); -} declare class SpriteRenderer extends RenderableComponent { private _origin; private _sprite; @@ -338,6 +325,35 @@ declare class SpriteRenderer extends RenderableComponent { onRemovedFromEntity(): void; reset(): void; } +declare class TiledSpriteRenderer extends SpriteRenderer { + protected sourceRect: Rectangle; + protected leftTexture: egret.Bitmap; + protected rightTexture: egret.Bitmap; + scrollX: number; + scrollY: number; + constructor(sprite: Sprite); + render(camera: Camera): void; +} +declare class ScrollingSpriteRenderer extends TiledSpriteRenderer { + scrollSpeedX: number; + scroolSpeedY: number; + private _scrollX; + private _scrollY; + update(): void; +} +declare class Sprite { + texture2D: egret.Texture; + readonly sourceRect: Rectangle; + readonly center: Vector2; + origin: Vector2; + readonly uvs: Rectangle; + constructor(texture: egret.Texture, sourceRect?: Rectangle, origin?: Vector2); +} +declare class SpriteAnimation { + readonly sprites: Sprite[]; + readonly frameRate: number; + constructor(sprites: Sprite[], frameRate: number); +} declare class SpriteAnimator extends SpriteRenderer { onAnimationCompletedEvent: Function; speed: number; @@ -371,13 +387,6 @@ declare enum State { paused = 2, completed = 3 } -declare class TiledSpriteRenderer extends SpriteRenderer { - protected sourceRect: Rectangle; - scrollX: number; - scrollY: number; - constructor(sprite: Sprite); - render(camera: Camera): void; -} interface ITriggerListener { onTriggerEnter(other: Collider, local: Collider): any; onTriggerExit(other: Collider, local: Collider): any; diff --git a/demo/libs/framework/framework.js b/demo/libs/framework/framework.js index b0e10756..230da8d3 100644 --- a/demo/libs/framework/framework.js +++ b/demo/libs/framework/framework.js @@ -1548,31 +1548,6 @@ var Mesh = (function (_super) { }; return Mesh; }(RenderableComponent)); -var Sprite = (function () { - function Sprite(texture, sourceRect, origin) { - if (sourceRect === void 0) { sourceRect = new Rectangle(0, 0, texture.textureWidth, texture.textureHeight); } - if (origin === void 0) { origin = sourceRect.getHalfSize(); } - this.uvs = new Rectangle(); - this.texture2D = texture; - this.sourceRect = sourceRect; - this.center = new Vector2(sourceRect.width * 0.5, sourceRect.height * 0.5); - this.origin = origin; - var inverseTexW = 1 / texture.textureWidth; - var inverseTexH = 1 / texture.textureHeight; - this.uvs.x = sourceRect.x * inverseTexW; - this.uvs.y = sourceRect.y * inverseTexH; - this.uvs.width = sourceRect.width * inverseTexW; - this.uvs.height = sourceRect.height * inverseTexH; - } - return Sprite; -}()); -var SpriteAnimation = (function () { - function SpriteAnimation(sprites, frameRate) { - this.sprites = sprites; - this.frameRate = frameRate; - } - return SpriteAnimation; -}()); var SpriteRenderer = (function (_super) { __extends(SpriteRenderer, _super); function SpriteRenderer() { @@ -1644,6 +1619,108 @@ var SpriteRenderer = (function (_super) { }; return SpriteRenderer; }(RenderableComponent)); +var TiledSpriteRenderer = (function (_super) { + __extends(TiledSpriteRenderer, _super); + function TiledSpriteRenderer(sprite) { + var _this = _super.call(this) || this; + _this.leftTexture = new egret.Bitmap(); + _this.rightTexture = new egret.Bitmap(); + _this.leftTexture.texture = sprite.texture2D; + _this.rightTexture.texture = sprite.texture2D; + _this.setSprite(sprite); + _this.sourceRect = sprite.sourceRect; + return _this; + } + Object.defineProperty(TiledSpriteRenderer.prototype, "scrollX", { + get: function () { + return this.sourceRect.x; + }, + set: function (value) { + this.sourceRect.x = value; + if (this.sourceRect.x < -this.sourceRect.width) + this.sourceRect.x = this.sourceRect.width; + else if (this.sourceRect.x > this.sourceRect.width) + this.sourceRect.x = -this.sourceRect.width; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TiledSpriteRenderer.prototype, "scrollY", { + get: function () { + return this.sourceRect.y; + }, + set: function (value) { + this.sourceRect.y = value; + if (this.sourceRect.y < -this.sourceRect.height) + this.sourceRect.y = this.sourceRect.height; + else if (this.sourceRect.y > this.sourceRect.height) + this.sourceRect.y = -this.sourceRect.height; + }, + enumerable: true, + configurable: true + }); + TiledSpriteRenderer.prototype.render = function (camera) { + if (!this.sprite) + return; + _super.prototype.render.call(this, camera); + var renderTexture = new egret.RenderTexture(); + var cacheBitmap = new egret.DisplayObjectContainer(); + cacheBitmap.removeChildren(); + cacheBitmap.addChild(this.leftTexture); + cacheBitmap.addChild(this.rightTexture); + this.leftTexture.x = this.sourceRect.x; + this.rightTexture.x = this.sourceRect.x + this.sourceRect.width; + this.leftTexture.y = this.sourceRect.y; + this.rightTexture.y = this.sourceRect.y; + cacheBitmap.cacheAsBitmap = true; + renderTexture.drawToTexture(cacheBitmap, new egret.Rectangle(0, 0, this.sourceRect.width, this.sourceRect.height)); + this.bitmap.texture = renderTexture; + }; + return TiledSpriteRenderer; +}(SpriteRenderer)); +var ScrollingSpriteRenderer = (function (_super) { + __extends(ScrollingSpriteRenderer, _super); + function ScrollingSpriteRenderer() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.scrollSpeedX = 15; + _this.scroolSpeedY = 0; + _this._scrollX = 0; + _this._scrollY = 0; + return _this; + } + ScrollingSpriteRenderer.prototype.update = function () { + this.scrollX += this.scrollSpeedX * Time.deltaTime; + this.scrollY += this.scroolSpeedY * Time.deltaTime; + this.sourceRect.x = this._scrollX; + this.sourceRect.y = this._scrollY; + }; + return ScrollingSpriteRenderer; +}(TiledSpriteRenderer)); +var Sprite = (function () { + function Sprite(texture, sourceRect, origin) { + if (sourceRect === void 0) { sourceRect = new Rectangle(0, 0, texture.textureWidth, texture.textureHeight); } + if (origin === void 0) { origin = sourceRect.getHalfSize(); } + this.uvs = new Rectangle(); + this.texture2D = texture; + this.sourceRect = sourceRect; + this.center = new Vector2(sourceRect.width * 0.5, sourceRect.height * 0.5); + this.origin = origin; + var inverseTexW = 1 / texture.textureWidth; + var inverseTexH = 1 / texture.textureHeight; + this.uvs.x = sourceRect.x * inverseTexW; + this.uvs.y = sourceRect.y * inverseTexH; + this.uvs.width = sourceRect.width * inverseTexW; + this.uvs.height = sourceRect.height * inverseTexH; + } + return Sprite; +}()); +var SpriteAnimation = (function () { + function SpriteAnimation(sprites, frameRate) { + this.sprites = sprites; + this.frameRate = frameRate; + } + return SpriteAnimation; +}()); var SpriteAnimator = (function (_super) { __extends(SpriteAnimator, _super); function SpriteAnimator(sprite) { @@ -1738,46 +1815,6 @@ var State; State[State["paused"] = 2] = "paused"; State[State["completed"] = 3] = "completed"; })(State || (State = {})); -var TiledSpriteRenderer = (function (_super) { - __extends(TiledSpriteRenderer, _super); - function TiledSpriteRenderer(sprite) { - var _this = _super.call(this) || this; - _this.setSprite(sprite); - _this.sourceRect = sprite.sourceRect; - return _this; - } - Object.defineProperty(TiledSpriteRenderer.prototype, "scrollX", { - get: function () { - return this.sourceRect.x; - }, - set: function (value) { - this.sourceRect.x = value; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TiledSpriteRenderer.prototype, "scrollY", { - get: function () { - return this.sourceRect.y; - }, - set: function (value) { - this.sourceRect.y = value; - }, - enumerable: true, - configurable: true - }); - TiledSpriteRenderer.prototype.render = function (camera) { - if (!this.sprite) - return; - _super.prototype.render.call(this, camera); - var renderTexture = new egret.RenderTexture(); - var targetTexture = new egret.Bitmap(this.sprite.texture2D); - var clipBounds = new egret.Rectangle(this.sourceRect.x, this.sourceRect.y, this.sourceRect.width, this.sourceRect.height); - renderTexture.drawToTexture(targetTexture, clipBounds); - this.bitmap.texture = renderTexture; - }; - return TiledSpriteRenderer; -}(SpriteRenderer)); var Mover = (function (_super) { __extends(Mover, _super); function Mover() { diff --git a/source/bin/framework.d.ts b/source/bin/framework.d.ts index 6bcec3d0..1ca79471 100644 --- a/source/bin/framework.d.ts +++ b/source/bin/framework.d.ts @@ -311,19 +311,6 @@ declare class Mesh extends RenderableComponent { render(camera: Camera): void; reset(): void; } -declare class Sprite { - texture2D: egret.Texture; - readonly sourceRect: Rectangle; - readonly center: Vector2; - origin: Vector2; - readonly uvs: Rectangle; - constructor(texture: egret.Texture, sourceRect?: Rectangle, origin?: Vector2); -} -declare class SpriteAnimation { - readonly sprites: Sprite[]; - readonly frameRate: number; - constructor(sprites: Sprite[], frameRate: number); -} declare class SpriteRenderer extends RenderableComponent { private _origin; private _sprite; @@ -338,6 +325,35 @@ declare class SpriteRenderer extends RenderableComponent { onRemovedFromEntity(): void; reset(): void; } +declare class TiledSpriteRenderer extends SpriteRenderer { + protected sourceRect: Rectangle; + protected leftTexture: egret.Bitmap; + protected rightTexture: egret.Bitmap; + scrollX: number; + scrollY: number; + constructor(sprite: Sprite); + render(camera: Camera): void; +} +declare class ScrollingSpriteRenderer extends TiledSpriteRenderer { + scrollSpeedX: number; + scroolSpeedY: number; + private _scrollX; + private _scrollY; + update(): void; +} +declare class Sprite { + texture2D: egret.Texture; + readonly sourceRect: Rectangle; + readonly center: Vector2; + origin: Vector2; + readonly uvs: Rectangle; + constructor(texture: egret.Texture, sourceRect?: Rectangle, origin?: Vector2); +} +declare class SpriteAnimation { + readonly sprites: Sprite[]; + readonly frameRate: number; + constructor(sprites: Sprite[], frameRate: number); +} declare class SpriteAnimator extends SpriteRenderer { onAnimationCompletedEvent: Function; speed: number; @@ -371,13 +387,6 @@ declare enum State { paused = 2, completed = 3 } -declare class TiledSpriteRenderer extends SpriteRenderer { - protected sourceRect: Rectangle; - scrollX: number; - scrollY: number; - constructor(sprite: Sprite); - render(camera: Camera): void; -} interface ITriggerListener { onTriggerEnter(other: Collider, local: Collider): any; onTriggerExit(other: Collider, local: Collider): any; diff --git a/source/bin/framework.js b/source/bin/framework.js index b0e10756..c5fa6467 100644 --- a/source/bin/framework.js +++ b/source/bin/framework.js @@ -1548,31 +1548,6 @@ var Mesh = (function (_super) { }; return Mesh; }(RenderableComponent)); -var Sprite = (function () { - function Sprite(texture, sourceRect, origin) { - if (sourceRect === void 0) { sourceRect = new Rectangle(0, 0, texture.textureWidth, texture.textureHeight); } - if (origin === void 0) { origin = sourceRect.getHalfSize(); } - this.uvs = new Rectangle(); - this.texture2D = texture; - this.sourceRect = sourceRect; - this.center = new Vector2(sourceRect.width * 0.5, sourceRect.height * 0.5); - this.origin = origin; - var inverseTexW = 1 / texture.textureWidth; - var inverseTexH = 1 / texture.textureHeight; - this.uvs.x = sourceRect.x * inverseTexW; - this.uvs.y = sourceRect.y * inverseTexH; - this.uvs.width = sourceRect.width * inverseTexW; - this.uvs.height = sourceRect.height * inverseTexH; - } - return Sprite; -}()); -var SpriteAnimation = (function () { - function SpriteAnimation(sprites, frameRate) { - this.sprites = sprites; - this.frameRate = frameRate; - } - return SpriteAnimation; -}()); var SpriteRenderer = (function (_super) { __extends(SpriteRenderer, _super); function SpriteRenderer() { @@ -1644,6 +1619,108 @@ var SpriteRenderer = (function (_super) { }; return SpriteRenderer; }(RenderableComponent)); +var TiledSpriteRenderer = (function (_super) { + __extends(TiledSpriteRenderer, _super); + function TiledSpriteRenderer(sprite) { + var _this = _super.call(this) || this; + _this.leftTexture = new egret.Bitmap(); + _this.rightTexture = new egret.Bitmap(); + _this.leftTexture.texture = sprite.texture2D; + _this.rightTexture.texture = sprite.texture2D; + _this.setSprite(sprite); + _this.sourceRect = sprite.sourceRect; + return _this; + } + Object.defineProperty(TiledSpriteRenderer.prototype, "scrollX", { + get: function () { + return this.sourceRect.x; + }, + set: function (value) { + this.sourceRect.x = value; + if (this.sourceRect.x < -this.sourceRect.width) + this.sourceRect.x = this.sourceRect.width; + else if (this.sourceRect.x > this.sourceRect.width) + this.sourceRect.x = -this.sourceRect.width; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TiledSpriteRenderer.prototype, "scrollY", { + get: function () { + return this.sourceRect.y; + }, + set: function (value) { + this.sourceRect.y = value; + if (this.sourceRect.y < -this.sourceRect.height) + this.sourceRect.y = this.sourceRect.height; + else if (this.sourceRect.y > this.sourceRect.height) + this.sourceRect.y = -this.sourceRect.height; + }, + enumerable: true, + configurable: true + }); + TiledSpriteRenderer.prototype.render = function (camera) { + if (!this.sprite) + return; + _super.prototype.render.call(this, camera); + var renderTexture = new egret.RenderTexture(); + var cacheBitmap = new egret.DisplayObjectContainer(); + cacheBitmap.removeChildren(); + cacheBitmap.addChild(this.leftTexture); + cacheBitmap.addChild(this.rightTexture); + this.leftTexture.x = this.sourceRect.x; + this.rightTexture.x = this.sourceRect.x - this.sourceRect.width; + this.leftTexture.y = this.sourceRect.y; + this.rightTexture.y = this.sourceRect.y; + cacheBitmap.cacheAsBitmap = true; + renderTexture.drawToTexture(cacheBitmap, new egret.Rectangle(0, 0, this.sourceRect.width, this.sourceRect.height)); + this.bitmap.texture = renderTexture; + }; + return TiledSpriteRenderer; +}(SpriteRenderer)); +var ScrollingSpriteRenderer = (function (_super) { + __extends(ScrollingSpriteRenderer, _super); + function ScrollingSpriteRenderer() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.scrollSpeedX = 15; + _this.scroolSpeedY = 0; + _this._scrollX = 0; + _this._scrollY = 0; + return _this; + } + ScrollingSpriteRenderer.prototype.update = function () { + this.scrollX += this.scrollSpeedX * Time.deltaTime; + this.scrollY += this.scroolSpeedY * Time.deltaTime; + this.sourceRect.x = this._scrollX; + this.sourceRect.y = this._scrollY; + }; + return ScrollingSpriteRenderer; +}(TiledSpriteRenderer)); +var Sprite = (function () { + function Sprite(texture, sourceRect, origin) { + if (sourceRect === void 0) { sourceRect = new Rectangle(0, 0, texture.textureWidth, texture.textureHeight); } + if (origin === void 0) { origin = sourceRect.getHalfSize(); } + this.uvs = new Rectangle(); + this.texture2D = texture; + this.sourceRect = sourceRect; + this.center = new Vector2(sourceRect.width * 0.5, sourceRect.height * 0.5); + this.origin = origin; + var inverseTexW = 1 / texture.textureWidth; + var inverseTexH = 1 / texture.textureHeight; + this.uvs.x = sourceRect.x * inverseTexW; + this.uvs.y = sourceRect.y * inverseTexH; + this.uvs.width = sourceRect.width * inverseTexW; + this.uvs.height = sourceRect.height * inverseTexH; + } + return Sprite; +}()); +var SpriteAnimation = (function () { + function SpriteAnimation(sprites, frameRate) { + this.sprites = sprites; + this.frameRate = frameRate; + } + return SpriteAnimation; +}()); var SpriteAnimator = (function (_super) { __extends(SpriteAnimator, _super); function SpriteAnimator(sprite) { @@ -1738,46 +1815,6 @@ var State; State[State["paused"] = 2] = "paused"; State[State["completed"] = 3] = "completed"; })(State || (State = {})); -var TiledSpriteRenderer = (function (_super) { - __extends(TiledSpriteRenderer, _super); - function TiledSpriteRenderer(sprite) { - var _this = _super.call(this) || this; - _this.setSprite(sprite); - _this.sourceRect = sprite.sourceRect; - return _this; - } - Object.defineProperty(TiledSpriteRenderer.prototype, "scrollX", { - get: function () { - return this.sourceRect.x; - }, - set: function (value) { - this.sourceRect.x = value; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TiledSpriteRenderer.prototype, "scrollY", { - get: function () { - return this.sourceRect.y; - }, - set: function (value) { - this.sourceRect.y = value; - }, - enumerable: true, - configurable: true - }); - TiledSpriteRenderer.prototype.render = function (camera) { - if (!this.sprite) - return; - _super.prototype.render.call(this, camera); - var renderTexture = new egret.RenderTexture(); - var targetTexture = new egret.Bitmap(this.sprite.texture2D); - var clipBounds = new egret.Rectangle(this.sourceRect.x, this.sourceRect.y, this.sourceRect.width, this.sourceRect.height); - renderTexture.drawToTexture(targetTexture, clipBounds); - this.bitmap.texture = renderTexture; - }; - return TiledSpriteRenderer; -}(SpriteRenderer)); var Mover = (function (_super) { __extends(Mover, _super); function Mover() { diff --git a/source/src/ECS/Components/ScrollingSpriteRenderer.ts b/source/src/ECS/Components/ScrollingSpriteRenderer.ts new file mode 100644 index 00000000..f2e1ba30 --- /dev/null +++ b/source/src/ECS/Components/ScrollingSpriteRenderer.ts @@ -0,0 +1,37 @@ +/// +class ScrollingSpriteRenderer extends TiledSpriteRenderer { + public scrollSpeedX = 15; + public scroolSpeedY = 0; + private _scrollX = 0; + private _scrollY = 0; + + public update(){ + this._scrollX += this.scrollSpeedX * Time.deltaTime; + this._scrollY += this.scroolSpeedY * Time.deltaTime; + this.sourceRect.x = this._scrollX; + this.sourceRect.y = this._scrollY; + } + + public render(camera: Camera) { + if (!this.sprite) + return; + + super.render(camera); + + let renderTexture = new egret.RenderTexture(); + let cacheBitmap = new egret.DisplayObjectContainer(); + cacheBitmap.removeChildren(); + cacheBitmap.addChild(this.leftTexture); + cacheBitmap.addChild(this.rightTexture); + + this.leftTexture.x = this.sourceRect.x; + this.rightTexture.x = this.sourceRect.x - this.sourceRect.width; + this.leftTexture.y = this.sourceRect.y; + this.rightTexture.y = this.sourceRect.y; + + cacheBitmap.cacheAsBitmap = true; + renderTexture.drawToTexture(cacheBitmap, new egret.Rectangle(0, 0, this.sourceRect.width, this.sourceRect.height)); + + this.bitmap.texture = renderTexture; + } +} \ No newline at end of file diff --git a/source/src/ECS/Components/TiledSpriteRenderer.ts b/source/src/ECS/Components/TiledSpriteRenderer.ts index 79a2e596..e5b097f4 100644 --- a/source/src/ECS/Components/TiledSpriteRenderer.ts +++ b/source/src/ECS/Components/TiledSpriteRenderer.ts @@ -1,36 +1,57 @@ +/// +/** + * 滚动由两张图片组合而成 + */ class TiledSpriteRenderer extends SpriteRenderer { protected sourceRect: Rectangle; + protected leftTexture: egret.Bitmap; + protected rightTexture: egret.Bitmap; - public get scrollX(){ + public get scrollX() { return this.sourceRect.x; } - public set scrollX(value: number){ + public set scrollX(value: number) { this.sourceRect.x = value; } - public get scrollY(){ + public get scrollY() { return this.sourceRect.y; } - public set scrollY(value: number){ + public set scrollY(value: number) { this.sourceRect.y = value; } - constructor(sprite: Sprite){ + constructor(sprite: Sprite) { super(); + this.leftTexture = new egret.Bitmap(); + this.rightTexture = new egret.Bitmap(); + this.leftTexture.texture = sprite.texture2D; + this.rightTexture.texture = sprite.texture2D; + this.setSprite(sprite); this.sourceRect = sprite.sourceRect; } - public render(camera: Camera){ + public render(camera: Camera) { if (!this.sprite) return; super.render(camera); let renderTexture = new egret.RenderTexture(); - let targetTexture = new egret.Bitmap(this.sprite.texture2D); - let clipBounds = new egret.Rectangle(this.sourceRect.x, this.sourceRect.y, this.sourceRect.width, this.sourceRect.height); - renderTexture.drawToTexture(targetTexture, clipBounds); + let cacheBitmap = new egret.DisplayObjectContainer(); + cacheBitmap.removeChildren(); + cacheBitmap.addChild(this.leftTexture); + cacheBitmap.addChild(this.rightTexture); + + this.leftTexture.x = this.sourceRect.x; + this.rightTexture.x = this.sourceRect.x - this.sourceRect.width; + this.leftTexture.y = this.sourceRect.y; + this.rightTexture.y = this.sourceRect.y; + + cacheBitmap.cacheAsBitmap = true; + renderTexture.drawToTexture(cacheBitmap, new egret.Rectangle(0, 0, this.sourceRect.width, this.sourceRect.height)); + this.bitmap.texture = renderTexture; } } \ No newline at end of file