Matter.js 插件:matter-wrap(世界是圆的)

news2024/11/15 7:06:13

theme: smartblue

本文简介

点赞 + 关注 + 收藏 = 学会了

记得以前看爆笑校园里有一集讲到,一个人对着前面开了一枪,过了一阵子弹打中他自己的后脑勺。作者想通过这个冷笑话告诉大家一件事:地球是圆的。

Matter.js 世界里,默认是没有边界的,也就是说你往一个方向把物体丢出去,超过画布边界后你可能就找不回那个物体了。

如果想Matter.js 世界变成“圆”的,可以使用 matter-wrap 这个插件

matter-wrap 是什么?

  • matter-wrap GitHub地址

matter-wrap 官方是这样介绍自己的

This plugin allows you to automatically wrap the position of bodies and composites such that they always stay within the given bounds. Upon crossing a boundary the body will appear on the opposite side of the bounds, while maintaining its velocity. An example of this effect can be seen in the classic Asteroids and Pacman games.

简单来说,它可以让 matter.js 创建出来的场景变成一个循环的场景。当物体穿越边界后,会从另一个边界出现。同时还保存它自身的速度和其他物理特性。

01.gif

再来看一个使用 matter-wrap 的具体例子。

02.gif

在这个例子中我把三角形丢出边界,它会从边界的另一边出现。这就是 matter-wrap 的功能。

使用 matter-wrap

要使用 matter-wrap 首先就得安装它。

安装的方式有2种,一种是使用 CDN 的方式引入,另一种是使用 npm 的方式下载。根据你的项目而定吧~

CDN

可以打开 matter-wrap 仓库 matter-wrap.jsmatter-wrap.min.js 这两个文件,下载下来然后引入到项目中即可。

03.png

```html

```

NPM

使用这个命令可以将 matter-wrap 安装到你的项目中

npm install matter-wrap

然后在项目中引入即可

js import MatterWrap from 'matter-wrap'

使用方法

先拿1个图形来讲解比较容易理解。

在 《物理世界的互动之旅:Matter.js入门指南》 里有讲到如何使用 matter.js 创建画布和物体,这里我就不再啰嗦了。

使用 matter-wrap 关键有2步:

  1. 告知 matter 要使用 matter-wrap 插件。
  2. 在创建元素时配置 plugin 属性,让元素能用 wrap 进行可运行边界的配置。

请看这段代码

04.gif

```html

```

其中,通过 render.bounds.min.xrender.bounds.min.yrender.bounds.max.xrender.bounds.max.y 能分别获取到画布的四个角的坐标,也就是说可以定义元素运动的边界。

值得注意的是,元素只有在完完全全超出边界后,才会在另一边重新出现,如果元素只是局部超出边界,超出的部分并不会在另一边出现。

05.png

如果页面上存在多个元素,并且希望所有元素都使用 matter-wrap 规定边界,那可以通过遍历所有元素让它们都进行统一配置。

```js // 省略部分代码

// 地面 Composite.add(engine.world, [ Bodies.rectangle(400, 600, 1200, 50.5, { isStatic: true, render: { fillStyle: '#060a19' } }) ])

// 创建一堆球 let stack = Composites.stack(100, 0, 10, 8, 10, 10, function(x, y) { return Bodies.circle(x, y, Common.random(15, 30), { restitution: 0.6, friction: 0.1 }) })

// 将一对球和几个大一点的形状添加到场景中 Composite.add(engine.world, [ stack, Bodies.polygon(200, 460, 3, 60), // 三角形 Bodies.polygon(400, 460, 5, 60), // 五边形 Bodies.rectangle(600, 460, 80, 80) // 正方形 ])

// 获取画布上所有元素 let allBodies = Composite.allBodies(engine.world)

// 遍历所有元素,让它们都用上 matter-wrap 配置边界 for (let i = 0; i < allBodies.length; i += 1) { allBodies[i].plugin.wrap = { min: { x: render.bounds.min.x, y: render.bounds.min.y }, max: { x: render.bounds.max.x, y: render.bounds.max.y } } } ```

出来的效果就是这样的

06.gif

以上就是本文的全部内容。

推荐阅读

👍 《物理世界的互动之旅:Matter.js入门指南》

点赞 + 关注 + 收藏 = 学会了

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

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

相关文章

stable-diffusion-webui远程访问、插件在线安装

本篇文章可以解决以下问题&#xff1a;stable-diffusion-webui 安装插件报错、没有用户登录安全认证、云主机安装后无法远程访问。 成功安装stable-diffusion-webui后&#xff0c;可以通过命令 bash webui.sh 启动。启动后可以通过 http://127.0.0.1:7860访问。但无法进行远程…

QML快速上手1 - 预备知识

目录 前言QtQuick 预备知识二维坐标系textimagemousearea组件定位元件布局项输入元素 前言 此笔记及后续所有笔记均基于如下环境 Qt Quick 2.12Qt 5.12 参考文献&#xff1a; qmlbook 以下所有笔记均从上述qmlbook中选取精华得来&#xff0c;如果嫌英文太多或者原文太长&am…

【论文系列解读】MiniGPT-4: 增强视觉语言理解与先进的大型语言模型

Minigpt4 MiniGPT-4: Enhancing Vision-Language Understanding with Advanced Large Language Models MiniGPT-4: 增强视觉语言理解与先进的大型语言模型 (0) 总结&实测 minigpt是先提出来的&#xff0c;将视觉编码器和LLM对齐&#xff0c;blip2和它还是有蛮大区别的。…

Python中对基本文件操作

1.文件的作用 保存数据放在磁盘中 2.打开文件 fopen(‘文件’,‘w’)或者fopen(‘文件’,‘r’) 3.文件操作 3.1 写数据(write) 如果文件不存在那么创建&#xff0c;如果存在那么就先清空&#xff0c;然后写入数据 对象open(“文件”,w) 对象.write&#xff08;“写入数…

论文浅尝 | 用于推荐的知识自适应对比学习

笔记整理&#xff1a;俞洪涛&#xff0c;浙江大学硕士&#xff0c;研究方向为知识图谱表示学习 链接&#xff1a;https://dl.acm.org/doi/10.1145/3539597.3570483 动机 在基于知识图谱的推荐系统中&#xff0c;用户和项目的交互信息通常会在模型中占主导地位&#xff0c;而KG中…

OPA Gatekeeper对Kubernetes资源操作限制

OPA介绍 Open Policy Agent&#xff08;OPA&#xff0c;发音为“oh-pa”&#xff09;是一个开源的通用策略引擎&#xff0c;它统一了堆栈中的策略执行。OPA 提供了一种高级声明性语言&#xff0c;可让您将策略指定为代码和简单的 API&#xff0c;以从您的软件中卸载策略决策制…

第七十六天学习记录:计算机硬件技术基础:Intel系列微处理器

Intel系列微处理器概述 8086/8088微处理器 8086/8088微处理器是英特尔公司于1978年推出的16位处理器&#xff0c;在80年代是个非常流行的芯片&#xff0c;被广泛用于个人电脑和工作站。它是x86家族处理器的一员&#xff0c;被视为现代PC体系结构的基础。 8086/8088微处理器的…

对耳朵伤害最小的耳机类型,列举几款不入耳的骨传导耳机

骨传导耳机是最近几年火爆起来的耳机&#xff0c;它是将声音转化为不同频率的机械振动&#xff0c;通过人的颅骨、骨迷路、内耳淋巴液、螺旋器、听神经、听觉中枢来传递声波。与普通耳机相比最大的区别是声音不经过外耳道&#xff0c;避免了耳道长时间堵塞导致的中耳炎疾病发生…

基于机器学习算法:朴素贝叶斯和SVM 分类-垃圾邮件识别分类系统(含Python工程全源码)

目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境安装pytesseract注册百度云账号 模块实现1. 数据模块2. 模型构建3. 附加功能 系统测试1. 文字邮件测试准确率2. 网页测试结果 工程源代码下载其它资料下载 前言 本项目采用朴素贝叶斯和支持向量机&#xff08;S…

石化园区宽带自组网应急通信方案

痛点需求 传统的通信手段在可靠性、即时性、安全性、可视化等方面的能力相对较弱&#xff0c;无法从根本上满足石化园区的应急通信需求。结合某大型石化园区实际需求&#xff0c;现亟需建设一套高可靠、高安全、广覆盖、机动灵活且支持多媒体通信的应急通信系统&#xff0c;以…

阿里云建站主机之虚拟主机、轻量或云服务器ECS

阿里云搭建网站主机可以选择云服务器ECS、云虚拟主机或轻量应用服务器&#xff0c;轻量应用服务器2核2G3M带宽一年108元&#xff0c;2核4G4M带宽轻量服务器一年297.98元12个月&#xff0c;云服务器ECS可以选择通用算力型u1&#xff0c;云虚拟主机共享型119元一年起&#xff0c;…

大数据Doris(四十三):kafka 简单json格式数据导入到Doris

文章目录 kafka 简单json格式数据导入到Doris 一、创建 Doris 表 二、创建 Kafka topic 三、创建 Ro

AI实战营:生成模型+底层视觉+AIGC多模态 算法库MMagic

目录 环境安装 黑白照片上色 文生图-Stable Diffusion 文生图-Dreambooth 图生图-ControlNet-Canny 图生图-ControlNet-Pose 图生图-ControlNet Animation 训练自己的ControlNet 环境安装 mim install mmagicpip install opencv-python pillow matplotlib seaborn tqdm …

阿里二面:使用 Nacos 做注册中心怎么做优雅发布?

大家好&#xff0c;我是君哥。 今天来聊一聊使用 Nacos 做注册中心怎么做优雅发布。 跟其他的注册中心一样&#xff0c;Nacos 作为注册中心的使用如下图&#xff1a; Service Provider 启动后注册到 Nacos Server&#xff0c;Service Consumer 则从 Nacos Server 拉取服务列表…

Unsafe类的使用

目录 一、Unsafe是什么&#xff1f;二、Unsafe对象的获取三、CAS1、相关方法2、demo 四、数组操作五、内存分配六、线程调度 参考于&#xff1a;https://blog.csdn.net/Wisimer/article/details/115220750 一、Unsafe是什么&#xff1f; Unsafe是jdk提供的一个直接访问操作系…

k8s 集群部署尝试

K8S 部署方式有很多&#xff0c;有的方式不太友好&#xff0c;需要注意很多关键点&#xff0c;有的方式对小白比较友好&#xff0c;部署简单方便且高效 二进制源码包的部署方式 使用 二进制源码包的方式部署会比较麻烦&#xff0c;大概分为如下几步&#xff1a; 获取源码包部…

基于abaqus的Huang晶体塑性UMAT改VUMAT

黄永刚院士编写的单晶晶体塑性UMAT&#xff0c;主要用于在Abaqus有限元仿真中进行单晶及多晶晶体塑性变形的计算&#xff0c;是许多科研工作者学习晶体塑性模拟的教学资源。可以在其基础上对硬化模型进行修改&#xff0c;甚至引入损伤。 UMAT主要应用于隐式分析&#xff0c;而…

力扣动态规划专题(二)01背包 416. 分割等和子集 1049.最后一块石头的重量II 494. 目标和 474. 一和零 步骤及C++实现

文章目录 01背包二维dp数组一维dp数组 滚动数组 416. 分割等和子集1049.最后一块石头的重量II494. 目标和474. 一和零 01背包 完全背包的物品数量是无限的&#xff0c;01背包的物品数量只有一个。 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]&#xf…

基于ArcGIS的nc(NETCDF)转tif格式

软件版本&#xff1a;ArcMap10.4.1 nc(NETCDF)是一组独立于机器的软件库支持创建、访问和共享面向阵列的数据格式科学数据&#xff0c;它也是共享科学数据的社区标准。&#xff08;摘自Unidata官网&#xff09;&#xff0c;被广泛应用于大气、海洋、水文等领域&#xff0c;是我…

stm32读取BH1750光照传感器

stm32读取BH1750光照传感器 一.序言二.BH1750指令三.IIC协议四.代码实例4.1 bh1750.c源文件4.2 bh1750.h头文件 一.序言 BH1750是用IIC协议进行数据传输的。有SCL,SDA&#xff0c;VCC,GND四根线。下图是原理图 二.BH1750指令 我们先看芯片手册的操作指令&#xff08;下图&a…