cocos creator 鼠标画笔|画线

本文介绍了如何在CocosCreator中,通过监听MOUSE_MOVE事件和使用Graphics组件来实现前端画线功能。在遇到线与鼠标轨迹偏移问题时,通过调整锚点和位置,或者使用convertToNodeSpaceAR方法进行坐标转换可以解决。示例代码详细展示了这一过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

cocos creator 版本使用 至少适配版本2.3.2以上
案例:
请添加图片描述
简要思路:MOUSE_MOVE事件和Graphics组件实现
前端也可以通过canvas和mousemove事件实现,原理一致

具体步骤如下:
在这里插入图片描述
1.添加节点Node
2.在Node节点上绑定组件Graphics
3.添加下方脚本drawcontroll.ts
4.注意Node节点的锚点和位置(如果不想要这个方法,可以看最下方解决方案)
请添加图片描述

drawcontroll.ts全部代码

import { _decorator, Component, Color, Node, Graphics, Vec3, UITransform } from 'cc';
const { ccclass, property } = _decorator;

@ccclass('drawcontroll')
export class drawcontroll extends Component {
    graphics=null;
    isDrawing = false;
    array = [];

    start() {
        this.graphics = this.getComponent(Graphics);
        this.graphics.lineWidth = 5;
        this.graphics.strokeColor = Color.RED;
        this.node.on(Node.EventType.MOUSE_DOWN, this.onMouseDown, this);
        this.node.on(Node.EventType.MOUSE_MOVE, this.onMouseMove, this);
        this.node.on(Node.EventType.MOUSE_UP, this.onMouseUp, this);
    }
        onMouseDown (event) {
            this.isDrawing = true;
            this.graphics.moveTo(event.getLocation().x,event.getLocation().y);
        }
        onMouseMove (event) {
            if (this.isDrawing) {
                this.graphics.lineTo(event.getLocation().x,event.getLocation().y);
                this.graphics.stroke();
            }
        }
        onMouseUp (event) {
            this.isDrawing = false;
        }
}


注意事项:
当如果发现鼠标画出来的线和鼠标轨迹有很大偏移,有两种方法

  1. 浏览器是否是缩小放大状态 -----调整为百分之百
  2. 锚点和位置设置的问题

创建的Node脚本的锚点和位置在不变的情况下(锚点0.5,0.5,位置0,0)

那么只需要将上面drawcontroll.ts代码替换即可

		onMouseDown (event) {
            this.isDrawing = true;
            const moveToPoint = this.node.parent.getComponent(UITransform).convertToNodeSpaceAR(new Vec3(event.getLocation().x,event.getLocation().y,0));
            this.graphics.moveTo(moveToPoint.x,moveToPoint.y);
        }
        onMouseMove (event) {
            if (this.isDrawing) {
                const lineToPoint = this.node.parent.getComponent(UITransform).convertToNodeSpaceAR(new Vec3(event.getLocation().x,event.getLocation().y,0));
                this.graphics.lineTo(lineToPoint.x,lineToPoint.y);
                this.graphics.stroke();
            }
        }

convertToNodeSpaceAR方法解说如下:
在这里插入图片描述


关键词:
cocos creator 鼠标画笔|画线, cocos creator画线 , cocos creator 画笔, cocos creator 画形状, cocos creator 画图

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值