UNPKG

dragonbones-runtime

Version:

the tools to build dragonbones file for diffrent framework

418 lines (396 loc) 16 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 { let pointPool:Point[] = []; let DEG_TO_RAD:number = Math.PI / 180; /** * The Point object represents a location in a two-dimensional coordinate system, where x represents the horizontal * axis and y represents the vertical axis. * @version Egret 2.4 * @platform Web,Native * @includeExample egret/geom/Point.ts * @language en_US */ /** * Point 对象表示二维坐标系统中的某个位置,其中 x 表示水平轴,y 表示垂直轴。 * @version Egret 2.4 * @platform Web,Native * @includeExample egret/geom/Point.ts * @language zh_CN */ export class Point extends HashObject { /** * Releases a point instance to the object pool * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 释放一个Point实例到对象池 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public static release(point:Point):void { if(!point){ return; } pointPool.push(point); } /** * get a point instance from the object pool or create a new one. * @param x The horizontal coordinate. * @param y The vertical coordinate. * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 从对象池中取出或创建一个新的Point对象。 * @param x 该对象的x属性值,默认为0 * @param y 该对象的y属性值,默认为0 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public static create(x:number,y:number):Point { let point = pointPool.pop(); if (!point) { point = new Point(); } return point.setTo(x,y); } /** * Creates a new point. If you pass no parameters to this method, a point is created at (0,0). * @param x The horizontal coordinate. * @param y The vertical coordinate. * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 创建一个 egret.Point 对象.若不传入任何参数,将会创建一个位于(0,0)位置的点。 * @param x 该对象的x属性值,默认为0 * @param y 该对象的y属性值,默认为0 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public constructor(x:number = 0, y:number = 0) { super(); this.x = x; this.y = y; } /** * The horizontal coordinate. * @default 0 * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 该点的水平坐标。 * @default 0 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public x:number; /** * The vertical coordinate. * @default 0 * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 该点的垂直坐标。 * @default 0 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public y:number; /** * The length of the line segment from (0,0) to this point. * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 从 (0,0) 到此点的线段长度。 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public get length():number{ return Math.sqrt(this.x*this.x+this.y*this.y); } /** * Sets the members of Point to the specified values * @param x The horizontal coordinate. * @param y The vertical coordinate. * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 将 Point 的成员设置为指定值 * @param x 该对象的x属性值 * @param y 该对象的y属性值 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public setTo(x:number, y:number):Point { this.x = x; this.y = y; return this; } /** * Creates a copy of this Point object. * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 克隆点对象 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public clone():Point { return new Point(this.x, this.y); } /** * Determines whether two points are equal. Two points are equal if they have the same x and y values. * @param toCompare The point to be compared. * @returns A value of true if the object is equal to this Point object; false if it is not equal. * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 确定两个点是否相同。如果两个点具有相同的 x 和 y 值,则它们是相同的点。 * @param toCompare 要比较的点。 * @returns 如果该对象与此 Point 对象相同,则为 true 值,如果不相同,则为 false。 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public equals(toCompare:Point):boolean { return this.x == toCompare.x && this.y == toCompare.y; } /** * Returns the distance between pt1 and pt2. * @param p1 The first point. * @param p2 The second point. * @returns The distance between the first and second points. * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 返回 pt1 和 pt2 之间的距离。 * @param p1 第一个点 * @param p2 第二个点 * @returns 第一个点和第二个点之间的距离。 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public static distance(p1:Point, p2:Point):number { return Math.sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y)); } /** * Copies all of the point data from the source Point object into the calling Point object. * @param sourcePoint The Point object from which to copy the data. * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 将源 Point 对象中的所有点数据复制到调用方 Point 对象中。 * @param sourcePoint 要从中复制数据的 Point 对象。 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public copyFrom(sourcePoint:Point):void { this.x = sourcePoint.x; this.y = sourcePoint.y; } /** * Adds the coordinates of another point to the coordinates of this point to create a new point. * @param v The point to be added. * @returns The new point. * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 将另一个点的坐标添加到此点的坐标以创建一个新点。 * @param v 要添加的点。 * @returns 新点。 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public add(v:Point):Point { return new Point(this.x + v.x, this.y + v.y); } /** * Determines a point between two specified points. * The parameter f determines where the new interpolated point is located relative to the two end points specified by parameters pt1 and pt2. The closer the value of the parameter f is to 1.0, the closer the interpolated point is to the first point (parameter pt1). The closer the value of the parameter f is to 0, the closer the interpolated point is to the second point (parameter pt2). * @param pt1 The first point. * @param pt2 The second point. * @param f The level of interpolation between the two points. Indicates where the new point will be, along the line between pt1 and pt2. If f=1, pt1 is returned; if f=0, pt2 is returned. * @returns The new interpolated point. * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 确定两个指定点之间的点。 * 参数 f 确定新的内插点相对于参数 pt1 和 pt2 指定的两个端点所处的位置。参数 f 的值越接近 1.0,则内插点就越接近第一个点(参数 pt1)。参数 f 的值越接近 0,则内插点就越接近第二个点(参数 pt2)。 * @param pt1 第一个点。 * @param pt2 第二个点。 * @param f 两个点之间的内插级别。表示新点将位于 pt1 和 pt2 连成的直线上的什么位置。如果 f=1,则返回 pt1;如果 f=0,则返回 pt2。 * @returns 新的内插点。 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public static interpolate(pt1:Point, pt2:Point, f:number):Point { let f1:number = 1 - f; return new Point(pt1.x * f + pt2.x * f1, pt1.y * f + pt2.y * f1); } /** * Scales the line segment between (0,0) and the current point to a set length. * @param thickness The scaling value. For example, if the current point is (0,5), and you normalize it to 1, the point returned is at (0,1). * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 将 (0,0) 和当前点之间的线段缩放为设定的长度。 * @param thickness 缩放值。例如,如果当前点为 (0,5) 并且您将它规范化为 1,则返回的点位于 (0,1) 处。 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public normalize(thickness:number):void { if (this.x != 0 || this.y != 0) { let relativeThickness:number = thickness / this.length; this.x *= relativeThickness; this.y *= relativeThickness; } } /** * Offsets the Point object by the specified amount. The value of dx is added to the original value of x to create the new x value. The value of dy is added to the original value of y to create the new y value. * @param dx The amount by which to offset the horizontal coordinate, x. * @param dy The amount by which to offset the vertical coordinate, y. * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 按指定量偏移 Point 对象。dx 的值将添加到 x 的原始值中以创建新的 x 值。dy 的值将添加到 y 的原始值中以创建新的 y 值。 * @param dx 水平坐标 x 的偏移量。 * @param dy 水平坐标 y 的偏移量。 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public offset(dx:number, dy:number):void { this.x += dx; this.y += dy; } /** * Converts a pair of polar coordinates to a Cartesian point coordinate. * @param len The length coordinate of the polar pair. * @param angle The angle, in radians, of the polar pair. * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 将一对极坐标转换为笛卡尔点坐标。 * @param len 极坐标对的长度。 * @param angle 极坐标对的角度(以弧度表示)。 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public static polar(len:number, angle:number):Point { return new Point(len * NumberUtils.cos(angle / DEG_TO_RAD), len * NumberUtils.sin(angle / DEG_TO_RAD)); } /** * Subtracts the coordinates of another point from the coordinates of this point to create a new point. * @param v The point to be subtracted. * @returns The new point. * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 从此点的坐标中减去另一个点的坐标以创建一个新点。 * @param v 要减去的点。 * @returns 新点。 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public subtract(v:Point):Point { return new Point(this.x - v.x, this.y - v.y); } /** * Returns a string that contains the values of the x and y coordinates. The string has the form "(x=x, y=y)", so calling the toString() method for a point at 23,17 would return "(x=23, y=17)". * @returns The string representation of the coordinates. * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 返回包含 x 和 y 坐标的值的字符串。该字符串的格式为 "(x=x, y=y)",因此为点 23,17 调用 toString() 方法将返回 "(x=23, y=17)"。 * @returns 坐标的字符串表示形式。 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public toString():string { return "(x=" + this.x + ", y=" + this.y + ")"; } } /** * @private * 仅供框架内复用,要防止暴露引用到外部。 */ export let $TempPoint = new Point(); }