cocos creator基础一文通(十四)--场景切换 碰撞系统

553 阅读4分钟

场景切换

场景切换使用了cc.director实例(单例)对象,他是Director类型的单例
Director · GitBook​
docs.cocos.com

一. Director 类型

注意:用 cc.director 代替 cc.Director。 cc.director 一个管理你的游戏的逻辑流程的单例对象。 由于 cc.director 是一个单例,你不需要调用任何构造函数或创建函数, 使用它的标准方法是通过调用: - cc.director.methodName(); 它创建和处理主窗口并且管理什么时候执行场景。 cc.director 还负责: - 初始化 OpenGL 环境。 - 设置OpenGL像素格式。(默认是 RGB565) - 设置OpenGL缓冲区深度 (默认是 0-bit) - 设置空白场景的颜色 (默认是 黑色) - 设置投影 (默认是 3D) - 设置方向 (默认是 Portrait) cc.director 设置了 OpenGL 默认环境 - GL_TEXTURE_2D 启用。 - GL_VERTEX_ARRAY 启用。 - GL_COLOR_ARRAY 启用。 - GL_TEXTURE_COORD_ARRAY 启用。
cc.director 也同步定时器与显示器的刷新速率。 特点和局限性: - 将计时器 & 渲染与显示器的刷新频率同步。 - 只支持动画的间隔 1/60 1/30 & 1/15。

二. 场景切换

1.loadscence(场景名[,回调函数]) //通过场景名称进行加载场景。
    star_btn_click:function(){
        cc.director.loadScene("S002",function(){console.log("场景切换完成了");
        });
    },
2. preloadScence //预加载场景

碰撞系统

Cocos Creator 内置了一个简单易用的碰撞检测系统,支持圆形,矩形以及多边形相互间的碰撞检测。但不是物理碰撞!!!!!! - -! 只能出发碰撞事件,要自己写碰撞逻辑......

一. 碰撞组件

给节点添加碰撞组件
点击editing可以编辑碰撞区域

二. 碰撞分组

碰撞分组在node组件中 group设置
点击编辑可以编辑碰撞分组

三. 碰撞脚本

Cocos Creator 中内置了一个简单易用的碰撞检测系统,他会根据添加的碰撞组件进行碰撞检测。
当一个碰撞组件被启用时,这个碰撞组件会被自动添加到碰撞检测系统中,并搜索能够与他进行碰撞的其他已添加的碰撞组件来生成一个碰撞对。
需要注意的是,一个节点上的碰撞组件,无论如何都是不会相互进行碰撞检测的
1.碰撞检测系统的使用
(1).碰撞系统接口
①.获取碰撞检测系统
var manager = cc.director.getCollisionManager();
默认碰撞检测系统是禁用的,如果需要使用则需要以下方法开启碰撞检测系统
manager.enabled = true;
默认碰撞检测系统的 debug 绘制是禁用的,如果需要使用则需要以下方法开启 debug 绘制:
manager.enabledDebugDraw = true;
如果还希望显示碰撞组件的包围盒,那么可以通过以下接口来进行设置:
manager.enabledDrawBoundingBox = true;
2. 碰撞回调函数
当碰撞系统检测到有碰撞产生时,将会以回调的方式通知使用者,如果产生碰撞的碰撞组件依附的节点下挂的脚本中有实现以下函数,则会自动调用以下函数,并传入相关的参数。
//把下面的函数所在脚本挂在碰撞物上就能自动调用了
(1).碰撞产生时触发 // self:自身的碰撞组件 other:碰的对象的碰撞组件
/**
 * 当碰撞产生的时候调用
 * @param  {Collider} other 产生碰撞的另一个碰撞组件
 * @param  {Collider} self  产生碰撞的自身的碰撞组件
 */
onCollisionEnter: function (other, self) {
    console.log('on collision enter');

    // 碰撞系统会计算出碰撞组件在世界坐标系下的相关的值,并放到 world 这个属性里面
    var world = self.world;

    // 碰撞组件的 aabb 碰撞框
    var aabb = world.aabb;

    // 节点碰撞前上一帧 aabb 碰撞框的位置
    var preAabb = world.preAabb;

    // 碰撞框的世界矩阵
    var t = world.transform;

    // 以下属性为圆形碰撞组件特有属性
    var r = world.radius;
    var p = world.position;

    // 以下属性为 矩形 和 多边形 碰撞组件特有属性
    var ps = world.points;
},
(2). 碰撞过程中 每次计算碰撞都调用
/**
 * 当碰撞产生后,碰撞结束前的情况下,每次计算碰撞结果后调用
 * @param  {Collider} other 产生碰撞的另一个碰撞组件
 * @param  {Collider} self  产生碰撞的自身的碰撞组件
 */
onCollisionStay: function (other, self) {
    console.log('on collision stay');
},
/**
(3). 碰撞结束时调用
 * 当碰撞结束后调用
 * @param  {Collider} other 产生碰撞的另一个碰撞组件
 * @param  {Collider} self  产生碰撞的自身的碰撞组件
 */
onCollisionExit: function (other, self) {
    console.log('on collision exit');
}