关于CocosCreator 3.x学习中的问题(对碰撞体的sensor进行更改)

关于CocosCreator学习中的问题(对碰撞体的sensor进行更改)

从使用cocoscreator以来,我一直都很迷。曾多次遇到这样一类问题——在代码里对某个节点的组件中某些值进行更改,在console中打印出来的数值是改变了,但实际呈现出来的效果却没有改变。简言之,就是数值变了结果没变。

有一些这类问题总是默默地就解决了(没错,我也不知道问题在哪,有时候重启能解决,更离谱的是有一次的解决居然就仅仅只是加了一句console.log(),然后将这句删除后,也在没出过问题)。

进入正题,对于碰撞体中的sensor的修改也有一定问题,最开始进行测试的时候,在代码中直接设置,如:‘this.collider.sensor = true’,这样就能直接将碰撞器改为触发器,如果值为false则改为碰撞器。

理论如上,下面说说我想要的效果:

当游戏中人物出狱特定环境下时,需要取消碰撞,但是修改地图很不现实,于是我就把主意打到人物身上。理论是,当人物满足特定条件是,将人物身上的碰撞器改为触发器,一定时间后,再将触发器还原为碰撞器。

理论代码如下:

PlayerDown(time:number){
        if(this.playerCollider){
            this.playerAnimation?.PLayerJump();//这里是调用的播放动画的方法,不用管(下同)
            this.playerCollider.sensor = true;//修改collider的sensor值(下同)
            this.scheduleOnce(()=>{
                if(this.playerCollider){
                    this.playerCollider.sensor = false;
                }
            },time)//计时器(规定时间内还原人物碰撞器)(下同)
        }
    }

刚开始测试时,这样使用并没有出现问题,也能达到我想要的效果。但是因为当时我的功能没做完,就又加了些东西在人物控制的脚本里(射线检测)。好家伙,不加不要紧,加了之后上面的代码就直接失效了(也不能说完全失效,至少在console中打印出来的this.playerCollider.sensor的值是变了的,但是运行中是失效了的)。

到这里,自然是先检查我的逻辑,至少我是觉得我的逻辑没什么问题(手动滑稽)。然后这个问题就卡住我了,然后今天莫名突然想到collider有一个apply()的方法,我就想不会改变了值还要应用一下才行吧。试试咯,还能怎样,路都走到这了,结果一试人都给我整傻了,好嘛,解决了。

代码如下(其实没啥变化,就加了两条语句):

 PlayerDown(time:number){
        if(this.playerCollider){
            this.playerAnimation?.PLayerJump();
            this.playerCollider.sensor = true;
            this.playerCollider.apply();//collider的apply()方法,个人理解为应用修改
            this.scheduleOnce(()=>{
                if(this.playerCollider){
                    this.playerCollider.sensor = false;
                    this.playerCollider.apply();
                }
            },time)
        }
    }

总结:只修改collider里的sensor的值,或许可以实现效果,但是保险起见还是加一个apply()的方法,个人理解中apply()大概是一个保存修改,并应用修改的方法。但是在其他地方使用apply()过程中也出现过报错,当时没注意,不过大概是有些东西没获取到吧,检查检查说不定能找出来呢。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Cocos Creator是一个游戏开发引擎,可以用于创建各种类型的游戏,包括桌球游戏。在Cocos Creator实现桌球游戏需要考虑几个方面。首先是可碰撞的设置,包括白球、其他球、球袋、球杆和球桌。可以使用Cocos Creator内置的操作设置来创建可产生碰撞的节点,并添加刚组件来选择节点的形状和类型。例如,球袋需要设置为sensor类型,以便只产生碰撞监测而不产生碰撞效果。\[1\] 其次是球杆的移动和拉伸。球杆需要随着白球为心移动,并设置最小距离以避免接触白球。可以通过获取点击点和白球心的向量来实现球杆的移动和拉伸,并根据向量的长度改变球杆的冲量,以及根据向量和水平轴的夹角来旋转球杆。\[1\] 另外,白球需要监听击球事件,并根据击球力度和坐标计算出白球被击打后的线速度。当白球停止运动时,即刚的awake状态为false时,可以发送事件通知球杆节点显示并可以击球。\[2\] 最后,可以通过可视化编辑来方便地创建桌球游戏。在Cocos Creator,可以勾选Active开启物理系统,并设置Gravity重力为(0,0),以确保小球不受重力影响向下坠落。同时,可以创建桌面节点来放置球桌和其他游戏元素。\[3\] 综上所述,使用Cocos Creator可以实现桌球游戏,并通过设置碰撞、球杆的移动和拉伸、白球的击球事件监听以及可视化编辑来完成游戏的开发。 #### 引用[.reference_title] - *1* [cocos creator 台球小游戏](https://blog.csdn.net/sinat_40943484/article/details/82686425)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Cocos Creator入门实战:桌球小游戏](https://blog.csdn.net/zzx023/article/details/90035153)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [​Cocos Creator入门实战:桌球小游戏](https://blog.csdn.net/6346289/article/details/100037342)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值