vue引入并使用物理引擎matter.js

1.效果

vue引入并使用物理引擎matter.js

2.什么是matter.js?
Matter.js 是一个开源的2D物理引擎,专为Web浏览器设计,使用JavaScript编写。它允许开发者在网页上创建包含物理交互的动态图形和游戏。Matter.js 提供了一系列强大的功能,使得模拟真实世界中的物理行为变得简单,例如碰撞检测、刚体动力学、约束条件等。
3.主要特点:
①易于集成:Matter.js 可以轻松地与现有的HTML5 Canvas或其他Web图形库(如Pixi.js)集成,为网页项目添加物理模拟功能。
高性能:优化的架构设计使其能在多种设备上流畅运行,支持大量的物理对象同时模拟。
②模块化:Matter.js 是高度模块化的,你可以选择只使用需要的功能模块,减少最终应用的体积。
③物理特性丰富:支持静态、动态、运动学等多种类型的物体,以及各种关节、碰撞检测、摩擦力、重力等物理属性的自定义。
④链式API:提供了一套直观的链式调用API,便于构建和配置物理世界及其中的对象。
⑤渲染独立:Matter.js 不直接处理渲染,而是提供了物体的位置和尺寸信息,开发者可以根据需要选择自己的渲染方式。
⑥跨平台:由于基于Web标准,Matter.js 可以运行在任何支持JavaScript的现代浏览器上,包括桌面和移动设备。

基本模块(需要其它详细api介绍文档可看)

模块名称说明
引擎(Engine)引擎 EngineMatter.js 的核心组件,用于管理物理世界中的所有对象、计算物体的运动和相互作用。用来模拟真实环境的。
渲染器(Render)渲染器 Render 用于将物理世界中的对象可视化。意思就是它能将物体渲染到屏幕上。
复合体(Composite)是包含多个刚体和约束的容器,它们可以作为单个物理对象进行操作。
刚体(Body)表示具有物理属性的实体,如形状、质量和速度等。刚体可以是各种形状,例如矩形、圆形、多边形等。
约束(Constraint)用于约束刚体的相对运动,例如让两个刚体之间的距离保持不变、限制旋转等。
循环模块 (Runner)Runner 用于管理和控制物理引擎的主循环。
**4.在vue项目下载依赖**
npm install matter-js

5.在需要使用的页面中引入

import Matter from "matter-js";

6.详细代码

<template><div><div id="c"></div></div>
</template><script>
import Matter from "matter-js";export default {mounted() {this.$nextTick(() => {// 确保DOM已更新this.initMatter();});},methods: {initMatter() {const Engine = Matter.Engine;const Render = Matter.Render;const Bodies = Matter.Bodies;const Composite = Matter.Composite;const Runner = Matter.Runner;// 3. 创建引擎let engine = Engine.create();// 4. 创建渲染器,并将引擎连接到画布上let render = Matter.Render.create({element: document.getElementById("c"), // 绑定页面元素engine: engine, // 绑定引擎options: {wireframes: false}});// 5-1. 创建两个正方形let boxA = Bodies.rectangle(400, 200, 80, 80, {frictionAir: 0.1, // 设置空气阻力restitution: 1, // 设置弹力render: {sprite: {xScale: 0.3,yScale: 0.3,// 使用精灵texture:"https://img0.baidu.com/it/u=105699685,1942932424&fm=253&fmt=auto&app=138&f=JPEG" // 图片纹理位置}}});//   let boxB = Bodies.rectangle(450, 50, 80, 80);let boxB = Bodies.circle(450, 40, 40, {frictionAir: 0.1, // 设置空气阻力render: {strokeStyle: "#3490de", // 设置边框颜色lineWidth: 20 // 设置边框宽度}}); //圆形 x,y,半径//正多边形let polygon = Matter.Bodies.polygon(450, 200, 7, 40, {frictionAir: 0.1 // 设置空气阻力});//   三角形let triangle = Matter.Bodies.trapezoid(450, 200, 80, 80, 1, {mass: 0.4 //质量 mass 质量越大,惯性越大// frictionAir: 0.1 // 设置空气阻力});// 定义顶点const vertices = [{ x: 0, y: 0 },{ x: 50, y: 0 },{ x: 50, y: 50 },{ x: 25, y: 75 },{ x: 0, y: 50 }];// 自定义多边形const trapezoid = Matter.Bodies.fromVertices(450, 100, vertices);// 5-2. 创建地面,将isStatic设为true,表示物体静止let ground = Bodies.rectangle(400, 610, 810, 60, {isStatic: true,render: {fillStyle: "#cccccc"}});// 创建鼠标实例let mouse = Matter.Mouse.create(render.canvas);// 给鼠标添加约束let mouseConstraint = Matter.MouseConstraint.create(engine, {mouse: mouse,constraint: {stiffness: 0.2,render: {visible: false // 默认为 true,会显示鼠标拖拽轨迹}}});// 6. 将所有物体添加到世界中Composite.add(engine.world, [boxA,boxB,triangle,polygon,trapezoid,ground,mouseConstraint]);// 7. 执行渲染操作Render.run(render);// 8. 创建运行方法var runner = Runner.create();// 9. 运行渲染器Runner.run(runner, engine);}}
};
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/36145.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flag-gems的装饰器point-wise分析

一 函数入口 def pointwise_dynamic(f: Optional[JITFunction] = None,*,num_inputs: Optional[int] = None,is_tensor: Optional[List[bool]] = None,dtypes: Optional[List[Optional[type]]] = None,num_outputs: Optional[int] = None,output_dtypes: Optional[List[type]]…

vue3 +elementPlus上传照片墙

获取到照片字符串然后push到fileList对应的URL中 if (formData.value.pictures) {let zz formData.value.pictures.split(",")zz.forEach((item) > {fileList.value.push({ url: item })})}对应表单 <el-form-item label"内容详情图"><el-up…

【数据集管理】使用 Fiftyone 管理数据集,大型数据集也不在话下!

【数据集管理】使用 Fiftyone 管理数据集&#xff0c;大型数据集也不在话下&#xff01; 1. Fiftyone 安装2. 数据集的加载与导出2.1 本地数据集操作2.1.1 创建 session2.1.2 加载数据集2.1.2.1 加载 YOLO 格式的数据集2.1.2.2 加载本地数据库中的数据集2.1.2.3 同时加载数据集…

2024《汽车出海全产业数据安全合规发展白皮书》下载

随着中国制造向中国智造目标的迈进&#xff0c;中国汽车正以前所未有的速度和质量&#xff0c;在全球市场上开疆拓土。不过&#xff0c;在中国汽车加快出海步伐的过程中&#xff0c;数据安全合规风险管理成为车企不容忽视的课题。 6月25日&#xff0c;在中国&#xff08;上海&…

从万里长城防御体系看软件安全体系建设@安全历史03

长城&#xff0c;是中华民族的一张重要名片&#xff0c;是中华民族坚韧不屈、自强不息的精神象征&#xff0c;被联合国教科文组织列入世界文化遗产名录。那么在古代&#xff0c;长城是如何以其复杂的防御体系&#xff0c;一次次抵御外族入侵&#xff0c;而这些防御体系又能给软…

银行批处理系统设计模块

银行批处理系统是一种关键的后台处理系统&#xff0c;它通常在非高峰时段处理大量交易和数据。这种系统的设计需要考虑高可靠性、安全性、准确性和效率。以下是设计银行批处理系统时可能包含的一些核心模块&#xff1a; 1. **输入模块**&#xff1a; - 负责接收各种来源的数…

上海高考志愿填报小程序开发的主要功能

6月毕业季&#xff0c;高考学子刚经历了激烈的高考角逐&#xff0c;又迎来了志愿填报的大关。面对影响一生的高考志愿&#xff0c;如何填报显得尤为重要&#xff0c;面对广大学子的填报需求&#xff0c;上海高考志愿填报小程序为高考学子带来了福音。 一&#xff0e; 上海高考…

ESP32代码开发入门

ESP-IDF ESP-ADF开发 开发概要 编译环境及SDK搭建 整个开发流程是:下载ESP-IDF, ESP-ADF(按需下载),并安装, 编写hello world工程,编译并烧录到主板验证 可参照ESP32 esp-idf esp-adf环境安装及.a库创建与编译api大部分可以用glibc的接口 做了封装,时间time(NULL), 创建线程p…

端到端图像分类算法开发实战:从 Arm 虚拟硬件到 Grove Vision AI Module V2 物理硬件

端到端图像分类算法开发实战&#xff1a;从 Arm 虚拟硬件到 Grove Vision AI Module V2 物理硬件 文章目录 1. 写在前面2. 产品简介2.1 Arm 虚拟硬件镜像产品简介2.2 Grove - Vision AI V2 产品简介 3. 实验前准备4. 实验步骤4.1 模型训练4.2 Arm 虚拟硬件镜像上的部署测试4.2…

福昕阅读器 (Foxit Reader) 详解:打造极致PDF阅读体验

引言 在日常工作和学习中&#xff0c;PDF文件的使用越来越广泛。一款高效、稳定且功能丰富的PDF阅读器能够大大提升我们的工作效率。福昕阅读器 (Foxit Reader) 作为一款备受欢迎的PDF阅读器&#xff0c;以其轻量、高效和强大的功能&#xff0c;成为了许多用户的首选。本文将详…

OpenAI 开启买买买模式:接连收购 Rockset 与 Multi,科技巨头创新布局

引言 最近&#xff0c;OpenAI 在科技领域引起了广泛关注&#xff0c;通过接连收购两家初创公司 Rockset 和 Multi&#xff0c;开启了所谓的“买买买模式”。这一战略举措不仅展现了 OpenAI 对于技术发展的深远布局&#xff0c;也预示着未来更多创新产品的推出。本文将详细探讨…

如何在 Ubuntu VPS 实例上安装 Chef 服务器、工作站和客户端

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 简介 随着组织结构的不断增长和管理环境所需的各个独立组件的扩展&#xff0c;管理每个服务器和服务可能变得难以管理。 配置管理解决方…

Linux通用系统高危漏洞(CVE-2024-1086)修复案例

一、漏洞描述 2024年3月28日&#xff0c; Linux kernel权限提升漏洞&#xff08;CVE-2024-1086&#xff09;的PoC/EXP在互联网上公开&#xff0c;该漏洞的CVSS评分为7.8&#xff0c;目前漏洞细节已经公开披露&#xff0c;美国网络安全与基础设施安全局&#xff08;CISA&#x…

vue 中html 转word 遇到的坑记录

1.单选框的展示 <span style="font-family: Wingdings;font-size: 12pt;">{{items.cellValue == i ? "" : "¡" }} </span>2.多选框的展示 <span style=" font-family: 宋体">{{items.selRadio.includes(ind…

测试:MyBatisDemo

MyBatis Demo 先创建一个 Maven 项目&#xff0c;名称为 MyBatis01。 之后创建并连接 MySQL 数据库&#xff0c;然后执行 sql 脚本&#xff1a; CREATE DATABASE mybatis;USE mybatis;DROP TABLE IF EXISTS user;CREATE TABLE user ( id int(20) NOT NULL, name varchar(30)…

数据治理新纪元:筛斗数据引领企业信息优化潮流

数据治理新纪元&#xff1a;筛斗数据引领企业信息优化潮流 随着数字化时代的深入发展&#xff0c;数据已成为企业运营和决策的核心驱动力。然而&#xff0c;海量的数据往往伴随着质量参差不齐、格式各异等问题&#xff0c;如何有效地管理和利用这些数据&#xff0c;成为企业面…

等级保护 | 如何完成等保的建设整改

等级保护整改是等保基本建设的一个阶段。为了能成功通过等级测评&#xff0c;企业要根据等级保护建设要求&#xff0c;对信息和信息系统进行网络安全升级&#xff0c;对定级对象当前不满足要求的进行建设整改&#xff0c;包括技术层面的整改&#xff0c;也包括管理方面的整改。…

ABB机器人控制柜各模块指示灯状态说明

ABB机器人控制柜各模块指示灯状态说明 主计算机模块位于控制柜的正前方,负责机器人的各种运算处理,安全模块主要负责安全相关的信号处理,驱动单元模块用于接收上位机指令,驱动机器人运动,轴计算机模块用于接收主计算机的运动指令和串

入门JavaWeb之 Response 验证码和重定向

Response 写验证码&#xff1a; package com.demo.response;import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse…

leetcode167:两数之和|| - 输入有序数组

题目链接&#xff1a;167. 两数之和 II - 输入有序数组 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<int> twoSum(vector<int>& numbers, int target) {int left 0, right numbers.size() - 1;while(left < right){if(numbe…