p2.js 與 createjs 的組合應用


開始前簡單說下其他幾款js物理引擎

box2d老牌,功能全面,但是效率低下,移動端基不用考慮的

matterjs  效率目前我測試下來最高,但是依然還在開發中(好像還很緩慢),目前功能局限,而且有bug。(本來項目打算使用,結果局限和bug導致放棄)

 

p2js 移動端推薦使用 (常規體量在目前手機大多數上應用沒有問題)

作者github:     https://github.com/schteppe

 

 

閱讀此文需要一定的基礎知識,這里只講p2.js 與 createjs 的組合應用

 

坐標系:

  p2.js與createjs 的x軸是一致的。y軸是相反的

 

  

 

 

注冊點:  

  createjs默認在目標bound的左上角

  p2.js默認在目標bound的中心

 

    

 

相關屬性轉換

  createjs.rotation = -p2.angle * 180 / Math.PI;

  createjs.x= p2.Body.position[0];

  createjs.y= -p2.Body.position[1];

 

 

使用createjs的movieclip、sprite、img貼圖渲染

  p2js的一大特點就是最基本的庫里並沒有集成貼圖渲染的相關api,一開始覺得很不習慣,使用后覺得真心好用,能滿足很多特殊情況           

  例如:1 由於模型原因,我們貼圖需要稍大於模型,這樣才能在渲染時沒有縫隙。

     2 動態刷新貼圖(例如我們直接使用createjs的movieclip,多方便)  

  其實就是把p2的坐標,角度對應的綁定給createjs的元件來顯示。  

var arrDataShow=[]; //數組管理對應關系

//建createjs元件
var _m=new createjs.MovieClip()
//建p2剛體	
var _p2= new p2.Body(
{
	mass: 1,
	position: [0, 0],
	angle:0.1,
	allowSleep : false
})
world.addBody(_p2);	

arrDataShow.push({data:_p2,show:_m,type:""});//數組管理對應關系


//渲染
stage.addEventListener("tick",function(e)
{
	world.step(1 / 10); //createjs fps 與 p2 word的step 對應關系 自行摸索
	for (var i = 0; i < arrDataShow.length; i++)
	{
		var type = arrDataShow[i].type;
		var data = arrDataShow[i].data;
		var show = arrDataShow[i].show;
		//
		show.x = data.position[0];
		show.y = -data.position[1];
		show.rotation = -data.angle * 180 / Math.PI;
	}
})

 

至於不規則圖形,如何在p2中建立剛體官方demo里面也有

注意:

因為不規則所以剛體的重心並不會在bound的中心,所以需要進一步解決這個問題(項目時間原因,暫時還未想到好的辦法,待更新)

 

到此 兩者的組合應用 算是基本清了!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM