UNPKG

dragonbones-runtime

Version:

the tools to build dragonbones file for diffrent framework

189 lines (178 loc) 8.56 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.sys { let CAPS_STYLES = ["none", "round", "square"]; let JOINT_STYLES = ["bevel", "miter", "round"]; /** * @private * 矢量渲染节点 */ export class GraphicsNode extends RenderNode { public constructor() { super(); this.type = RenderNodeType.GraphicsNode; } /** * 指定一种简单的单一颜色填充,在绘制时该填充将在随后对其他 Graphics 方法(如 lineTo() 或 drawCircle())的调用中使用。 * @param color 填充的颜色 * @param alpha 填充的 Alpha 值 * @param beforePath 插入在指定的路径命令之前绘制,通常是插入到当前正在绘制的线条路径之前,以确保线条总在填充的上方。 */ public beginFill(color:number, alpha:number = 1, beforePath?:Path2D):Path2D { let path = new sys.FillPath(); path.fillColor = color; path.fillAlpha = alpha; if (beforePath) { let index = this.drawData.lastIndexOf(beforePath); this.drawData.splice(index, 0, path); } else { this.drawData.push(path); } return path; } /** * 指定一种简单的单一颜色填充,在绘制时该填充将在随后对其他 Graphics 方法(如 lineTo() 或 drawCircle())的调用中使用。 * 调用 clear() 方法会清除填充。 * @param type 用于指定要使用哪种渐变类型的 GradientType 类的值:GradientType.LINEAR 或 GradientType.RADIAL。 * @param colors 渐变中使用的 RGB 十六进制颜色值的数组(例如,红色为 0xFF0000,蓝色为 0x0000FF,等等)。对于每种颜色,请在 alphas 和 ratios 参数中指定对应值。 * @param alphas colors 数组中对应颜色的 alpha 值数组。 * @param ratios 颜色分布比率的数组。有效值为 0255。 * @param matrix 一个由 egret.Matrix 类定义的转换矩阵。egret.Matrix 类包括 createGradientBox() 方法,通过该方法可以方便地设置矩阵,以便与 beginGradientFill() 方法一起使用 * @param beforePath 插入在指定的路径命令之前绘制,通常是插入到当前正在绘制的线条路径之前,以确保线条总在填充的上方。 */ public beginGradientFill(type:string, colors:number[], alphas:number[], ratios:number[], matrix?:egret.Matrix, beforePath?:Path2D):Path2D { let m = new egret.Matrix(); if (matrix) { m.a = matrix.a * 819.2; m.b = matrix.b * 819.2; m.c = matrix.c * 819.2; m.d = matrix.d * 819.2; m.tx = matrix.tx; m.ty = matrix.ty; } else { //默认值 m.a = 100; m.d = 100; } let path = new sys.GradientFillPath(); path.gradientType = type; path.colors = colors; path.alphas = alphas; path.ratios = ratios; path.matrix = m; if (beforePath) { let index = this.drawData.lastIndexOf(beforePath); this.drawData.splice(index, 0, path); } else { this.drawData.push(path); } return path; } /** * 指定一种线条样式以用于随后对 lineTo() 或 drawCircle() 等 Graphics 方法的调用。 * @param thickness 一个整数,以点为单位表示线条的粗细,有效值为 0255。如果未指定数字,或者未定义该参数,则不绘制线条。如果传递的值小于 0,则默认值为 0。值 0 表示极细的粗细;最大粗细为 255。如果传递的值大于 255,则默认值为 255。 * @param color 线条的十六进制颜色值(例如,红色为 0xFF0000,蓝色为 0x0000FF 等)。如果未指明值,则默认值为 0x000000(黑色)。可选。 * @param alpha 表示线条颜色的 Alpha 值的数字;有效值为 01。如果未指明值,则默认值为 1(纯色)。如果值小于 0,则默认值为 0。如果值大于 1,则默认值为 1。 * @param caps 用于指定线条末端处端点类型的 CapsStyle 类的值。默认值:CapsStyle.ROUND * @param joints 指定用于拐角的连接外观的类型。默认值:JointStyle.ROUND * @param miterLimit 用于表示剪切斜接的极限值的数字。 */ public lineStyle(thickness?:number, color?:number, alpha:number = 1, caps?:string, joints?:string, miterLimit:number = 3):StrokePath { if (CAPS_STYLES.indexOf(caps) == -1) { caps = "round"; } if (JOINT_STYLES.indexOf(joints) == -1) { joints = "round"; } let path = new StrokePath(); path.lineWidth = thickness; path.lineColor = color; path.lineAlpha = alpha; path.caps = caps || CapsStyle.ROUND; path.joints = joints; path.miterLimit = miterLimit; this.drawData.push(path); return path; } /** * 清空所有缓存的绘制数据 */ public clear():void { this.drawData.length = 0; this.dirtyRender = true; } /** * 覆盖父类方法,不自动清空缓存的绘图数据,改为手动调用clear()方法清空。 */ public cleanBeforeRender():void { } //forWebGL /** * 绘制x偏移 */ public x:number; /** * 绘制y偏移 */ public y:number; /** * 绘制宽度 */ public width:number; /** * 绘制高度 */ public height:number; /** * 脏渲染标记 * 暂时调用lineStyle,beginFill,beginGradientFill标记,实际应该draw时候标记在Path2D */ public dirtyRender:boolean = true; public $texture:WebGLTexture; public $textureWidth:number; public $textureHeight:number; public $canvasScaleX:number; public $canvasScaleY:number; /** * 清除非绘制的缓存数据 */ public clean():void { if(this.$texture) { WebGLUtils.deleteWebGLTexture(this.$texture); this.$texture = null; this.dirtyRender = true; } } } }