1.设置组件: RegidBody
3种方式
Static: 不受重力和速度影响
Kinematic: 受到速度影响 不受重力影响
Dynamic(默认):受到重力和速度影响
2.开启
onLoad () {
console.log("jinlail....")
// 物理系统 需要手动开启
cc.director.getPhysicsManager().enabled=true;
console.log("jinlail....222222222222222")
}
使用
start () { // 物理系统 其实就是模拟显示世界 对于真实世界 就是 重力 + 速度 + 力 // 获得刚体 let rbody=this.getComponent(cc.RigidBody); // 给他一个力 //rbody.applyForce(cc.v2(1000,0),cc.v2(0,0),true); // 三个参数 一个是哪个方向的 一个是作用点 一个是是否唤醒该刚体 // rbody.applyForceToCenter(cc.v2(1000,0),true); // 直接作用在中心点 //给他一个速度 //rbody.linearVelocity=cc.v2(50,0); } // update (dt) {} // 开始碰撞 onBeginContact(contact,self,other){ // 得到碰撞点 let points= contact.getWorldManifold().points; console.log("points "+points); //法线 let normal= contact.getWorldManifold().normal; console.log("normal "+normal); }
传感器
一个物体碰到传感器 会直接穿过去 但是会调用碰撞函数
场景:
当进入地图 会触发遇怪 可以用
射线
const {ccclass, property} = cc._decorator;
@ccclass
export default class NewClass extends cc.Component {
//方向
dir=cc.v2(0,-1);
onLoad () {
// 开启物理引擎
cc.director.getPhysicsManager().enabled=true;
}
start () {
}
update (dt) {
// 前进
this.node.x +=this.dir.x*100*dt;
this.node.y +=this.dir.y*100*dt;
// 前金的时候发出射线进行检测
const a=this.node.y+this.dir.y*100
console.log("this.node.getPosition() "+this.node.getPosition())
console.log("射线的y "+a)
// 发射 射线
var ci= cc.director.getPhysicsManager().rayCast(cc.v2(this.node.position.x,this.node.position.y),cc.v2(this.node.x,this.node.y+this.dir.y*100),cc.RayCastType.Closest);
if(ci.length>0){
console.log(" 碰撞体 "+ci[0].collider.tag)
console.log(" 碰撞位置 "+ci[0].point)
//长度大于0 说明检测到了
this.dir.y*=-1;
}
}
}