UNPKG

dragonbones-runtime

Version:

the tools to build dragonbones file for diffrent framework

401 lines (375 loc) 17.5 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. // ////////////////////////////////////////////////////////////////////////////////////// /// <reference path="../geom/Point.ts" /> namespace egret { export interface DisplayObject { addEventListener<Z>(type: "touchMove" | "touchBegin" | "touchEnd" | "touchCancel" | "touchTap" | "touchReleaseOutside" | "touchRollOut"| "touchRollOver" , listener: (this: Z, e: TouchEvent) => void, thisObject: Z, useCapture?: boolean, priority?: number); addEventListener(type: string, listener: Function, thisObject: any, useCapture?: boolean, priority?: number); } let localPoint: Point = new Point(); /** * The TouchEvent class lets you handle events on devices that detect user contact with the device (such as a finger * on a touch screen).When a user interacts with a device such as a mobile phone or tablet with a touch screen, the * user typically touches the screen with his or her fingers or a pointing device. You can develop applications that * respond to basic touch events (such as a single finger tap) with the TouchEvent class. Create event listeners using * the event types defined in this class. * Note: When objects are nested on the display list, touch events target the deepest possible nested object that is * visible in the display list. This object is called the target node. To have a target node's ancestor (an object * containing the target node in the display list) receive notification of a touch event, use EventDispatcher.addEventListener() * on the ancestor node with the type parameter set to the specific touch event you want to detect. * * @version Egret 2.4 * @platform Web,Native * @includeExample egret/events/TouchEvent.ts * @language en_US */ /** * 使用 TouchEvent 类,您可以处理设备上那些检测用户与设备之间的接触的事件。 * 当用户与带有触摸屏的移动电话或平板电脑等设备交互时,用户通常使用手指或指针设备接触屏幕。可使用 TouchEvent * 类开发响应基本触摸事件(如单个手指点击)的应用程序。使用此类中定义的事件类型创建事件侦听器。 * 注意:当对象嵌套在显示列表中时,触摸事件的目标将是显示列表中可见的最深的可能嵌套对象。 * 此对象称为目标节点。要使目标节点的祖代(祖代是一个包含显示列表中所有目标节点的对象,从舞台到目标节点的父节点均包括在内) * 接收触摸事件的通知,请对祖代节点使用 EventDispatcher.on() 并将 type 参数设置为要检测的特定触摸事件。 * * @version Egret 2.4 * @platform Web,Native * @includeExample egret/events/TouchEvent.ts * @language zh_CN */ export class TouchEvent extends Event { /** * Dispatched when the user touches the device, and is continuously dispatched until the point of contact is removed. * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 当用户触碰设备时进行调度,而且会连续调度,直到接触点被删除。 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public static TOUCH_MOVE: "touchMove" = "touchMove"; /** * Dispatched when the user first contacts a touch-enabled device (such as touches a finger to a mobile phone or tablet with a touch screen). * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 当用户第一次触摸启用触摸的设备时(例如,用手指触摸配有触摸屏的移动电话或平板电脑)调度。 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public static TOUCH_BEGIN: "touchBegin" = "touchBegin"; /** * Dispatched when the user removes contact with a touch-enabled device (such as lifts a finger off a mobile phone * or tablet with a touch screen). * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 当用户移除与启用触摸的设备的接触时(例如,将手指从配有触摸屏的移动电话或平板电脑上抬起)调度。 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public static TOUCH_END: "touchEnd" = "touchEnd"; /** * Dispatched when an event of some kind occurred that canceled the touch. * Such as the eui.Scroller will dispatch 'TOUCH_CANCEL' when it start move, the 'TOUCH_END' and 'TOUCH_TAP' will not be triggered. * @version Egret 3.0.1 * @platform Web,Native * @language en_US */ /** * 由于某个事件取消了触摸时触发。比如 eui.Scroller 在开始滚动后会触发 'TOUCH_CANCEL' 事件,不再触发后续的 'TOUCH_END' 和 'TOUCH_TAP' 事件 * @version Egret 3.0.1 * @platform Web,Native * @language zh_CN */ public static TOUCH_CANCEL: "touchCancel" = "touchCancel"; /** * Dispatched when the user lifts the point of contact over the same DisplayObject instance on which the contact * was initiated on a touch-enabled device. * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 当用户在触摸设备上与开始触摸的同一 DisplayObject 实例上抬起接触点时调度。 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public static TOUCH_TAP: "touchTap" = "touchTap"; /** * Dispatched when the user lifts the point of contact over the different DisplayObject instance on which the contact * was initiated on a touch-enabled device (such as presses and releases a finger from a single point over a display * object on a mobile phone or tablet with a touch screen). * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 当用户在触摸设备上与开始触摸的不同 DisplayObject 实例上抬起接触点时调度。 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public static TOUCH_RELEASE_OUTSIDE: "touchReleaseOutside" = "touchReleaseOutside"; /** * Creates an Event object that contains information about touch events. * @param type The type of the event, accessible as Event.type. * @param bubbles Determines whether the Event object participates in the bubbling stage of the event flow. The default value is false. * @param cancelable Determines whether the Event object can be canceled. The default values is false. * @param stageX The horizontal coordinate at which the event occurred in global Stage coordinates. * @param stageY The vertical coordinate at which the event occurred in global Stage coordinates. * @param touchPointID A unique identification number assigned to the touch point. * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 创建一个 TouchEvent 对象,其中包含有关Touch事件的信息 * @param type 事件的类型,可以作为 Event.type 访问。 * @param bubbles 确定 Event 对象是否参与事件流的冒泡阶段。默认值为 false。 * @param cancelable 确定是否可以取消 Event 对象。默认值为 false。 * @param stageX 事件发生点在全局舞台坐标系中的水平坐标 * @param stageY 事件发生点在全局舞台坐标系中的垂直坐标 * @param touchPointID 分配给触摸点的唯一标识号 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public constructor(type: string, bubbles?: boolean, cancelable?: boolean, stageX?: number, stageY?: number, touchPointID?: number) { super(type, bubbles, cancelable); this.$initTo(stageX, stageY, touchPointID); } /** * @private */ $initTo(stageX: number, stageY: number, touchPointID: number): void { this.touchPointID = +touchPointID || 0; this.$stageX = +stageX || 0; this.$stageY = +stageY || 0; } /** * @private */ $stageX: number; /** * The horizontal coordinate at which the event occurred in global Stage coordinates. * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 事件发生点在全局舞台坐标中的水平坐标。 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public get stageX(): number { return this.$stageX; } /** * @private */ $stageY: number; /** * The vertical coordinate at which the event occurred in global Stage coordinates. * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 事件发生点在全局舞台坐标中的垂直坐标。 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public get stageY(): number { return this.$stageY; } private _localX: number; /** * The horizontal coordinate at which the event occurred relative to the display object. * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 事件发生点相对于所属显示对象的水平坐标。 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public get localX(): number { if (this.targetChanged) { this.getLocalXY(); } return this._localX; } private _localY: number; /** * The vertical coordinate at which the event occurred relative to the display object. * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 事件发生点相对于所属显示对象的垂直坐标。 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public get localY(): number { if (this.targetChanged) { this.getLocalXY(); } return this._localY; } private targetChanged: boolean = true; /** * @private */ private getLocalXY(): void { this.targetChanged = false; let m = (<DisplayObject>this.$target).$getInvertedConcatenatedMatrix(); m.transformPoint(this.$stageX, this.$stageY, localPoint); this._localX = localPoint.x; this._localY = localPoint.y; } $setTarget(target: any): boolean { this.$target = target; this.targetChanged = !!target; return true; } /** * A unique identification number assigned to the touch point. * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 分配给触摸点的唯一标识号 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public touchPointID: number; /** * Instructs Egret runtime to render after processing of this event completes, if the display list has been modified. * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 如果已修改显示列表,调用此方法将会忽略帧频限制,在此事件处理完成后立即重绘屏幕。 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public updateAfterEvent(): void { sys.$requestRenderingFlag = true; } /** * Whether the touch is pressed (true) or not pressed (false). * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 表示触摸已按下 (true) 还是未按下 (false)。 * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public touchDown: boolean = false; /** * uses a specified target to dispatchEvent an event. Using this method can reduce the number of * reallocate event objects, which allows you to get better code execution performance. * @param target the event target * @param type The type of the event, accessible as Event.type. * @param bubbles Determines whether the Event object participates in the bubbling stage of the event flow. The default value is false. * @param cancelable Determines whether the Event object can be canceled. The default values is false. * @param stageX The horizontal coordinate at which the event occurred in global Stage coordinates. * @param stageY The vertical coordinate at which the event occurred in global Stage coordinates. * @param touchPointID A unique identification number (as an int) assigned to the touch point. * * @see egret.Event.create() * @see egret.Event.release() * * @version Egret 2.4 * @platform Web,Native * @language en_US */ /** * 使用指定的EventDispatcher对象来抛出Event事件对象。抛出的对象将会缓存在对象池上,供下次循环复用。 * @param target 派发事件目标 * @param type 事件的类型,可以作为 Event.type 访问。 * @param bubbles 确定 Event 对象是否参与事件流的冒泡阶段。默认值为 false。 * @param cancelable 确定是否可以取消 Event 对象。默认值为 false。 * @param stageX 事件发生点在全局舞台坐标系中的水平坐标 * @param stageY 事件发生点在全局舞台坐标系中的垂直坐标 * @param touchPointID 分配给触摸点的唯一标识号 * * @see egret.Event.create() * @see egret.Event.release() * * @version Egret 2.4 * @platform Web,Native * @language zh_CN */ public static dispatchTouchEvent(target: IEventDispatcher, type: string, bubbles?: boolean, cancelable?: boolean, stageX?: number, stageY?: number, touchPointID?: number, touchDown: boolean = false): boolean { if (!bubbles && !target.hasEventListener(type)) { return true; } let event: TouchEvent = Event.create(TouchEvent, type, bubbles, cancelable); event.$initTo(stageX, stageY, touchPointID); event.touchDown = touchDown; let result = target.dispatchEvent(event); Event.release(event); return result; } } }