UNPKG

dragonbones-runtime

Version:

the tools to build dragonbones file for diffrent framework

187 lines (177 loc) 8.83 kB
////////////////////////////////////////////////////////////////////////////////////// // // Copyright (c) 2014-present, Egret Technology. // All rights reserved. // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the Egret nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY EGRET AND CONTRIBUTORS "AS IS" AND ANY EXPRESS // OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES // OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. // IN NO EVENT SHALL EGRET AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;LOSS OF USE, DATA, // OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, // EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // ////////////////////////////////////////////////////////////////////////////////////// namespace egret { /** * SpriteSheet is a mosaic of multiple sub-bitmaps, comprising a plurality of Texture objects. * Each Texture object shares the set bitmap of SpriteSheet, but it points to its different areas. * On WebGL / OpenGL, this operation can significantly improve performance. * At the same time, SpriteSheet can carry out material integration easily to reduce the number of HTTP requests * For specification of the SpriteSheet format, see the document https://github.com/egret-labs/egret-core/wiki/Egret-SpriteSheet-Specification * @see http://edn.egret.com/cn/docs/page/135 The use of texture packs * @version Egret 2.4 * @platform Web,Native * @includeExample egret/display/SpriteSheet.ts * @language en_US */ /** * SpriteSheet 是一张由多个子位图拼接而成的集合位图,它包含多个 Texture 对象。 * 每一个 Texture 都共享 SpriteSheet 的集合位图,但是指向它的不同的区域。 * 在WebGL / OpenGL上,这种做法可以显著提升性能 * 同时,SpriteSheet可以很方便的进行素材整合,降低HTTP请求数量 * SpriteSheet 格式的具体规范可以参见此文档 https://github.com/egret-labs/egret-core/wiki/Egret-SpriteSheet-Specification * @see http://edn.egret.com/cn/docs/page/135 纹理集的使用 * @version Egret 2.4 * @platform Web,Native * @includeExample egret/display/SpriteSheet.ts * @language zh_CN */ export class SpriteSheet extends HashObject { /** * Create an egret.SpriteSheet object * @param texture {Texture} Texture * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 创建一个 egret.SpriteSheet 对象 * @param texture {Texture} 纹理 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public constructor(texture:Texture) { super(); this.$texture = texture; this._bitmapX = texture.$bitmapX - texture.$offsetX; this._bitmapY = texture.$bitmapY - texture.$offsetY; } /** * @private * 表示这个SpriteSheet的位图区域在bitmapData上的起始位置x。 */ private _bitmapX:number = 0; /** * @private * 表示这个SpriteSheet的位图区域在bitmapData上的起始位置y。 */ private _bitmapY:number = 0; /** * @private * 共享的位图数据 */ $texture:Texture; /** * @private * 纹理缓存字典 */ public _textureMap = egret.createMap<Texture>(); /** * Obtain a cached Texture object according to the specified texture name * @param name {string} Cache the name of this Texture object * @returns {egret.Texture} The Texture object * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 根据指定纹理名称获取一个缓存的 Texture 对象 * @param name {string} 缓存这个 Texture 对象所使用的名称 * @returns {egret.Texture} Texture 对象 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public getTexture(name:string):Texture { return this._textureMap[name]; } /** * Create a new Texture object for the specified area on SpriteSheet and cache it * @param name {string} Cache the name of this Texture object. If the name already exists, the previous Texture object will be overwrited. * @param bitmapX {number} Starting coordinate x of texture area on bitmapData * @param bitmapY {number} Starting coordinate y of texture area on bitmapData * @param bitmapWidth {number} Width of texture area on bitmapData * @param bitmapHeight {number} Height of texture area on bitmapData * @param offsetX {number} Starting point x for a non-transparent area of the original bitmap * @param offsetY {number} Starting point y for a non-transparent area of the original bitmap * @param textureWidth {number} Width of the original bitmap. If it is not passed, use the bitmapWidth value. * @param textureHeight {number} Height of the original bitmap. If it is not passed, use the bitmapHeight value. * @returns {egret.Texture} The created Texture object * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 为 SpriteSheet 上的指定区域创建一个新的 Texture 对象并缓存它 * @param name {string} 缓存这个 Texture 对象所使用的名称,如果名称已存在,将会覆盖之前的 Texture 对象 * @param bitmapX {number} 纹理区域在 bitmapData 上的起始坐标x * @param bitmapY {number} 纹理区域在 bitmapData 上的起始坐标y * @param bitmapWidth {number} 纹理区域在 bitmapData 上的宽度 * @param bitmapHeight {number} 纹理区域在 bitmapData 上的高度 * @param offsetX {number} 原始位图的非透明区域 x 起始点 * @param offsetY {number} 原始位图的非透明区域 y 起始点 * @param textureWidth {number} 原始位图的高度,若不传入,则使用 bitmapWidth 的值。 * @param textureHeight {number} 原始位图的宽度,若不传入,则使用 bitmapHeight 的值。 * @returns {egret.Texture} 创建的 Texture 对象 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public createTexture(name:string, bitmapX:number, bitmapY:number, bitmapWidth:number, bitmapHeight:number, offsetX:number = 0, offsetY:number = 0, textureWidth?:number, textureHeight?:number):Texture { if (textureWidth === void 0) { textureWidth = offsetX + bitmapWidth; } if (textureHeight === void 0) { textureHeight = offsetY + bitmapHeight; } let texture:Texture = new egret.Texture(); texture.$bitmapData = this.$texture.$bitmapData; texture.$initData(this._bitmapX + bitmapX, this._bitmapY + bitmapY, bitmapWidth, bitmapHeight, offsetX, offsetY, textureWidth, textureHeight, this.$texture.$sourceWidth, this.$texture.$sourceHeight); this._textureMap[name] = texture; return texture; } /** * dispose texture * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 释放纹理 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public dispose():void { if (this.$texture) { this.$texture.dispose(); } } } }