Pixi绘制带箭头的线

简介: 这篇文章讲解了如何使用Pixi.js来绘制带有箭头的线条,并提供了绘制箭头的具体实现方法和技术细节。

最近在用pixi绘制地图的时候需要做带箭头的线,用来从一个点执行另一个点,表示此段路线可行,但是发现pixie是没有自带的绘制带箭头线段的,那就只能自己绘制了,在此记录一下,pixi底层是用的canvas,所以绘图和方法和canvas很像,先通过PIXI创建Graphics对象。,绘制一条线段,这里绘制从(50,50)到(350,350)的线段颜色设置为黑色

 let graphics = new PIXI.Graphics();
 this.app.stage.addChild(graphics);

// 绘制线段
graphics.lineStyle(2, 0x000000); // 设置线条样式(宽度和颜色)
graphics.moveTo(50, 50); // 起点
graphics.lineTo(350, 350); // 终点

然后开始给这个线段绘制箭头,绘制箭头的功能可以封装为一个方法,箭头的位置,朝向等,由于线段的朝向不确定性,箭头也需要根据线段的方向来算,通过两个点的夹角方向获取到箭头的朝向,

drawArrow(graphics, x, y, dx, dy, size) {
      let angle = Math.atan2(dy, dx); // 计算角度
      // 计算箭头两侧的顶点位置
      let arrowX1 = x - size * Math.cos(angle + Math.PI / 6);
      let arrowY1 = y - size * Math.sin(angle + Math.PI / 6);
      let arrowX2 = x - size * Math.cos(angle - Math.PI / 6);
      let arrowY2 = y - size * Math.sin(angle - Math.PI / 6);
      // 绘制箭头
      graphics.beginFill(0x000000); // 设置填充颜色
      graphics.moveTo(x, y); // 从当前点开始
      graphics.lineTo(arrowX1, arrowY1); // 绘制箭头的一侧
      graphics.lineTo(arrowX2, arrowY2); // 绘制箭头的另一侧
      graphics.lineTo(x, y); // 闭合箭头
      graphics.endFill(); // 结束填充
    }

然后就可以根据需要来给线段绘制箭头,其中dx的值是startX-endX,dy的值是startY-endY获取到,

      graphics.lineStyle(2, 0x000000); // 设置线条样式(宽度和颜色)
      graphics.moveTo(50, 50); // 起点
      graphics.lineTo(350, 350); // 终点
      this.drawArrow(graphics, 50, 50, -300,-300, this.size);
      this.drawArrow(graphics, 350, 350,  300,300, this.size);

最终结果如下:

相关文章
|
Web App开发 前端开发
【前端异常】Unchecked runtime.lastError: Could not establish connection. Receiving end does not exist.
【前端异常】Unchecked runtime.lastError: Could not establish connection. Receiving end does not exist.
1409 0
|
定位技术 调度
Pixi绘制各种图形
这篇文章作为Pixi.js入门教程的一部分,详细介绍了如何使用Pixi.js绘制各种基本图形,如矩形、圆角矩形、圆形和椭圆,并提供了具体的实现代码。
264 0
Pixi绘制各种图形
|
11月前
|
缓存 监控 数据挖掘
亿级数据如何实现秒级响应?
本文详细介绍了瓴羊Quick BI的性能架构、性能工具和性能保障,旨在帮助企业更好地理解和使用这一商业智能工具。文章首先概述了BI产品在企业中的重要性,随后深入探讨了Quick BI的性能架构,包括应用架构、分析引擎和渲染引擎,以及其优势和测试效果。接着,文章介绍了性能工具,包括性能分析和性能诊断,帮助用户精准诊断和优化性能瓶颈。最后,文章阐述了性能保障措施,如线上监控、版本巡检和定期报告,确保系统的稳定性和高效运行。通过这些设计,Quick BI能够满足企业在不同场景下的性能需求,提升数据分析效率和决策能力。
362 3
|
SQL 分布式计算 大数据
大数据-119 - Flink Window总览 窗口机制-滚动时间窗口-基于时间驱动&基于事件驱动
大数据-119 - Flink Window总览 窗口机制-滚动时间窗口-基于时间驱动&基于事件驱动
412 0
|
存储 人工智能 安全
从梦想到现实:十年见证AI自动化漏洞修复的演变
2014年,我怀揣着利用科技创造更安全数字世界的梦想,提出了通过云平台自动化修复第三方网站漏洞的构想。十年后的2024年,随着AI技术的崛起,这一梦想已成为现实。如今,用户只需简单注册并安装插件,AI系统就能自动检测、修复漏洞,整个过程高效、智能。AI不仅提升了系统的可靠性和效率,还具备自我学习能力,使安全防护更加主动。未来,我将继续用AI探索更多可能,推动技术的发展,不断完善这个充满智慧与安全的数字世界。
283 3
从梦想到现实:十年见证AI自动化漏洞修复的演变
|
机器学习/深度学习 传感器 人工智能
智慧矿山AI安全监管方案
智慧矿山AI安全监管方案通过集成AI技术,实现了对矿山环境、设备和人员的全方位智能监控与管理。该方案利用高清摄像头、传感器等设备实时采集数据,通过AI算法进行智能分析,提前预测安全隐患,及时发出预警,有效提升矿山安全管理水平。方案涵盖顶板与边坡监测、设备运行监测、人员行为识别等多个方面,旨在构建一个高效、安全的智能化矿山环境。
374 0
|
canal Kubernetes 负载均衡
在K8S中,优先优选哪个CNI插件?为何使用该插件?
在K8S中,优先优选哪个CNI插件?为何使用该插件?
|
开发工具 git 开发者
【GitHub】如何在github上提交PR(Pull Request) + 多个pr同时提交、互不干扰
【GitHub】如何在github上提交PR(Pull Request) + 多个pr同时提交、互不干扰
4080 6
|
JavaScript 前端开发
37.【TypeScript 教程】TSLint 与 ESLint
37.【TypeScript 教程】TSLint 与 ESLint
227 0
|
JavaScript 开发者
【TypeScript 技术专栏】TypeScript 与 ESLint 代码规范
【4月更文挑战第30天】TypeScript和ESLint是代码规范的关键工具。TypeScript通过静态类型检查、接口与模块系统提升代码质量;ESLint则负责语法检查、风格统一和最佳实践。两者结合使用,提供全面的代码规范保障。制定团队共识、保持灵活性并持续优化规范是关键。常见问题包括类型不匹配、风格不一致和未使用变量,可通过这两工具解决。实际案例分析进一步说明了它们在项目中的应用。重视代码规范,利用这些工具,能提高代码质量和开发效率。
370 0