Phaser常用API整理:物理引擎
game.physics.startSystem(Phaser.Physics.ARCADE);
2.在精灵上开启物理引擎
var game=new Phaser.Game();
//开启物理引擎
game.physics.startSystem(Phaser.Physics.ARCADE);
var sprite=game.add.sprite();
//在sprite上启用arcade物理引擎
game.physics.enable(sprite,Phaser.Physics.ARCADE);
3.在组中启用物理引擎
var game=new Phaser.Game();
//开启物理引擎
game.physics.startSystem(Phaser.Physics.ARCADE);
var group=game.add.group(); //创建一个
group.enableBody=true; //为组中每一个子元素启用物理引擎
group.physicsBodyType=Phaser.Physics.ARCADE; //指定要启用的物理引擎
//之后添加到组中的所有子元素都会自动启用所指定的物理引擎
4.精灵的body对象
当在一个精灵上启用了物理引擎后,该精灵就会拥有一个body属性(物理属性都是附加在精灵的body对象上)
sprite.body
5.物理属性
(1)速度velocity属性
sprite.body.velocity=new Phaser.Point(50,50)
sprite.body.velocity.set(50)
sprite.body.velocity.x=50; //X轴的速度(正数往右,负数往左)
sprite.body.velocity.y=50; //Y轴的速度(正数往下,负数往上)
(2)加速度acceleration属性
sprite.body.acceleration=new Phaser.Point(50,50)
sprite.body.acceleration.set(50)
sprite.body.acceleration.x=50; //X轴的加速度
sprite.body.acceleration.y=50; //Y轴的加速度
(3)阻力drag
sprite.body.drag=new Phaser.Point(50,50);
sprite.body.drag.set(50)
sprite.body.drag.x=50;
sprite.body.drag.y=50;
(4)重力gravity
sprite.body.gravity=new Phaser.Point(50,50)
sprite.body.gravity.set(50)
sprite.body.gravity.x=50;
sprite.body.gravity.y=50;
(5)弹跳bounce
sprite.body.bounce=new Phaser.Point(50,50)
sprite.body.bounce.set(0.5)
sprite.body.bounce.x=0.5;
srpite.body.bounce.y=0.5
(6)其他
sprite.body.friction.set(100) //设置与其他物体接触时的摩擦力
sprite.body.rotation=Math.PI //设置角度
sprite.body.immovable=true //设置该物体是固定的(true)还是不固定的(false)
sprite.body.mass=10 //设置物体的相对质量,默认为1
sprite.body.maxVelocity.set(100,200) //设置最大速度
sprite.body.maxAngular=1000; //设置最大角速度
sprite.body.setSize(width,height,offsetX,offsetY); //设置body的范围
sprite.body.reset(x,y) //重置所有的物理属性
sprite.body.touching.down / sprite.body.touching.up //返回true/false,该物体的底部或顶部是否与其他物体接触
6.碰撞检测
(1).只支持AABB(矩形)之间的碰撞检测
(2). overlap方法(不能产生效果)
var game=new Phaser.Game()
var sprite1=game.add.sprite()
var sprite2=game.add.sprite()
game.physics.arcade.overlap(sprite1,sprite2,function(){
console.log('It is overlap');
})
(3)collide方法(能产生效果)
var game=new Phaser.Game()
var sprite1=game.add.sprite()
var sprite2=game.add.sprite()
game.physics.arcade.collide(sprite1,sprite2,null,function(){
//collide方法不仅会检测两个物体之间的碰撞,而且会产生碰撞的物理效果,而overlap不会产生碰撞效果
})
(4)常用碰撞检测
精灵与组
var game=new Phaser.Game()
var sprite,group;
sprite=game.add.sprite()
group=game.add.group()
//检测精灵与组之间的碰撞
game.physics.arcade.collide(sprite,group)
组与组
var game=new Phaser.Game()
var group1,group2;
group1=game.add.group()
group2=game.add.group()
//检测精灵与组之间的碰撞
game.physics.arcade.collide(group1,group2)
组内
var game=new Phaser.Game()
var group=game.add.group()
//检测组内的元素的碰撞
game.physics.arcade.collide(group)
二、p2物理引擎
P2的物理世界。包含碰撞、重叠和运动相关的方法。
1.开启
game.physics.startSystem(Phaser.Physics.P2JS)
2.在精灵上启动p2物理引擎
var game=new Phaser.Game();
//开启物理引擎
game.physics.startSystem(Phaser.Physics.P2JS);
var sprite=game.add.sprite();
//在sprite上启用arcade物理引擎
game.physics.enable(sprite,Phaser.Physics.P2JS);
属性
game.physics.p2.gravity.y=50 //给所有物体添加重力加速度
game.physics.p2.friction=1 //碰撞物体间的摩擦力
game.physics.p2.restitution=0.8 //碰撞物体间的恢复系数
精灵的body对象
sprite.body
碰撞检测
//启动p2物理系统
game.physics.startSystem(Phaser.Phaser.P2JS)
//打开影响事件的世界,如果没有设置为true,我们不能得到碰撞回调
game.physics.p2.setImpactEvents(true);
//创建碰撞组
var collisionGroup1=game.physics.p2.createCollisionGroup();
var collisionGtoup2=game.physics.p2.createCollisionGroup();
//如果我们监听自己的碰撞,必须调用此来更新碰撞组
game.physics.p2.updateBoundsCollisionGroup()
var sprite1=game.add.sprite();
var sprite2=game.add.sprite()
//保证物体具有物理特性
game.physics.p2.enable(sprite1);
//给物体添加collisionGroup1碰撞组
sprite1.body.setCollisionGroup(collisionGroup1)
sprite1.body.collides(collisionGroup2);
game.physics.p2.enable(sprite2);
//给物体添加collisionGroup2碰撞组
sprite2.body.setCollisionGroup(collisionGroup2)
//检测sprite1与sprite2之间的碰撞,可多个,以数组形式
sprite2.body.collides(collisionGroup1,function(body1,body2){
//碰撞时代码
},this);
三、Ninja物理引擎
忍者物理处理程序。包含碰撞、重叠和运动相关的方法。