Cocos Creator 物理小游戏(3)
来源:互联网 编辑:wan玩得好手游小编 更新:2024-11-01 19:16:59 人气:
这里有一个完整的篮球小游戏,效果非常不错,看完文章可以体验一下:
链接地址:http://game.ixuexie.com/fkgl,你也可以点击【阅读原文】进入链接!
1. 通用物理组件
-
PhysicsManager:物理引擎管理器,使用它无需编程即可开启关闭物理引擎,并提供刚体的着调试开关。
物理引擎管理器
PhysicsVelocity: 物理速度控制组件,提供了一个force函数方便使用cc.Button在编辑器中调用,为刚体施加外力。
PhysicsColliderNotification: 物理碰撞通知组件,使用它可以让非物理组件或脚本能收到物理碰撞事件。
ScoreNotificationHandle:得分通知处理组件,该组件监听PhysicsColliderNotification发出的事件通知,更新Label文本。
ScoreVerifyNotificationHandle:带验证功能的得分通知处理组件,它可以监听PhysicsColliderNotification发出的事件,检查刚体碰撞过程中的方向(从上向下、从上向上、从左向右、从右向左),请看下图:
2. 物理引擎管理器
属性设计
/**
* PhysicsManager.js
*/
cc.Class({
extends: cc.Component,
properties: {
active: {
default: true,
tooltip: '是否启用物理引擎',
},
aabb:{
default: true,
tooltip: '是否显示包抄盒',
},
pair: {
default: true,
tooltip: '我也没看出来是什么用:-('
},
centerOfMass: {
default: true,
tooltip: '是否显示中心点'
},
joint: {
default: true,
tooltip: '是否显示关节连接线'
},
shape: {
default: true,
tooltip: '是否填充形状'
},
mouseJoint: {
default: false,
tooltip: '是否开启鼠标关节,可以拖动动态刚体'
}
},
...
}
开启物理引擎
/**
* PhysicsManager.js
*/
cc.Class({
extends: cc.Component,
properties: {
...
},
/**
*组件激活
**/
onEnable() {
//从导演对象上获取引擎物理管理器
let physicsManager = cc.director.getPhysicsManager();
//如果物理引擎重复开启,给出一个警告提示
if (physicsManager.enabled && this.active) {
cc.warn('The physical system is enabled!');
}
//开启或关闭物理系统
physicsManager.enabled = this.active;
//如果是关闭物理引擎,退出
if (!this.active) {
return;
}
//调试选项
...
},
/**
*组件禁用
**/
onDisable() {
//组件失效时关闭物理引擎
cc.director.getPhysicsManager().enabled = false;
}
});
物理调试开关
/**
* PhysicsManager.js
*/
cc.Class({
extends: cc.Component,
properties: {
....
},
onEnable() {
....
//设置调试标志
let DrawBits = cc.PhysicsManager.DrawBits;
if (CC_PREVIEW) {
physicsManager.debugDrawFlags =
(this.aabb && DrawBits.e_aabbBit) |
(this.pair && DrawBits.e_pairBit) |
(this.centerOfMass && DrawBits.e_centerOfMassBit) |
(this.joint && DrawBits.e_jointBit) |
(this.shape && DrawBits.e_shapeBit);
}
...
},
...
});
动态刚体自由拖拽
/**
* 物理引擎管理组件,开启各种调试
*/
cc.Class({
extends: cc.Component,
properties: {
...
mouseJoint: {
default: false,
tooltip: '是否开启鼠标关节,可以拖动动态刚体'
}
},
onEnable() {
...
this._setMouseJoint();
},
_setMouseJoint() {
//鼠标可拖刚体
if(this.mouseJoint && this.active) {
let node = this.node;
//获取节点上的刚体组件
let rigidBody = node.getComponent(cc.RigidBody);
//不存在添加一个
if (!rigidBody) {
rigidBody = node.addComponent(cc.RigidBody);
}
//获取组件上的鼠标关节组件
let mouseJoint = node.getComponent(cc.MouseJoint);
//不存在添加一个
if (!mouseJoint) {
mouseJoint = node.addComponent(cc.MouseJoint);
}
//设置为静态刚体
rigidBody.type = cc.RigidBodyType.Static;
//设置鼠标范围
mouseJoint.mouseRegion = node;
}
},
...
});
3. 小结
欢迎玩家到【 wan玩得好手游】查看最新变态版手游攻略,只需要在百度输入【 wan玩得好手游】就可以浏览最新上线送满vip的变态手游攻略了,更多有关手游的攻略和资讯,敬请关注玩得好手游网!