Sprite

Sprite 是 DisplayObjectContainer。它是 MovieClip 的基类,用于不需要时间轴的动态对象管理。

继承

classDiagram
    DisplayObject <|-- InteractiveObject
    InteractiveObject <|-- DisplayObjectContainer
    DisplayObjectContainer <|-- Sprite
    Sprite <|-- MovieClip

    class Sprite {
        +buttonMode: Boolean
        +useHandCursor: Boolean
    }

属性

Sprite 特有属性

属性类型只读默认值说明
isSpritebooleantrue返回是否具有 Sprite 功能
buttonModebooleanfalse指定此精灵的按钮模式
useHandCursorbooleantrue当 buttonMode 为 true 时是否显示手形光标
hitAreaSprite | nullnull指定另一个精灵作为此精灵的点击区域
soundTransformSoundTransform | nullnull控制此精灵内的声音

从 DisplayObjectContainer 继承的属性

属性类型只读默认值说明
isContainerEnabledbooleantrue返回显示对象是否具有容器功能
mouseChildrenbooleantrue确定对象的子对象是否与鼠标或用户输入设备兼容
numChildrennumber-返回此对象的子对象数量
maskDisplayObject | nullnull遮罩显示对象

从 InteractiveObject 继承的属性

属性类型只读默认值说明
isInteractivebooleantrue返回是否具有 InteractiveObject 功能
mouseEnabledbooleantrue指定此对象是否接收鼠标或其他用户输入消息

从 DisplayObject 继承的属性

属性类型只读默认值说明
instanceIdnumber-DisplayObject 的唯一实例 ID
namestring""返回名称。用于 getChildByName()
parentSprite | MovieClip | nullnull返回此 DisplayObject 父级的 DisplayObjectContainer
xnumber0相对于父 DisplayObjectContainer 本地坐标的 x 坐标
ynumber0相对于父 DisplayObjectContainer 本地坐标的 y 坐标
widthnumber-显示对象的宽度(像素)
heightnumber-显示对象的高度(像素)
scaleXnumber1从参考点应用的对象水平缩放值
scaleYnumber1从参考点应用的对象垂直缩放值
rotationnumber0DisplayObject 实例相对于其原始方向的旋转角度(度)
alphanumber1对象的 Alpha 透明度值(0.0 到 1.0)
visiblebooleantrue显示对象是否可见
blendModestring”normal”来自 BlendMode 类的值,指定要使用的混合模式
filtersarray | nullnull当前与显示对象关联的滤镜对象数组
matrixMatrix-返回显示对象的 Matrix
colorTransformColorTransform-返回显示对象的 ColorTransform
concatenatedMatrixMatrix-此显示对象和所有父对象的组合 Matrix
scale9GridRectangle | nullnull当前有效的缩放网格
loaderInfoLoaderInfo | nullnull此显示对象所属文件的加载信息
rootMovieClip | Sprite | nullnullDisplayObject 的根 DisplayObjectContainer
mouseXnumber-相对于 DisplayObject 参考点的 x 轴位置(像素)
mouseYnumber-相对于 DisplayObject 参考点的 y 轴位置(像素)
dropTargetSprite | nullnull精灵被拖动或放置到的显示对象
isMaskbooleanfalse表示 DisplayObject 是否被设置为遮罩

方法

Sprite 特有方法

方法返回类型说明
startDrag(lockCenter?: boolean, bounds?: Rectangle)void让用户拖动指定的精灵
stopDrag()void结束 startDrag() 方法

从 DisplayObjectContainer 继承的方法

方法返回类型说明
addChild(child: DisplayObject)DisplayObject添加子 DisplayObject 实例
addChildAt(child: DisplayObject, index: number)DisplayObject在指定索引位置添加子 DisplayObject 实例
removeChild(child: DisplayObject)void移除指定的子 DisplayObject 实例
removeChildAt(index: number)void从指定索引位置移除子 DisplayObject
removeChildren(...indexes: number[])void从容器中移除数组中指定索引处的子对象
getChildAt(index: number)DisplayObject | null返回指定索引位置的子显示对象实例
getChildByName(name: string)DisplayObject | null返回具有指定名称的子显示对象
getChildIndex(child: DisplayObject)number返回子 DisplayObject 实例的索引位置
setChildIndex(child: DisplayObject, index: number)void更改显示对象容器中现有子对象的位置
contains(child: DisplayObject)boolean指定的 DisplayObject 是否是实例的后代
swapChildren(child1: DisplayObject, child2: DisplayObject)void交换两个指定子对象的 z 顺序
swapChildrenAt(index1: number, index2: number)void交换两个指定索引位置的子对象的 z 顺序

从 DisplayObject 继承的方法

方法返回类型说明
getBounds(targetDisplayObject?: DisplayObject)Rectangle返回定义显示对象相对于 targetDisplayObject 坐标系统区域的矩形
globalToLocal(point: Point)Point将点对象从舞台(全局)坐标转换为显示对象(本地)坐标
localToGlobal(point: Point)Point将点对象从显示对象(本地)坐标转换为舞台(全局)坐标
hitTestObject(target: DisplayObject)boolean评估 DisplayObject 的绘制范围是否重叠或相交
hitTestPoint(x: number, y: number, shapeFlag?: boolean)boolean评估显示对象是否与 x 和 y 参数指定的点重叠或相交
remove()void移除父子关系
getLocalVariable(key: any)any从类的本地变量空间获取值
setLocalVariable(key: any, value: any)void在类的本地变量空间中存储值
hasLocalVariable(key: any)boolean确定类的本地变量空间中是否有值
deleteLocalVariable(key: any)void从类的本地变量空间中删除值
getGlobalVariable(key: any)any从全局变量空间获取值
setGlobalVariable(key: any, value: any)void在全局变量空间中存储值
hasGlobalVariable(key: any)boolean确定全局变量空间中是否有值
deleteGlobalVariable(key: any)void从全局变量空间中删除值
clearGlobalVariable()void清除全局变量空间中的所有值

使用示例

作为按钮使用

const { Sprite, Shape } = next2d.display;
const { PointerEvent } = next2d.events;

const button = new Sprite();

// 启用按钮模式
button.buttonMode = true;
button.useHandCursor = true;

// 创建背景 Shape
const bg = new Shape();
bg.graphics.beginFill(0x3498db);
bg.graphics.drawRoundRect(0, 0, 120, 40, 8, 8);
bg.graphics.endFill();
button.addChild(bg);

// 点击事件
button.addEventListener(PointerEvent.POINTER_DOWN, () => {
    console.log("按钮被点击");
});

stage.addChild(button);

作为遮罩使用

const { Sprite, Shape } = next2d.display;

const container = new Sprite();

// 内容 Shape
const content = new Shape();
content.graphics.beginFill(0xFF0000);
content.graphics.drawRect(0, 0, 200, 200);
content.graphics.endFill();
container.addChild(content);

// 遮罩 Shape
const maskShape = new Shape();
maskShape.graphics.beginFill(0xFFFFFF);
maskShape.graphics.drawCircle(100, 100, 50);
maskShape.graphics.endFill();

// 应用遮罩
container.mask = maskShape;

stage.addChild(container);
stage.addChild(maskShape);

拖放

const { Sprite, Shape } = next2d.display;
const { PointerEvent } = next2d.events;
const { Rectangle } = next2d.geom;

const draggable = new Sprite();

// 创建背景 Shape
const bg = new Shape();
bg.graphics.beginFill(0x3498db);
bg.graphics.drawRect(0, 0, 100, 100);
bg.graphics.endFill();
draggable.addChild(bg);

// 开始拖动
draggable.addEventListener(PointerEvent.POINTER_DOWN, () => {
    // 开始拖动(锁定中心,指定边界)
    draggable.startDrag(true, new Rectangle(0, 0, 400, 300));
});

// 停止拖动
draggable.addEventListener(PointerEvent.POINTER_UP, () => {
    draggable.stopDrag();
});

stage.addChild(draggable);

管理子对象

const { Sprite, Shape } = next2d.display;

const container = new Sprite();

// 添加多个 Shape 作为子对象
for (let i = 0; i < 5; i++) {
    const shape = new Shape();
    shape.graphics.beginFill(0xFF0000 + i * 0x003300);
    shape.graphics.drawCircle(0, 0, 20);
    shape.graphics.endFill();
    shape.x = i * 50;
    shape.name = "circle" + i;
    container.addChild(shape);
}

// 通过名称获取子对象
const circle2 = container.getChildByName("circle2");

// 获取子对象数量
console.log(container.numChildren); // 5

stage.addChild(container);

相关