首页 专题 H5案例 前端导航 UI框架

Phaser常用API整理:物理引擎

作者:TG 日期: 2016-07-20 字数: 8527 阅读: 8206
Phaser提供三种物理引擎
(1)arcade:商场物理处理程序。包含碰撞、重叠和运动相关的方法
(2)p2:P2的物理世界。包含碰撞、重叠和运动相关的方法。
(3)Ninja:忍者物理处理程序。包含碰撞、重叠和运动相关的方法。

一、arcade物理引擎
1.开启

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物理引擎

忍者物理处理程序。包含碰撞、重叠和运动相关的方法。



目录