前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Golang语言情怀--第129期 全栈小游戏开发:第20节:刚体碰撞检测

Golang语言情怀--第129期 全栈小游戏开发:第20节:刚体碰撞检测

作者头像
李海彬
发布2024-11-07 17:19:24
发布2024-11-07 17:19:24
7600
代码可运行
举报
文章被收录于专栏:Golang语言社区Golang语言社区
运行总次数:0
代码可运行

目前自行研发的《荒野坦克》正在完成最终测试,所以这段时间一直没有怎么更新,后面会定期更新我们再开发中实际遇到的问题,和如何解决的分享出来;

本期主要先简单的说下碰撞,creator的碰撞检测系统分为碰撞检测系统和物理碰撞检测系统两个模块,并且这两个模块是相互独立的(这边主要是非物理碰撞检测系统)

1、在制作碰撞检测系统的时候要对物体进行分组,即指定节点的分组与分组的碰撞矩阵

  a、查看和添加分组=>项目=>项目设置=>分组管理里面进行设定

  b、添加分组(注意添加一个分组,里面有对应的序号名字

  c、指定节点的分组与分组的碰撞矩阵,如下图:

  以上表示 player表示玩家,prop表示道具,以上的矩阵表示玩家与道具发生碰撞会触发事件,其他的碰撞不会有事件被触发。

2、给年绑定的目标节点添加碰撞器

  a、选定目标节点配置分组

  b、在添加组件处选择添加碰撞组件(如下图)

  Box Collider表示方形碰撞器

  Circle Collider 表示圆形碰撞器

  Polygon Collider 表示自定义图形的碰撞器

  c、选择好形状后,钩选中Editing处进行大小的编辑,注意:多边形在做碰撞检测的时候性能会差,所以能用圆形或者方形的,一般用圆形或者方形

3、在代码中开启碰撞检测系统(默认的碰撞检测是关闭的),开启和关闭碰撞检测的调试

  a、碰撞检测系统的配置,建立一个script文件,绑定到canvas根目录下来配置碰撞检测的参数设置

  var manager=cc.director.getCollisionManager(); // 获取碰撞检测类

  manager.enabled=true //开启碰撞检测

  manager.enabledDebugDraw=true //显示碰撞检测区域

  具体如下代码:

代码语言:javascript
代码运行次数:0
复制
cc.Class({
    extends: cc.Component,

    properties: {
        is_enable: true,    //是否开启碰撞检测系统
        is_debug: false     //是否显示碰撞检测区域
    },

    onLoad() {
        if (this.is_enable) {
            let manager = cc.director.getCollisionManager();
            manager.enabled = true;     //开启碰撞检测
            if (this.is_debug) {
                manager.enabledDebugDraw = true;   //显示碰撞检测区域
            }
        }
    }
});

b、碰撞检测系统的API接口

  onCollisionEnter:function(other,self){} => 当两物体刚发生碰撞时被触发

  onCollisionStay:function(other,self){} => 当两物体发生碰撞后,并且有交集的时候被触发

  onCollisionExit:function(other,self){} => 当两物体发生碰撞后,并且在离开的那一刻被触发

所对应的方法脚本应该被绑定在执行的物体上

代码语言:javascript
代码运行次数:0
复制
cc.Class({
    extends: cc.Component,
    properties: {},
    start() {

    },
    onCollisionEnter(other, self) {
        console.log(other, self);
    },
    onCollisionStay(other, self) {
        console.log('现在正在有交集');
    },
    onCollisionExit(other, self) {
        console.log('现在刚离开')
    }
});

这样就可以在所对应的函数里面执行相应的方法了。

同学们,兴趣是最好的老师;只争朝夕,不负韶华!加油!

参考资料:

Go语言中文文档

http://www.golang.ltd/

Golang语言情怀

ID:wwwGolangLtd

www.Golang.Ltd

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-08-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言情怀 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档