首页 > 其他分享 >初探 Cocos Creator: 碰撞与物理系统

初探 Cocos Creator: 碰撞与物理系统

时间:2024-03-20 21:25:29浏览次数:20  
标签:Cocos Collider log Creator cc 碰撞 初探 组件 console

前言

不知道你刚开始玩碰撞时,会不会遇到始终无法触发碰撞事件?玩物理系统时,自由落体的刚体会穿过 “地面” 刚体等情况?没错我全都遇到过,那么下面我就用红蓝色方块,简单实战一下 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 {

    onl oad() {
        
    }

    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 {

    onl oad() {
        // 开启物理系统
        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,Collider,log,Creator,cc,碰撞,初探,组件,console
From: https://www.cnblogs.com/zerofc/p/18086111

相关文章

  • 先进电机技术 —— 电机噪声分析与优化初探
     一、背景电机噪声的危害主要体现在以下几个方面:听力受损:长时间暴露在高强度的电机噪声环境中,容易导致听力受损,影响人们的日常生活和交流。据临床医学统计,如果长期生活在80dB以上的噪声环境中,约有50%的人容易失聪、失鸣。影响心理健康:电机噪声的高频、高强度特性可能导致人......
  • Unity新版UI系统UI Toolkit初探
    目前Unity中应用最广泛的官方界面系统是UnityUI,也就是通常说的UGUI。这个系统功能强大,官方支持较好,并且基于GameObject的设计和Unity开发的其他方面是一致的,便于理解和使用。但是,成也GameObject败也GameObject,因为每一个界面元素都要一个GameObject挂上好几个Component,当界面上的......
  • 三种方式,浅谈 Cocos Creator 的动画添加
    前言虽然Cocos的官方文档对动画系统做了较详细的介绍,但是对于刚接触的同学(比如我)来说还是不太友好。尽管如此,我就按文档加社区帖子一起实践了一下。为了方便忘记后能快速捡起,所以就用我的方式结合使用场景,简单介绍一下CocosCreator动画添加的三种方式。属性动画这个是Co......
  • Cocos实例1:实现平面游戏中的滚动地图
    Cocos实例:实现平面游戏中的滚动地图1.应用: 在2D游戏或某些UI界面中,会经常遇到一些循环滚动的背景或元素。例如飞机大战的背景、冒险岛的双层循环滚动背景,模拟视觉效果上角色在无限背景地图中运动。2.实现原理 需要一张上下或左右在顺序排列时可以无缝衔接的背景图片,搭......
  • 后端搞 Cocos 小游戏开发的三点避坑指北
    前言    先说一下我为什么要弄小游戏吧,首先无关工作,也无关兴趣,就只是想在副业里探索一下。没错就是做一个单机的小游戏上架到平台试一下水(薅广告费),不过说实话入局有点晚。    早在2019年的时候,我也折腾过白鹭引擎还弄过小demo,当时上架平台也简单。但是不知道为......
  • 深度学习——LeNet卷积神经网络初探
    LeNet--卷积神经网络初探模型介绍:简单介绍:从网络结构可以看出LeNet对于现在的大模型来说是一个非常小的神经网络,他一共由7个层顺序连接组成。分别是卷积层、pooling层、卷积层、pooling层和三个全连接层。用现代的深度学习框架来实现代码如下:代码实现和解读:net=nn.Sequent......
  • Intel Pin初探
    1、在/home/hf/Desktop/pin/pin-3.30-98830-g1d7b601b3-gcc-linux/source/tools/ManualExamples/目录下写自己的pintools去到该目录cd/home/hf/Desktop/pin/pin-3.30-98830-g1d7b601b3-gcc-linux/source/tools/ManualExamples/编写pintoolsvimMycmp.cpp下面是Mycmp.cpp内容......
  • 从CF1941D与1741E初探可达性DP
    Problem-D-Codeforces用记忆化搜索过的,然而DP能快300ms记忆化搜索|\(\texttt{set}\)模拟核心思路一致,都是通过定义一个状态,即在第t次到达第now点来去重剪枝记忆化搜索intn,m,x;std::vector<std::pair<int,char>>step;std::set<int>S;intgetClock(intx,......
  • 第五十六回 徐宁教使钩镰枪 宋江大破连环马-飞桨图像分类套件PaddleClas初探
    宋江等人学会了钩镰枪,大胜呼延灼。呼延灼损失了很多人马,不敢回京,一个人去青州找慕容知府。一天在路上住店,马被桃花山的人偷走了,于是到了青州,带领官兵去打莲花山。莲花山的周通打不过呼延灼,于是李忠去请二龙山的来帮忙。杨志、鲁智深和武松三个都来帮忙,呼延灼打不过,只好退回青......
  • 阿里通义千问大模型初探
    参考文档:https://help.aliyun.com/zh/dashscope/developer-reference/quick-start一、创建API-KEY控制台地址:https://dashscope.console.aliyun.com/apiKey二、使用javaSDK接入全量输出:根据用户的prompt,一次性将结果输出给用户增量输出:根据用户的prompt,一个字一个字的输出......