首頁  >  文章  >  web前端  >  html5遊戲開發-憤怒的小鳥-開源講座(一)-跳入彈出的小鳥

html5遊戲開發-憤怒的小鳥-開源講座(一)-跳入彈出的小鳥

黄舟
黄舟原創
2017-03-02 13:49:362178瀏覽

憤怒的小鳥是一款人氣火爆的益智遊戲,現在我試著用lufylegend庫件和Box2dWeb物理引擎來看看在html5中如何製作此類經典的物理遊戲。

準備工作一

首先,你需要下載lufylegend庫件1.4.1版

http://blog .csdn.net/lufy_legend/article/details/7751425

box2dweb你可以到這裡下載

http://code.google.com/p/box2dweb/downloads/list

關於lufylegend庫件的使用方法,大家可以看一下我以前的一些文章和教程,或者看下面的api說明。

http://lufy.netne.net/lufylegend-js.php?v=api

#準備工作二

由於筆者的失誤,沒有將Box2dWeb的功能封轉完,要製作物理遊戲的話,不得不對lufylegend-1.4.1做一些擴展,大家可以下載這個擴展文件,等下次庫件的1.5版發布的時候會將這些擴充加進去的。

http://fsanguo.comoj.com/download.php?i=lufylegend-1.4.1.extension.js

做好了上面的準備工作,現在就來跟著筆者來一步步的試試看。

一,旋轉飛起的小鳥

#首先來建造一個小鳥

function Bird(){
	base(this,LSprite,[]);
	var self = this;
	var bitmap = new LBitmap(new LBitmapData(imglist["bird1"]));
	self.addChild(bitmap);
}

有了這個類,我們把它顯示到畫面上就很簡單了

backLayer = new LSprite();	
addChild(backLayer);
bird = new Bird();
bird.rotate = 0;
bird.x = 200;
bird.y = 430;
bird.yspeed = -5;
backLayer.addChild(bird);

玩過憤怒的小鳥的朋友們都知道,遊戲開始時,小鳥跳上彈弓的時候有一個旋轉動作,我現在通過lufylegend庫件的LTweenLite緩動類別來實現此功能。

LTweenLite.to(bird,1,
	{ 
		x:100,
		yspeed:5,
		delay:1,
		rotate:-360,
		onUpdate:function(){
			bird.y += bird.yspeed;
		},
		onComplete:function(){
			start();
		},
		ease:Sine.easeIn
	}
);

透過上面的程式碼可以看到,LTweenLite類別不但可以改變一些LSprite物件的常用屬性,其實可以改變任意自訂的屬性,上面就是透過LTweenLite將yspeed由-5變到了,然後透過onUpdate來改變小鳥的y座標。

以下是測試連線

http://lufy.netne.net/lufylegend-js/lufylegend-1.4/box2d/sample02/index.html


#二,彈出的小鳥

#接下來在小鳥彈起後的位置加上一個彈弓

	bitmap = new LBitmap(new LBitmapData(imglist["slingshot1"]));
	bitmap.x = 215;
	bitmap.y = 290;
	backLayer.addChild(bitmap);
	
	bird = new LSprite();
	bird.name = "bird01";
	backLayer.addChild(bird);
	bitmap = new LBitmap(new LBitmapData(imglist["bird1"]));
	bird.addChild(bitmap);
	
	bitmap = new LBitmap(new LBitmapData(imglist["slingshot2"]));
	bitmap.x = 190;
	bitmap.y = 290;
	backLayer.addChild(bitmap);

效果如圖


上面程式碼將彈弓的前後兩個分叉加到了畫面上。
接著透過滑鼠來拖曳小鳥,首先加入滑鼠按下事件

backLayer.addEventListener(LMouseEvent.MOUSE_DOWN,downStart);
startX = bird.x + bird.getWidth()*0.5;
startY = bird.y + bird.getHeight()*0.5;

上面程式碼加上了滑鼠事件,並記錄下了小鳥中心的位置作為彈弓的中心位置。
然後當滑鼠按下的時候,判斷下滑鼠是否點擊到了小鳥,然後移除滑鼠按下事件,並加入滑鼠移動事件和滑鼠彈起事件。

function downStart(event){
	if(event.offsetX > bird.x && event.offsetX < bird.x + bird.getWidth() && 
		event.offsetY > bird.y && event.offsetY < bird.y + bird.getHeight()){
		backLayer.removeEventListener(LMouseEvent.MOUSE_DOWN,downStart);
		backLayer.addEventListener(LMouseEvent.MOUSE_MOVE,downMove);
		backLayer.addEventListener(LMouseEvent.MOUSE_UP,downOver);
	}
}

先來實現下滑鼠移動時候的,讓小鳥跟隨滑鼠

unction downMove(event){
	var r = Math.sqrt(Math.pow((startX - event.selfX),2)+Math.pow((startY - event.selfY),2));
	if(r > 100)r = 100;
	var angle = Math.atan2(event.selfY - startY,event.selfX - startX);
	bird.x = Math.cos(angle) * r + startX - bird.getWidth()*0.5;
	bird.y = Math.sin(angle) * r + startY - bird.getHeight()*0.5;
}

#解釋下上面的程式碼,首先,計算滑鼠位置和彈弓的中心位置之間的距離,當距離大於100的時候,使其等於100。接著計算滑鼠拖曳的角度,然後透過這個角度來計算並設定小鳥的座標。

接着,看一下鼠标弹起后的功能,上面的代码里并没有用到box2dweb,我通过将小鸟变为box2d刚体,然后给小鸟加上一个力,来让小鸟弹飞出去

function downOver(event){
	backLayer.removeEventListener(LMouseEvent.MOUSE_UP,downOver);
	backLayer.removeEventListener(LMouseEvent.MOUSE_MOVE,downMove);
	
	var startX2 = bird.x + bird.getWidth()*0.5;
	var startY2 = bird.y + bird.getHeight()*0.5;
	var r = Math.sqrt(Math.pow((startX - startX2),2)+Math.pow((startY - startY2),2));
	var angle = Math.atan2(startY2 - startY,startX2 - startX);
	
	bird.addBodyCircle(bird.getWidth()*0.5,bird.getHeight()*0.5,bird.getWidth()*0.5,1,.5,.4,.5);
	var force = 7;
	var vec = new LGlobal.box2d.b2Vec2(-force*r*Math.cos(angle),-force*r*Math.sin(angle));
	bird.box2dBody.ApplyForce(vec, bird.box2dBody.GetWorldCenter());
}

上面代码首先计算了一下小鸟的被拖拽的距离,以及被拖拽的角度。

addBodyCircle给小鸟加入body,让其变为一个刚体。

ApplyForce给刚体加上一个力。

好了,点开下面链接进行测试,通过拖拽小鸟,将小鸟弹飞出去吧。

http://lufy.netne.net/lufylegend-js/lufylegend-1.4/box2d/sample02/index02.html

下面给出本次教程的源码,当然,lufylegend库件和box2dweb需要自己下载配置一下

http://fsanguo.comoj.com/download.php?i=AngryBirds1.rar

本次就写到这里,在下一讲中会加入碰撞功能,并且让镜头时刻跟随小鸟,敬请期待。

 以上就是html5游戏开发-愤怒的小鸟-开源讲座(一)-跳入弹出的小鸟的内容,更多相关内容请关注PHP中文网(www.php.cn)!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn