Laya3实现鼠标拖动在屏幕上实时框选矩形区域


import Camera = Laya.Camera;
import Scene3D = Laya.Scene3D;
import Event = Laya.Event;
import Sprite = Laya.Sprite;
import Ray = Laya.Ray;
import HitResult = Laya.HitResult;
import MeshRenderer = Laya.MeshRenderer;
import Vector3 = Laya.Vector3;
import Sprite3D = Laya.Sprite3D;

export class MyDrawLine extends Laya.Script {
    private scene: Scene3D;
    private camera: Camera;
    private sp: Sprite;

    private lastMouseDownX: number = 0;
    private lastMouseDownY: number = 0;
    private lastMouseUpX: number = 0;
    private lastMouseUpY: number = 0;
    private isMouseDown: boolean = false;

    private point: Laya.Vector2 = new Laya.Vector2(0, 0);

    onAwake(): void {
        // 绑定脚本
        this.scene = this.owner as Scene3D;
        this.camera = this.owner.getChildByName("Main Camera") as Camera;
        // 创建
        this.sp = this.scene.parent.addChild(new Laya.Sprite());
    }

    onEnable() {
        Laya.stage.on(Event.MOUSE_DOWN, this, this.mouseDown);
        Laya.stage.on(Event.MOUSE_UP, this, this.mouseUp);
        Laya.stage.on(Event.MOUSE_MOVE, this, this.mouseMove);
    }
    onDisable() {
        Laya.stage.off(Event.MOUSE_DOWN, this, this.mouseDown);
        Laya.stage.off(Event.MOUSE_UP, this, this.mouseUp);
        Laya.stage.off(Event.MOUSE_MOVE, this, this.mouseMove);
    }

    mouseDown(e: any): void {
        console.log("DrawLine 按下", Laya.stage.mouseX, Laya.stage.mouseY, e);

        this.lastMouseDownX = Laya.stage.mouseX;
        this.lastMouseDownY = Laya.stage.mouseY;
        // 移动
        let touch = Laya.InputManager.touches[0];
        this.point.x = touch.pos.x;
        this.point.y = touch.pos.y;

        //设置bool值
        this.isMouseDown = true;
    }
    mouseMove(e: any) {
        if (this.isMouseDown) {
            this.lastMouseUpX = Laya.stage.mouseX;
            this.lastMouseUpY = Laya.stage.mouseY;

            this.drawSomething();
        }
    }
    mouseUp(e: any): void {
        console.log("DrawLine 抬起", Laya.stage.mouseX, Laya.stage.mouseY);

        this.lastMouseUpX = Laya.stage.mouseX;
        this.lastMouseUpY = Laya.stage.mouseY;
    }
    drawSomething(): void {
        this.spriteClear();
        let w = this.lastMouseUpX - this.lastMouseDownX;
        let h = this.lastMouseUpY - this.lastMouseDownY;
        let x = this.lastMouseDownX;
        let y = this.lastMouseDownY;
        this.sp.graphics.drawRect(x, y, w, h, "rgba(255,255,255,0)", "#ffff00");
    }
    spriteClear() {
        this.sp.graphics.clear();
    }

}
   this.scene.addComponent(MyDrawLine);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值