import { EventDispatcher } from "../events/EventDispatcher";
import { Matrix } from "../maths/Matrix";
import { Point } from "../maths/Point";
import { Rectangle } from "../maths/Rectangle";
import { Context } from "../resource/Context";
import { HTMLCanvas } from "../resource/HTMLCanvas";
import { Texture } from "../resource/Texture";
import { Texture2D } from "../resource/Texture2D";
import { Handler } from "../utils/Handler";
import { BoundsStyle } from "./css/BoundsStyle";
import { CacheStyle } from "./css/CacheStyle";
import { SpriteStyle } from "./css/SpriteStyle";
import { Graphics } from "./Graphics";
import { Node } from "./Node";
import { Stage } from "./Stage";
import { RenderTexture2D } from "../resource/RenderTexture2D";
/**在显示对象上按下后调度。
 * @eventType Event.MOUSE_DOWN
 * */
/**在显示对象抬起后调度。
 * @eventType Event.MOUSE_UP
 * */
/**鼠标在对象身上进行移动后调度
 * @eventType Event.MOUSE_MOVE
 * */
/**鼠标经过对象后调度。
 * @eventType Event.MOUSE_OVER
 * */
/**鼠标离开对象后调度。
 * @eventType Event.MOUSE_OUT
 * */
/**鼠标点击对象后调度。
 * @eventType Event.CLICK
 * */
/**开始拖动后调度。
 * @eventType Event.DRAG_START
 * */
/**拖动中调度。
 * @eventType Event.DRAG_MOVE
 * */
/**拖动结束后调度。
 * @eventType Event.DRAG_END
 * */
/**
 * <p> <code>Sprite</code> 是基本的显示图形的显示列表节点。 <code>Sprite</code> 默认没有宽高，默认不接受鼠标事件。通过 <code>graphics</code> 可以绘制图片或者矢量图，支持旋转，缩放，位移等操作。<code>Sprite</code>同时也是容器类，可用来添加多个子节点。</p>
 * <p>注意： <code>Sprite</code> 默认没有宽高，可以通过<code>getBounds</code>函数获取；也可手动设置宽高；还可以设置<code>autoSize=true</code>，然后再获取宽高。<code>Sprite</code>的宽高一般用于进行碰撞检测和排版，并不影响显示图像大小，如果需要更改显示图像大小，请使用 <code>scaleX</code> ， <code>scaleY</code> ， <code>scale</code>。</p>
 * <p> <code>Sprite</code> 默认不接受鼠标事件，即<code>mouseEnabled=false</code>，但是只要对其监听任意鼠标事件，会自动打开自己以及所有父对象的<code>mouseEnabled=true</code>。所以一般也无需手动设置<code>mouseEnabled</code>。</p>
 * <p>LayaAir引擎API设计精简巧妙。核心显示类只有一个<code>Sprite</code>。<code>Sprite</code>针对不同的情况做了渲染优化，所以保证一个类实现丰富功能的同时，又达到高性能。</p>
 *
 * @example <caption>创建了一个 <code>Sprite</code> 实例。</caption>
 * package
 * {
 * 	import laya.display.Sprite;
 * 	import laya.events.Event;
 *
 * 	public class Sprite_Example
 * 	{
 * 		private var sprite:Sprite;
 * 		private var shape:Sprite
 * 		public function Sprite_Example()
 * 		{
 * 			Laya.init(640, 800);//设置游戏画布宽高、渲染模式。
 * 			Laya.stage.bgColor = "#efefef";//设置画布的背景颜色。
 * 			onInit();
 * 		}
 * 		private function onInit():void
 * 		{
 * 			sprite = new Sprite();//创建一个 Sprite 类的实例对象 sprite 。
 * 			sprite.loadImage("resource/ui/bg.png");//加载并显示图片。
 * 			sprite.x = 200;//设置 sprite 对象相对于父容器的水平方向坐标值。
 * 			sprite.y = 200;//设置 sprite 对象相对于父容器的垂直方向坐标值。
 * 			sprite.pivotX = 0;//设置 sprite 对象的水平方法轴心点坐标。
 * 			sprite.pivotY = 0;//设置 sprite 对象的垂直方法轴心点坐标。
 * 			Laya.stage.addChild(sprite);//将此 sprite 对象添加到显示列表。
 * 			sprite.on(Event.CLICK, this, onClickSprite);//给 sprite 对象添加点击事件侦听。
    
 * 			shape = new Sprite();//创建一个 Sprite 类的实例对象 sprite 。
 * 			shape.graphics.drawRect(0, 0, 100, 100, "#ccff00", "#ff0000", 2);//绘制一个有边框的填充矩形。
 * 			shape.x = 400;//设置 shape 对象相对于父容器的水平方向坐标值。
 * 			shape.y = 200;//设置 shape 对象相对于父容器的垂直方向坐标值。
 * 			shape.width = 100;//设置 shape 对象的宽度。
 * 			shape.height = 100;//设置 shape 对象的高度。
 * 			shape.pivotX = 50;//设置 shape 对象的水平方法轴心点坐标。
 * 			shape.pivotY = 50;//设置 shape 对象的垂直方法轴心点坐标。
 * 			Laya.stage.addChild(shape);//将此 shape 对象添加到显示列表。
 * 			shape.on(Event.CLICK, this, onClickShape);//给 shape 对象添加点击事件侦听。
 * 		}
 * 		private function onClickSprite():void
 * 		{
 * 			trace("点击 sprite 对象。");
 * 			sprite.rotation += 5;//旋转 sprite 对象。
 * 		}
 * 		private function onClickShape():void
 * 		{
 * 			trace("点击 shape 对象。");
 * 			shape.rotation += 5;//旋转 shape 对象。
 * 		}
 * 	}
 * }
 *
 * @example
 * var sprite;
 * var shape;
 * Sprite_Example();
 * function Sprite_Example()
 * {
 *     Laya.init(640, 800);//设置游戏画布宽高、渲染模式。
 *     Laya.stage.bgColor = "#efefef";//设置画布的背景颜色。
 *     onInit();
 * }
 * function onInit()
 * {
 *     sprite = new laya.display.Sprite();//创建一个 Sprite 类的实例对象 sprite 。
 *     sprite.loadImage("resource/ui/bg.png");//加载并显示图片。
 *     sprite.x = 200;//设置 sprite 对象相对于父容器的水平方向坐标值。
 *     sprite.y = 200;//设置 sprite 对象相对于父容器的垂直方向坐标值。
 *     sprite.pivotX = 0;//设置 sprite 对象的水平方法轴心点坐标。
 *     sprite.pivotY = 0;//设置 sprite 对象的垂直方法轴心点坐标。
 *     Laya.stage.addChild(sprite);//将此 sprite 对象添加到显示列表。
 *     sprite.on(Event.CLICK, this, onClickSprite);//给 sprite 对象添加点击事件侦听。
    
 *     shape = new laya.display.Sprite();//创建一个 Sprite 类的实例对象 sprite 。
 *     shape.graphics.drawRect(0, 0, 100, 100, "#ccff00", "#ff0000", 2);//绘制一个有边框的填充矩形。
 *     shape.x = 400;//设置 shape 对象相对于父容器的水平方向坐标值。
 *     shape.y = 200;//设置 shape 对象相对于父容器的垂直方向坐标值。
 *     shape.width = 100;//设置 shape 对象的宽度。
 *     shape.height = 100;//设置 shape 对象的高度。
 *     shape.pivotX = 50;//设置 shape 对象的水平方法轴心点坐标。
 *     shape.pivotY = 50;//设置 shape 对象的垂直方法轴心点坐标。
 *     Laya.stage.addChild(shape);//将此 shape 对象添加到显示列表。
 *     shape.on(laya.events.Event.CLICK, this, onClickShape);//给 shape 对象添加点击事件侦听。
 * }
 * function onClickSprite()
 * {
 *     console.log("点击 sprite 对象。");
 *     sprite.rotation += 5;//旋转 sprite 对象。
 * }
 * function onClickShape()
 * {
 *     console.log("点击 shape 对象。");
 *     shape.rotation += 5;//旋转 shape 对象。
 * }
 *
 * @example
 * import Sprite = laya.display.Sprite;
 * class Sprite_Example {
 *     private sprite: Sprite;
 *     private shape: Sprite
 *     public Sprite_Example() {
 *         Laya.init(640, 800);//设置游戏画布宽高、渲染模式。
 *         Laya.stage.bgColor = "#efefef";//设置画布的背景颜色。
 *         this.onInit();
 *     }
 *     private onInit(): void {
 *         this.sprite = new Sprite();//创建一个 Sprite 类的实例对象 sprite 。
 *         this.sprite.loadImage("resource/ui/bg.png");//加载并显示图片。
 *         this.sprite.x = 200;//设置 sprite 对象相对于父容器的水平方向坐标值。
 *         this.sprite.y = 200;//设置 sprite 对象相对于父容器的垂直方向坐标值。
 *         this.sprite.pivotX = 0;//设置 sprite 对象的水平方法轴心点坐标。
 *         this.sprite.pivotY = 0;//设置 sprite 对象的垂直方法轴心点坐标。
 *         Laya.stage.addChild(this.sprite);//将此 sprite 对象添加到显示列表。
 *         this.sprite.on(laya.events.Event.CLICK, this, this.onClickSprite);//给 sprite 对象添加点击事件侦听。
    
 *         this.shape = new Sprite();//创建一个 Sprite 类的实例对象 sprite 。
 *         this.shape.graphics.drawRect(0, 0, 100, 100, "#ccff00", "#ff0000", 2);//绘制一个有边框的填充矩形。
 *         this.shape.x = 400;//设置 shape 对象相对于父容器的水平方向坐标值。
 *         this.shape.y = 200;//设置 shape 对象相对于父容器的垂直方向坐标值。
 *         this.shape.width = 100;//设置 shape 对象的宽度。
 *         this.shape.height = 100;//设置 shape 对象的高度。
 *         this.shape.pivotX = 50;//设置 shape 对象的水平方法轴心点坐标。
 *         this.shape.pivotY = 50;//设置 shape 对象的垂直方法轴心点坐标。
 *         Laya.stage.addChild(this.shape);//将此 shape 对象添加到显示列表。
 *         this.shape.on(laya.events.Event.CLICK, this, this.onClickShape);//给 shape 对象添加点击事件侦听。
 *     }
 *     private onClickSprite(): void {
 *         console.log("点击 sprite 对象。");
 *         this.sprite.rotation += 5;//旋转 sprite 对象。
 *     }
 *     private onClickShape(): void {
 *         console.log("点击 shape 对象。");
 *         this.shape.rotation += 5;//旋转 shape 对象。
 *     }
 * }
 */
export declare class Sprite extends Node {
    /**
     * <p>鼠标事件与此对象的碰撞检测是否可穿透。碰撞检测发生在鼠标事件的捕获阶段，此阶段引擎会从stage开始递归检测stage及其子对象，直到找到命中的目标对象或者未命中任何对象。</p>
     * <p>穿透表示鼠标事件发生的位置处于本对象绘图区域内时，才算命中，而与对象宽高和值为Rectangle对象的hitArea属性无关。如果sprite.hitArea值是HitArea对象，表示显式声明了此对象的鼠标事件响应区域，而忽略对象的宽高、mouseThrough属性。</p>
     * <p>影响对象鼠标事件响应区域的属性为：width、height、hitArea，优先级顺序为：hitArea(type:HitArea)>hitArea(type:Rectangle)>width/height。</p>
     * @default false	不可穿透，此对象的鼠标响应区域由width、height、hitArea属性决定。</p>
     */
    mouseThrough: boolean;
    /**
     * <p>指定是否自动计算宽高数据。默认值为 false 。</p>
     * <p>Sprite宽高默认为0，并且不会随着绘制内容的变化而变化，如果想根据绘制内容获取宽高，可以设置本属性为true，或者通过getBounds方法获取。设置为true，对性能有一定影响。</p>
     */
    autoSize: boolean;
    /**
     * <p>指定鼠标事件检测是优先检测自身，还是优先检测其子对象。鼠标事件检测发生在鼠标事件的捕获阶段，此阶段引擎会从stage开始递归检测stage及其子对象，直到找到命中的目标对象或者未命中任何对象。</p>
     * <p>如果为false，优先检测子对象，当有子对象被命中时，中断检测，获得命中目标。如果未命中任何子对象，最后再检测此对象；如果为true，则优先检测本对象，如果本对象没有被命中，直接中断检测，表示没有命中目标；如果本对象被命中，则进一步递归检测其子对象，以确认最终的命中目标。</p>
     * <p>合理使用本属性，能减少鼠标事件检测的节点，提高性能。可以设置为true的情况：开发者并不关心此节点的子节点的鼠标事件检测结果，也就是以此节点作为其子节点的鼠标事件检测依据。</p>
     * <p>Stage对象和UI的View组件默认为true。</p>
     * @default false	优先检测此对象的子对象，当递归检测完所有子对象后，仍然没有找到目标对象，最后再检测此对象。
     */
    hitTestPrior: boolean;
    /**
     * @inheritDoc
     * @override
     */
    destroy(destroyChild?: boolean): void;
    constructor();
    /**根据zOrder进行重新排序。*/
    updateZOrder(): void;
    /**
     * 设置是否开启自定义渲染，只有开启自定义渲染，才能使用customRender函数渲染。
     */
    set customRenderEnable(b: boolean);
    /**
     * 指定显示对象是否缓存为静态图像，cacheAs时，子对象发生变化，会自动重新缓存，同时也可以手动调用reCache方法更新缓存。
     * 建议把不经常变化的“复杂内容”缓存为静态图像，能极大提高渲染性能。cacheAs有"none"，"normal"和"bitmap"三个值可选。
     * 默认为"none"，不做任何缓存。
     * 当值为"normal"时，canvas模式下进行画布缓存，webgl模式下进行命令缓存。
     * 当值为"bitmap"时，canvas模式下进行依然是画布缓存，webgl模式下使用renderTarget缓存。
     * webgl下renderTarget缓存模式缺点：会额外创建renderTarget对象，增加内存开销，缓存面积有最大2048限制，不断重绘时会增加CPU开销。优点：大幅减少drawcall，渲染性能最高。
     * webgl下命令缓存模式缺点：只会减少节点遍历及命令组织，不会减少drawcall数，性能中等。优点：没有额外内存开销，无需renderTarget支持。
     */
    get cacheAs(): string;
    set cacheAs(value: string);
    /**
     * 更新_cnavas相关的状态
     */
    private _checkCanvasEnable;
    /**设置cacheAs为非空时此值才有效，staticCache=true时，子对象变化时不会自动更新缓存，只能通过调用reCache方法手动刷新。*/
    get staticCache(): boolean;
    set staticCache(value: boolean);
    /**在设置cacheAs的情况下，调用此方法会重新刷新缓存。*/
    reCache(): void;
    getRepaint(): number;
    /**表示显示对象相对于父容器的水平方向坐标值。*/
    get x(): number;
    set x(value: number);
    /**表示显示对象相对于父容器的垂直方向坐标值。*/
    get y(): number;
    set y(value: number);
    /**
     * <p>显示对象的宽度，单位为像素，默认为0。</p>
     * <p>此宽度用于鼠标碰撞检测，并不影响显示对象图像大小。需要对显示对象的图像进行缩放，请使用scale、scaleX、scaleY。</p>
     * <p>可以通过getbounds获取显示对象图像的实际宽度。</p>
     */
    get width(): number;
    set width(value: number);
    set_width(value: number): void;
    get_width(): number;
    /**
     * <p>显示对象的高度，单位为像素，默认为0。</p>
     * <p>此高度用于鼠标碰撞检测，并不影响显示对象图像大小。需要对显示对象的图像进行缩放，请使用scale、scaleX、scaleY。</p>
     * <p>可以通过getbounds获取显示对象图像的实际高度。</p>
     */
    get height(): number;
    set height(value: number);
    set_height(value: number): void;
    get_height(): number;
    /**
     * <p>对象的显示宽度（以像素为单位）。</p>
     */
    get displayWidth(): number;
    /**
     * <p>对象的显示高度（以像素为单位）。</p>
     */
    get displayHeight(): number;
    /**
     * 设置对象bounds大小，如果有设置，则不再通过getBounds计算，合理使用能提高性能。
     * @param	bound bounds矩形区域
     */
    setSelfBounds(bound: Rectangle): void;
    /**
     * <p>获取本对象在父容器坐标系的矩形显示区域。</p>
     * <p><b>注意：</b>计算量较大，尽量少用。</p>
     * @return 矩形区域。
     */
    getBounds(): Rectangle;
    /**
     * 获取本对象在自己坐标系的矩形显示区域。
     * <p><b>注意：</b>计算量较大，尽量少用。</p>
     * @return 矩形区域。
     */
    getSelfBounds(): Rectangle;
    /**
     * 返回此实例中的绘图对象（ <code>Graphics</code> ）的显示区域，不包括子对象。
     * @param realSize	（可选）使用图片的真实大小，默认为false
     * @return 一个 Rectangle 对象，表示获取到的显示区域。
     */
    getGraphicBounds(realSize?: boolean): Rectangle;
    /**
     * @private
     * 获取样式。
     * @return  样式 Style 。
     */
    getStyle(): SpriteStyle;
    /**
     * @private
     * 设置样式。
     * @param	value 样式。
     */
    setStyle(value: SpriteStyle): void;
    /**X轴缩放值，默认值为1。设置为负数，可以实现水平反转效果，比如scaleX=-1。*/
    get scaleX(): number;
    set scaleX(value: number);
    /**Y轴缩放值，默认值为1。设置为负数，可以实现垂直反转效果，比如scaleX=-1。*/
    get scaleY(): number;
    set scaleY(value: number);
    set_scaleX(value: number): void;
    get_scaleX(): number;
    set_scaleY(value: number): void;
    get_scaleY(): number;
    /**旋转角度，默认值为0。以角度为单位。*/
    get rotation(): number;
    set rotation(value: number);
    /**水平倾斜角度，默认值为0。以角度为单位。*/
    get skewX(): number;
    set skewX(value: number);
    /**垂直倾斜角度，默认值为0。以角度为单位。*/
    get skewY(): number;
    set skewY(value: number);
    /**@private */
    protected _adjustTransform(): Matrix;
    /**
     * <p>对象的矩阵信息。通过设置矩阵可以实现节点旋转，缩放，位移效果。</p>
     * <p>矩阵更多信息请参考 <code>Matrix</code></p>
     */
    get transform(): Matrix;
    set transform(value: Matrix);
    get_transform(): Matrix;
    set_transform(value: Matrix): void;
    /**X轴 轴心点的位置，单位为像素，默认为0。轴心点会影响对象位置，缩放中心，旋转中心。*/
    get pivotX(): number;
    set pivotX(value: number);
    /**Y轴 轴心点的位置，单位为像素，默认为0。轴心点会影响对象位置，缩放中心，旋转中心。*/
    get pivotY(): number;
    set pivotY(value: number);
    /**透明度，值为0-1，默认值为1，表示不透明。更改alpha值会影响drawcall。*/
    get alpha(): number;
    set alpha(value: number);
    /**表示是否可见，默认为true。如果设置不可见，节点将不被渲染。*/
    get visible(): boolean;
    set visible(value: boolean);
    get_visible(): boolean;
    set_visible(value: boolean): void;
    /**指定要使用的混合模式。目前只支持"lighter"。*/
    get blendMode(): string;
    set blendMode(value: string);
    /**绘图对象。封装了绘制位图和矢量图的接口，Sprite所有的绘图操作都通过Graphics来实现的。*/
    get graphics(): Graphics;
    set graphics(value: Graphics);
    /**
     * <p>显示对象的滚动矩形范围，具有裁剪效果(如果只想限制子对象渲染区域，请使用viewport)</p>
     * <p> srollRect和viewport的区别：<br/>
     * 1.srollRect自带裁剪效果，viewport只影响子对象渲染是否渲染，不具有裁剪效果（性能更高）。<br/>
     * 2.设置rect的x,y属性均能实现区域滚动效果，但scrollRect会保持0,0点位置不变。</p>
     */
    get scrollRect(): Rectangle;
    set scrollRect(value: Rectangle);
    /**
     * <p>设置坐标位置。相当于分别设置x和y属性。</p>
     * <p>因为返回值为Sprite对象本身，所以可以使用如下语法：spr.pos(...).scale(...);</p>
     * @param	x			X轴坐标。
     * @param	y			Y轴坐标。
     * @param 	speedMode	（可选）是否极速模式，正常是调用this.x=value进行赋值，极速模式直接调用内部函数处理，如果未重写x,y属性，建议设置为急速模式性能更高。
     * @return	返回对象本身。
     */
    pos(x: number, y: number, speedMode?: boolean): Sprite;
    /**
     * <p>设置轴心点。相当于分别设置pivotX和pivotY属性。</p>
     * <p>因为返回值为Sprite对象本身，所以可以使用如下语法：spr.pivot(...).pos(50, 100);</p>
     * @param	x X轴心点。
     * @param	y Y轴心点。
     * @return	返回对象本身。
     */
    pivot(x: number, y: number): Sprite;
    /**
     * <p>设置宽高。相当于分别设置width和height属性。</p>
     * <p>因为返回值为Sprite对象本身，所以可以使用如下语法：spr.size(...).pos(50, 100);</p>
     * @param	width 宽度值。
     * @param	hegiht 高度值。
     * @return	返回对象本身。
     */
    size(width: number, height: number): Sprite;
    /**
     * <p>设置缩放。相当于分别设置scaleX和scaleY属性。</p>
     * <p>因为返回值为Sprite对象本身，所以可以使用如下语法：spr.scale(...).pos(50, 100);</p>
     * @param	scaleX		X轴缩放比例。
     * @param	scaleY		Y轴缩放比例。
     * @param 	speedMode	（可选）是否极速模式，正常是调用this.scaleX=value进行赋值，极速模式直接调用内部函数处理，如果未重写scaleX,scaleY属性，建议设置为急速模式性能更高。
     * @return	返回对象本身。
     */
    scale(scaleX: number, scaleY: number, speedMode?: boolean): Sprite;
    /**
     * <p>设置倾斜角度。相当于分别设置skewX和skewY属性。</p>
     * <p>因为返回值为Sprite对象本身，所以可以使用如下语法：spr.skew(...).pos(50, 100);</p>
     * @param	skewX 水平倾斜角度。
     * @param	skewY 垂直倾斜角度。
     * @return	返回对象本身
     */
    skew(skewX: number, skewY: number): Sprite;
    /**
     * 更新、呈现显示对象。由系统调用。
     * @param	context 渲染的上下文引用。
     * @param	x X轴坐标。
     * @param	y Y轴坐标。
     */
    render(ctx: Context, x: number, y: number): void;
    /**
     * <p>绘制 当前<code>Sprite</code> 到 <code>Canvas</code> 上，并返回一个HtmlCanvas。</p>
     * <p>绘制的结果可以当作图片源，再次绘制到其他Sprite里面，示例：</p>
     *
     * var htmlCanvas:HTMLCanvas = sprite.drawToCanvas(100, 100, 0, 0);//把精灵绘制到canvas上面
     * var sp:Sprite = new Sprite();//创建精灵
     * sp.graphics.drawTexture(htmlCanvas.getTexture());//把截图绘制到精灵上
     * Laya.stage.addChild(sp);//把精灵显示到舞台
     *
     * <p>也可以获取原始图片数据，分享到网上，从而实现截图效果，示例：</p>
     *
     * var htmlCanvas:HTMLCanvas = sprite.drawToCanvas(100, 100, 0, 0);//把精灵绘制到canvas上面
     * htmlCanvas.toBase64("image/png",0.9);//打印图片base64信息，可以发给服务器或者保存为图片
     *
     * @param	canvasWidth 画布宽度。
     * @param	canvasHeight 画布高度。
     * @param	x 绘制的 X 轴偏移量。
     * @param	y 绘制的 Y 轴偏移量。
     * @return  HTMLCanvas 对象。
     */
    drawToCanvas(canvasWidth: number, canvasHeight: number, offsetX: number, offsetY: number): HTMLCanvas;
    /**
     * 绘制到一个Texture对象
     * @param canvasWidth
     * @param canvasHeight
     * @param offsetX
     * @param offsetY
     */
    drawToTexture(canvasWidth: number, canvasHeight: number, offsetX: number, offsetY: number, rt?: RenderTexture2D | null): Texture | RenderTexture2D;
    /**
     * 把当前对象渲染到指定的贴图上。贴图由外部指定，避免每次都创建。
     * @param offx
     * @param offy
     * @param tex 输出渲染结果
     */
    drawToTexture3D(offx: number, offy: number, tex: Texture2D): void;
    /**
     * @private
     * 绘制到画布。
     */
    static drawToCanvas(sprite: Sprite, _renderType: number, canvasWidth: number, canvasHeight: number, offsetX: number, offsetY: number): HTMLCanvas;
    static drawtocanvCtx: Context;
    /**
     * @private
     *
     */
    static drawToTexture(sprite: Sprite, _renderType: number, canvasWidth: number, canvasHeight: number, offsetX: number, offsetY: number, rt?: RenderTexture2D | null): Texture | RenderTexture2D;
    /**
     * <p>自定义更新、呈现显示对象。一般用来扩展渲染模式，请合理使用，可能会导致在加速器上无法渲染。</p>
     * <p><b>注意</b>不要在此函数内增加或删除树节点，否则会对树节点遍历造成影响。</p>
     * @param	context  渲染的上下文引用。
     * @param	x X轴坐标。
     * @param	y Y轴坐标。
     */
    customRender(context: Context, x: number, y: number): void;
    /**滤镜集合。可以设置多个滤镜组合。*/
    get filters(): any[];
    set filters(value: any[]);
    /**
     * 把本地坐标转换为相对stage的全局坐标。
     * @param point				本地坐标点。
     * @param createNewPoint	（可选）是否创建一个新的Point对象作为返回值，默认为false，使用输入的point对象返回，减少对象创建开销。
     * @param globalNode		global节点，默认为Laya.stage
     * @return 转换后的坐标的点。
     */
    localToGlobal(point: Point, createNewPoint?: boolean, globalNode?: Sprite | null): Point;
    /**
     * 把stage的全局坐标转换为本地坐标。
     * @param point				全局坐标点。
     * @param createNewPoint	（可选）是否创建一个新的Point对象作为返回值，默认为false，使用输入的point对象返回，减少对象创建开销。
     * @param globalNode		global节点，默认为Laya.stage
     * @return 转换后的坐标的点。
     */
    globalToLocal(point: Point, createNewPoint?: boolean, globalNode?: Sprite | null): Point;
    /**
     * 将本地坐标系坐标转转换到父容器坐标系。
     * @param point 本地坐标点。
     * @return  转换后的点。
     */
    toParentPoint(point: Point): Point;
    /**
     * 将父容器坐标系坐标转换到本地坐标系。
     * @param point 父容器坐标点。
     * @return  转换后的点。
     */
    fromParentPoint(point: Point): Point;
    /**
     * 将Stage坐标系坐标转换到本地坐标系。
     * @param point 父容器坐标点。
     * @return  转换后的点。
     */
    fromStagePoint(point: Point): Point;
    /**
     * <p>增加事件侦听器，以使侦听器能够接收事件通知。</p>
     * <p>如果侦听鼠标事件，则会自动设置自己和父亲节点的属性 mouseEnabled 的值为 true(如果父节点mouseEnabled=false，则停止设置父节点mouseEnabled属性)。</p>
     * @param type		事件的类型。
     * @param caller	事件侦听函数的执行域。
     * @param listener	事件侦听函数。
     * @param args		（可选）事件侦听函数的回调参数。
     * @return 此 EventDispatcher 对象。
     * @override
     */
    on(type: string, caller: any, listener: Function, args?: any[]): EventDispatcher;
    /**
     * <p>增加事件侦听器，以使侦听器能够接收事件通知，此侦听事件响应一次后则自动移除侦听。</p>
     * <p>如果侦听鼠标事件，则会自动设置自己和父亲节点的属性 mouseEnabled 的值为 true(如果父节点mouseEnabled=false，则停止设置父节点mouseEnabled属性)。</p>
     * @param type		事件的类型。
     * @param caller	事件侦听函数的执行域。
     * @param listener	事件侦听函数。
     * @param args		（可选）事件侦听函数的回调参数。
     * @return 此 EventDispatcher 对象。
     * @override
     */
    once(type: string, caller: any, listener: Function, args?: any[]): EventDispatcher;
    /** @private */
    protected _onDisplay(v?: boolean): void;
    /**@private
     * @override
    */
    protected _setParent(value: Node): void;
    /**
     * <p>加载并显示一个图片。相当于加载图片后，设置texture属性</p>
     * <p>注意：2.0改动：多次调用，只会显示一个图片（1.0会显示多个图片）,x,y,width,height参数取消。</p>
     * @param url		图片地址。
     * @param complete	（可选）加载完成回调。
     * @return	返回精灵对象本身。
     */
    loadImage(url: string, complete?: Handler): Sprite;
    /**
     * 根据图片地址创建一个新的 <code>Sprite</code> 对象用于加载并显示此图片。
     * @param	url 图片地址。
     * @return	返回新的 <code>Sprite</code> 对象。
     */
    static fromImage(url: string): Sprite;
    /**cacheAs后，设置自己和父对象缓存失效。*/
    repaint(type?: number): void;
    /**@private
     * @override
    */
    protected _childChanged(child?: Node): void;
    /**cacheAs时，设置所有父对象缓存失效。 */
    parentRepaint(type?: number): void;
    /**对舞台 <code>stage</code> 的引用。*/
    get stage(): Stage;
    /**
     * <p>可以设置一个Rectangle区域作为点击区域，或者设置一个<code>HitArea</code>实例作为点击区域，HitArea内可以设置可点击和不可点击区域。</p>
     * <p>如果不设置hitArea，则根据宽高形成的区域进行碰撞。</p>
     */
    get hitArea(): any;
    set hitArea(value: any);
    /**
     * <p>遮罩，可以设置一个对象(支持位图和矢量图)，根据对象形状进行遮罩显示。</p>
     * <p>【注意】遮罩对象坐标系是相对遮罩对象本身的，和Flash机制不同</p>
     */
    get mask(): Sprite;
    set mask(value: Sprite);
    /**
     * 是否接受鼠标事件。
     * 默认为false，如果监听鼠标事件，则会自动设置本对象及父节点的属性 mouseEnable 的值都为 true（如果父节点手动设置为false，则不会更改）。
     * */
    get mouseEnabled(): boolean;
    set mouseEnabled(value: boolean);
    /**
     * 开始拖动此对象。
     * @param area				（可选）拖动区域，此区域为当前对象注册点活动区域（不包括对象宽高），可选。
     * @param hasInertia		（可选）鼠标松开后，是否还惯性滑动，默认为false，可选。
     * @param elasticDistance	（可选）橡皮筋效果的距离值，0为无橡皮筋效果，默认为0，可选。
     * @param elasticBackTime	（可选）橡皮筋回弹时间，单位为毫秒，默认为300毫秒，可选。
     * @param data				（可选）拖动事件携带的数据，可选。
     * @param disableMouseEvent	（可选）禁用其他对象的鼠标检测，默认为false，设置为true能提高性能。
     * @param ratio				（可选）惯性阻尼系数，影响惯性力度和时长。
     */
    startDrag(area?: Rectangle, hasInertia?: boolean, elasticDistance?: number, elasticBackTime?: number, data?: any, disableMouseEvent?: boolean, ratio?: number): void;
    /**停止拖动此对象。*/
    stopDrag(): void;
    /**
     * 检测某个点是否在此对象内。
     * @param	x 全局x坐标。
     * @param	y 全局y坐标。
     * @return  表示是否在对象内。
     */
    hitTestPoint(x: number, y: number): boolean;
    /**获得相对于本对象上的鼠标坐标信息。*/
    getMousePoint(): Point;
    /**
     * 获得相对于stage的全局X轴缩放值（会叠加父亲节点的缩放值）。
     */
    get globalScaleX(): number;
    /**
     * 获得相对于stage的全局旋转值（会叠加父亲节点的旋转值）。
     */
    get globalRotation(): number;
    /**
     * 获得相对于stage的全局Y轴缩放值（会叠加父亲节点的缩放值）。
     */
    get globalScaleY(): number;
    /**
     * 返回鼠标在此对象坐标系上的 X 轴坐标信息。
     */
    get mouseX(): number;
    /**
     * 返回鼠标在此对象坐标系上的 Y 轴坐标信息。
     */
    get mouseY(): number;
    /**z排序，更改此值，则会按照值的大小对同一容器的所有对象重新排序。值越大，越靠上。默认为0，则根据添加顺序排序。*/
    get zOrder(): number;
    set zOrder(value: number);
    /**
     * 设置一个Texture实例，并显示此图片（如果之前有其他绘制，则会被清除掉）。
     * 等同于graphics.clear();graphics.drawImage()，但性能更高
     * 还可以赋值一个图片地址，则会自动加载图片，然后显示
     */
    get texture(): Texture;
    set texture(value: Texture);
    /**
     * <p>视口大小，视口外的子对象，将不被渲染(如果想实现裁剪效果，请使用srollRect)，合理使用能提高渲染性能。比如由一个个小图片拼成的地图块，viewport外面的小图片将不渲染</p>
     * <p>srollRect和viewport的区别：<br/>
     * 1. srollRect自带裁剪效果，viewport只影响子对象渲染是否渲染，不具有裁剪效果（性能更高）。<br/>
     * 2. 设置rect的x,y属性均能实现区域滚动效果，但scrollRect会保持0,0点位置不变。</p>
     * @default null
     */
    get viewport(): Rectangle;
    set viewport(value: Rectangle);
    /**@private */
    captureMouseEvent(exclusive: boolean): void;
    /**@private */
    releaseMouseEvent(): void;
    set drawCallOptimize(value: boolean);
    get drawCallOptimize(): boolean;
}
