初探 Cocos Creator: 碰撞与物理系统
前言
不知道你刚开始玩碰撞时,会不会遇到始终无法触发碰撞事件?玩物理系统时,自由落体的刚体会穿过 “地面” 刚体等情况?没错我全都遇到过,那么下面我就用红蓝色方块,简单实战一下 Cocos Creator 的碰撞与物理系统。

场景创建
场景很简单,一个白色背景,两个红蓝色玩家,和一个绿色大草地。创建的方式也很简单,全部采用 Sprite 单色。
节点创建
层级管理器 ->Canvas 右键 -> 创建节点 -> 创建渲染节点 ->Sprite(单色)。

颜色填充
在属性检查器,找到 Node 下的 Color,选择色盘里的一颜色即可。
分组
由于物理和碰撞中都要用到,这里就提前给两个玩家和绿草地创建分组并分配好。在属性检查器的 Node 中,找到 Group 点击编辑再添加,如下图。

碰撞匹对
将三个分组进行碰撞的匹对,一定要勾选这个,不然后面测试碰撞无法触发回调,而是直接穿过另一个物体。

碰撞系统测试
碰撞组件添加
碰撞组件有三种,Box(盒状)、Circle(圆形)、Polygon(多边形),可以根据不同的物体形状选择对应组件类型,比如像赛车的就可以选盒状,合成西瓜的那种就可以选圆形。在层级管理器中选中节点,进入属性检查器,添加组件,选择碰撞组件,Box Collider。

参数介绍(Box)
Tag: 用于给在同一节点下,标识不同碰撞组件的
Offset: 碰撞的中心点位置,用于给碰撞范围定位
Size: 默认是物品节点的大小,其实是物体碰撞的范围大小

脚本测试
创建脚本,开启碰撞监听和碰撞范围绘制 Debug,update 中添加红色方块向右移动,设置碰撞产生的回调。最后拖入节点的属性面板中,前提相关物品都添加了碰撞组件,并且也勾选了碰撞匹对。
const {ccclass, property} = cc._decorator;@ccclass
export default class NewClass extends cc.Component {onLoad() {}start() {// 碰撞系统(绘制和监听开启)var manager = cc.director.getCollisionManager();manager.enabled = true;manager.enabledDebugDraw = true;manager.enabledDrawBoundingBox = true;}update(dt) {this.node.x += dt * 50;}/*** 当碰撞产生的时候调用* param {Collider} other 产生碰撞的另一个碰撞组件* param {Collider} self 产生碰撞的自身的碰撞组件*/onCollisionEnter(other, self) {console.log("red_collision_enter_1");}/*** 当碰撞产生后,碰撞结束前的情况下,每次计算碰撞结果后调用* @param {Collider} other 产生碰撞的另一个碰撞组件* @param {Collider} self 产生碰撞的自身的碰撞组件*/onCollisionStay(other, self) {console.log("red_collision_stay_2");}/*** 当碰撞结束后调用* @param {Collider} other 产生碰撞的另一个碰撞组件* @param {Collider} self 产生碰撞的自身的碰撞组件*/onCollisionExit(other, self) {console.log("red_collision_exit_3");}}
物理系统测试
物理碰撞组件添加
选择物理组件下的 Box(添加组件 -> 物理组件 ->Collider->Box),碰撞 + 刚体。参数就不介绍了,在编辑器里悬浮文字就可以看到用法描述,不过 刚体(RigidBody)的 “Type” 需要注意一下。

脚本测试
脚本中开启物理系统才可以看到自由落体效果,而碰撞监听需要在属性检查器的刚体中 “Enabled Contact Listen” 开启。
const {ccclass, property} = cc._decorator;@ccclass
export default class NewClass extends cc.Component {onLoad() {// 开启物理系统cc.director.getPhysicsManager().enabled = true;// 物理物品绘制/*cc.director.getPhysicsManager().debugDrawFlags = cc.PhysicsManager.DrawBits.e_aabbBit |cc.PhysicsManager.DrawBits.e_pairBit |cc.PhysicsManager.DrawBits.e_centerOfMassBit |cc.PhysicsManager.DrawBits.e_jointBit |cc.PhysicsManager.DrawBits.e_shapeBit;*/}start() {}update(dt) { }/**刚体的属性Enabled Contact Listen必须开启**/// 只在两个碰撞体开始接触时被调用一次onBeginContact(contact, selfCollider, otherCollider) {console.log("~collider start1111111111111111111111~");}// 只在两个碰撞体结束接触时被调用一次onEndContact(contact, selfCollider, otherCollider) {console.log("~collider end2222222222222222222222222~");}// 每次将要处理碰撞体接触逻辑时被调用onPreSolve(contact, selfCollider, otherCollider) {console.log("~pre collider3333333333333333333333333~");}// 每次处理完碰撞体接触逻辑时被调用onPostSolve(contact, selfCollider, otherCollider) {console.log("~solve44444444444444444444444444444444~");}}

相关文章:
初探 Cocos Creator: 碰撞与物理系统
前言 不知道你刚开始玩碰撞时,会不会遇到始终无法触发碰撞事件?玩物理系统时,自由落体的刚体会穿过 “地面” 刚体等情况?没错我全都遇到过,那么下面我就用红蓝色方块,简单实战一下 Cocos Creator 的碰撞与…...
Vue组件封装方案对比——v-if方式与内置component方式
近期在准备搭建一个通用组件库,而公司现有的各个系统也已有自己的组件库只是没抽离出来,但是目前有两套不同的组件封装方案,所以对于方案的选择比较困惑,于是对两种方式进行了对比,结合网上找到的一些开源组件库进行分…...
python与excel第四节 批量新增、删除工作表
在多个工作簿中批量新增工作表 假设,一个文件夹下面有多个excel文件,需要再每个excel文件中增加一个sheet。 例子: import osimport xlwings as xw file_path D:\\TEST\\python与excelfile_list os.listdir(file_path) sheet_name 产品…...
计算机网络——计算机网络体系结构
计算机网络——计算机网络体系结构 计算机网络体系结构的由来正确认识分层协议与层次划分著名的几个体系结构OSI体系结构TCP/IP体系结构5层体系结构 我们今天来了解一下计算机网络体系结构: 计算机网络体系结构的由来 俗话说,“没有规矩,不…...
近期常用linux命令总结
linux mv [options] source dest : 移动文件 cp [options] source : 复制文件 ps -a: 列出所有进程 ps -ef | grep 进程关键字: 查找指定进程 (-e 显示所有进程 -f 全格式) docker docker images 显示所有镜像 docker pull [IMAGE_NAME] : 拉取某个镜像…...
变配电站配电监控解决方案--变电站综合自动化系统
变电站综合自动化系统 Acrel-1000变电站综合自动化监控系统是我司根据电力系统自动化及无人值守的要求,总结国内外的研究和生产的先进经验专门研制出的新一代电力监控系统。本系统具有保护、遥测、遥信、遥脉、遥调、遥控功能,可实现无人或少人值守功能…...
【ollama】linux、window系统更改模型存放位置,全网首发2024!
首先是window系统 so easy 直接进入系统环境变量添加就行 其次是linux系统 全靠自己试出来的,去Ollama官网找半天文档不知道在哪,而且linux也没有说:【 https://github.com/ollama/ollama/blob/main/docs/README.md https://github.com/o…...
Spring 被打暴了! vs Javalin vs Solon
测试仅供参考。不同的环境、场景,效果会不同。 测试记录: 项目SpringBoot2SpringBoot3JavalinSolon运行时java 17java 17java 17java 17测试前状态/内存101.1Mb112.9Mb66.1Mb45.6Mb测试后状态/内存996.3Mb326.9Mb457.3Mb369.2Mb测试后状态/并发2万2.6万…...
IDEA中快速配置Git
Git介绍: Git下载 idea中配置Git...
vscode用SSH远程开发c语言
vscode配置远程 这里我使用虚拟机进行展示,首先需要你的虚拟机安装好ssh 没安装好就执行下面的命令安装并开启服务 sudo apt-get install ssh sudo service ssh start ps -e | grep sshvscode安装 remote-ssh扩展 点击左下角的远程连接,我这里已经连接…...
鸿蒙Next 支持数据双向绑定的组件:Checkbox--Search--TextInput
Checkbox $$语法,$$绑定的变量发生变化时,会触发UI的刷新 Entry Component struct MvvmCase { State isMarry:boolean falseStatesearchText:string build() {Grid(){GridItem(){Column(){Text("checkbox 的双向绑定")Checkbox().select($$…...
跨越时空的纽带:探索Facebook如何连接人与人
引言 Facebook作为全球最大的社交媒体平台之一,已经成为了人们日常生活中不可或缺的一部分。它不仅仅是一个社交网络,更是连接人与人、人与世界的纽带。在这篇文章中,我们将深入探讨Facebook如何跨越时空,连接人与人之间的关系&a…...
LabVIEW湍流等离子体束热效率优化
LabVIEW湍流等离子体束热效率优化 利用LabVIEW虚拟仪器技术,对湍流等离子体束的热效率进行了实时监测与优化,提高其在材料处理领域的应用效率和精度。通过双进气湍流等离子体发生器,实现了在不同工作参数下对热效率的实时在线监测࿰…...
21个 JVM 技术点详解(附面试解答)
最近兄弟们面试,都逃不过被 JVM 问题轰炸的命运,为啥面试官喜欢拿 JVM 说事呢?V 哥认为,除了要问倒你,就是要压你薪水,咱绝对不能怂,俗话说的好:兵来将挡,水来土掩&#…...
mysql逗号分隔字段拆成行简述
概述 在实际业务中总有一些字段内容是逗号分隔的,然后后续业务需要扩展时就很难受; 所以一般在这种情况下都是需要建立关联表,将字段内容拆分; 当前使用mysql版本 8.0.32 拆分demo 这里要注意mysql.help_topic表的记录行数&a…...
最新梨花带雨网页音乐播放器二开优化修复美化版全开源版本源码下载
最新梨花带雨网页音乐播放器二开优化修复美化版全开源版本源码下载 梨花带雨播放器基于thinkphp6开发的XPlayerHTML5网页播放器前台控制面板,支持多音乐平台音乐解析。二开内容:修复播放器接口问题,把接口本地化,但是集成外链播放器接口就不本地化了,我花钱找人写的理解下…...
golang 操作redis
1. redis操作需要引入 github.com/gomodule/redigo/redis 包 go get github.com/gomodule/redigo/redis 2.封装redis操作对象,使用时便可调用 redis的 地址、端口、密码 放配置文件,用config获取即可 package databaseimport ("gin/config"…...
macOS - 获取硬件设备信息
文章目录 1、CPU获取方式 一: system_profiler获取方式二:sysctl, machdepmachdep 2、内存3、硬盘4、显卡5、声卡6、光驱7、系统序列号8、型号标识符9、UUID 等信息 10. 计算机名称 1、CPU 获取方式 一: system_profiler % syst…...
突破编程_C++_STL教程( queue 的基础知识)
1 std::queue 概述 std::queue 是 C 标准模板库(STL)中的一种容器适配器,它提供了队列(Queue)这种数据结构的功能。队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作…...
Hystrix 容错机制数据监控可视界面无法加载
在微服务项目中创建一个Hystrix模块配置好pom和yml文件但是在加载可视化界面的时候报如下问题 第一个界面报的错误 第二个界面报错误 熔断监控图形化界面报错Unable to connect to Command Metric Stream 解决方案 在yml文件在加如下代码 代码块 hystrix:dashboard:proxy…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
