CocosCreator物理系统注意事项分享

CocosCrator物理系统注意事项

cocosCreator 物理系统知识梳理(部分)


如有独特见解,欢迎留言。


前言

使用物理系统基本注意事项

相信很多对于物理系统不熟悉的同学,肯定都很苦恼,为什么代码写上去了,却没有想要的效果,看看下面文章,希望对你有所帮助!


提示:以下是本篇文章正文内容,下面案例可供参考

常见问题一:为什么我用了物理碰撞组件,却没有反应?

检查脚本是否开启了物理系统(脚本要挂载到场景任意节点下,否则脚本都没有执行,怎么会有效?)

onLoad() {
   // 开启物理系统(必须写在onLoad方法内,否则会无效)
   cc.director.getPhysicsManager().enabled = true;
}

常见为题二:碰撞回调不知道如何调用?没反应?处理细节?

首先要去实现如下碰撞回调方法:

代码如下(示例):

const { ccclass, property } = cc._decorator;

@ccclass
export default class Example extends cc.Component {

    // 只在两个碰撞体开始接触时被调用一次
    onBeginContact (contact, selfCollider, otherCollider) {
    }

    // 只在两个碰撞体结束接触时被调用一次
    onEndContact (contact, selfCollider, otherCollider) {
    }

    // 每次将要处理碰撞体接触逻辑时被调用
    onPreSolve(contact, selfCollider, otherCollider) {
    }

    // 每次处理完碰撞体接触逻辑时被调用
    onPostSolve (contact, selfCollider, otherCollider) {
    }
    
    // selfCollider:指的是回调脚本的节点上的碰撞体
	// otherCollider:指的是发生碰撞的另一个碰撞体
	// concat:指的是最主要的碰撞信息

	// 如果需要查看这三个参数具体包含什么,可以在代码里面打印,这里就不细说了。
}

注意:这个脚本一定要挂载到刚体节点上,否则会无效!
友情链接:官方文档(看完就会)

常见问题三:修改碰撞体参数无效?卡死?

修改碰撞体参数时,一定要调用碰撞体的apply(),否则就会出现修改无效。
代码如下(以圆形碰撞体为示例):

	/**
     * 修改信息
     */
    modifyInformation() {
        /* 偏移量 */
        this.node.getComponent(cc.PhysicsCircleCollider).offset = cc.v2(10, 10);
        
        /* 密度 */
        this.node.getComponent(cc.PhysicsCircleCollider).density = 100;
        
        /* 摩擦系数 */
        this.node.getComponent(cc.PhysicsCircleCollider).friction = 0.5;
        
        /* 是否取消碰撞效果 */
        this.node.getComponent(cc.PhysicsCircleCollider).sensor = true;
        
        /* 弹性系数 */
        this.node.getComponent(cc.PhysicsCircleCollider).restitution = 10;

        /* 半径 */
        this.node.getComponent(cc.PhysicsCircleCollider).radius = 100;

        /* 最重要的一步,一定要应用!!! */
        this.node.getComponent(cc.PhysicsCircleCollider).apply();
    }

对于卡死的情况,不要在碰撞回调里面修改、应用参数,否则会卡死。


常见问题四:刚体穿透!

相信刚开始解除物理系统的同学都被这个问题折磨,疯狂百度,下面来看看常用的解决办法吧。

1.不要直接操作刚体进行位移(例如直接设置刚体的位置,或者设置x、y,这样很容易造成刚体穿透)。
2.尽量利用刚体自带的设置速度或者扭矩。
3.开启刚体防穿透的bullet属性。
4.代码中自己做控制,防止穿透情况发生。

你可能感兴趣的:(游戏程序,游戏引擎)