【Cocos Creator教程】制作一条可弯曲的、可碰撞的柔软绳子(胎教教学)

我们知道,Cocos Creator内置的物理引擎有RopeJoint组件,可以帮助我们做一根普通的绳子,废话不多说,直接开始。

首先看一下RopeJoint组件的属性:
引擎面板中的RopeJoint
上图中的Connected Body是当前节点连接的锚点,什么意思呢,举个例子:
在这里插入图片描述
上图中的“绳子小节”就是挂载了RopeJoint组件的节点,如果我们让绳子小节的Connected Body为图中红色的锚点(需要挂载RigidBody组件),那么启动物理引擎后,这个黑色的绳子小节就会和红色的锚点绑定在一起,就好像他们之间绑了一根绳子一样。但是要注意,这根绳子是看不见的,它不会和别的刚体产生碰撞,并且这根绳子的长度是根据RopeJoint属性里的Max Length来定的。

也就是说,如果我们要做一个柔软的、可以和其他刚体碰撞的绳子的话,就需要不止一个绳子小节。一种实现思路是:把这根绳子微分成很多个小节,然后将每一个小节之间都用RopeJoint绑定在一起,这样从总体上看它就是一个柔软的绳子了。

接下来手把手教你怎么做这根绳子!

首先在Canvas下新建一个Sprite,取名为ropeCut,这里为了方便我就直接用一个10x10的白色矩形了,你们有更好的素材的话可以自己换。
在这里插入图片描述
给它加上RopeJoint组件:
在这里插入图片描述
在属性面板中什么都不需要修改,我们等会儿在代码里进行修改。
Cocos Creator在你添加了Ropejoint之后会自动帮你加上RigidBody组件(方便)
然后把ropeCut拖进资源管理器里面,生成Prefab。在这里插入图片描述

然后,在Canvas下新建一个Sprite,取名为anchor,当作我们的锚点。我在这里用一个30x30的红色矩形作为Sprite,同样如果你们有自己的素材就替换即可。给它加上RigidBody组件,把Type改为Static。(胎教解释环节:Static表示这个刚体是不受外力的,也就是说无论如何它都是静止的)
在这里插入图片描述
接下来就开始写脚本了。
新建一个rope.js,把它挂载到Canvas上面。

cc.Class({
    extends: cc.Component,

    properties: {
        
        //这一整根绳子的锚点
        anchor:{
            default: null,
            type: cc.Node,
        },

        //存放每一个绳子小节(预制体)
        ropeCutPrefab:{
            default: null,
            type: cc.Prefab,
        },

        softDegree: 0, //绳子总的小节数,越多则绳子越柔软
    },


    onLoad () {
        cc.director.getPhysicsManager().enabled = true; //开启物理引擎
    },

    start () {
        var ropeCutArray = new Array(); //存放所有绳子小节的数组

        //遍历这个数组
        for(var i = 0; i < this.softDegree; i++){
            ropeCutArray[i] = cc.instantiate(this.ropeCutPrefab); //生成新的绳子小节存放到数组中
            this.node.addChild(ropeCutArray[i]); //将绳子小节添加为Canvas的子节点,这里的this.node指的是Canvas

            //如果是第一个绳子小节,那么它的Connected Body就应该是anchor
            if(i == 0){
                ropeCutArray[i].getComponent(cc.RopeJoint).connectedBody = this.anchor.getComponent(cc.RigidBody);
                //修改绳子的最大长度
                ropeCutArray[i].getComponent(cc.RopeJoint).maxLength = (this.anchor.width + ropeCutArray[i].width) / 2; 
            }
            //如果是第2~n个绳子小节,那么它的Connected Body就应该是上一个绳子小节,直接数组索引-1就可以得到
            else{
                ropeCutArray[i].getComponent(cc.RopeJoint).connectedBody = ropeCutArray[i - 1].getComponent(cc.RigidBody);
                //修改绳子的最大长度
                ropeCutArray[i].getComponent(cc.RopeJoint).maxLength = ropeCutArray[i].width;
            }

            //修改完RopeJoint的属性之后一定要调用apply()方法,不然所有修改都无效!
            ropeCutArray[i].getComponent(cc.RopeJoint).apply();
        }
    },

    // update (dt) {},
});

代码的说明都写在注释里了(已经很详细了),如果还有看不懂的话欢迎留言~

然后,我们去引擎界面,在Canvas的属性里挂载上相应的节点:
在这里插入图片描述
SoftDegree就是绳子小节的总数,越多则绳子越长、越柔软,反之越短。

接下来我们测试一下:在属性面板里把SoftDegree改为10,运行:
在这里插入图片描述
(我懒得做GIF了,大家自己动动手可以看到效果,亲测可以运行)
可以看到这根绳子就挂在红色的锚点上。

再试试把SoftDegree改为20,运行:
在这里插入图片描述
看到绳子更长、更软了。

我们可以宣布,绳子制作成功了!

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值