as3遊戲開發之打氣球系列(二)

HI,經過了昨天瘋狂的理論轟炸,腦袋還清新不?其實昨天的內容很重要,只要昨天那兩點理解透了,以後再製作遊戲就是一些算法問題,其實做遊戲不難.最難的是想法而已.今天繼續,依舊是老提綱:
     1,瞄準鏡的產生   (類似attachMovie在AS3中該如何表現?)
     2,飛翔的氣球    (怎麼飛?隨機飛,隨機速度又怎麼表現?該如何記時?)
     3,打氣球   (怎麼算打中?打中後,氣球爆炸怎麼表現?聲音呢?)
     4,給我個計數器  (計算打中的,飛走的,甚至擊中概率)
     5,成與敗   (怎麼算勝利?怎麼算失敗?如何表現)
     6,完善     (結尾)
3,打氣球   (怎麼算打中?打中後,氣球爆炸怎麼表現?聲音呢?)
     瞄準鏡能動了,氣球能飛了,速度也各具特色.那麼下一步就該是打氣球了,哈哈.打中不難,難的是打中後的特效表現,讓我在編寫的時候卡了一下.不過好消息是我會告訴你,所以你就不用卡了.繼續昨天的代碼
   我把鼠標點擊到氣球算打中目標,那麼我們只需要監聽氣球是否被鼠標點擊到就OK了.打中後,首先考慮的是,需要在舞臺上移除掉當前被點擊的氣球,然後就是移除監聽事件,所以代碼爲:
function shoot(e:MouseEvent):void{
 var tempBall:MovieClip = e.currentTarget as MovieClip;  
 tempBall.removeEventListener(Event.ENTER_FRAME,ballFly);
 tempBall.removeEventListener(MouseEvent.CLICK,shoot);
 tempBall.parent.removeChild(tempBall);
}
    不過我們需要等等,加這代碼,因爲我需要豐富的被打中的形態,還要出聲音.聲音先不管,我們先在做一個氣球被打的樣子.如圖:
   
[img]/uploads/allimg/080508/1016420.jpg[/img]
    我這裏設置的是到第8貞Alpha爲零,兩頭的actionscript都是stop();第2貞標籤是:plays.
    所以接剛纔的代碼裏,重新修改爲:
function shoot(e:MouseEvent):void {
 var tempBall:MovieClip = e.currentTarget as MovieClip;
 tempBall.gotoAndPlay("plays");
 tempBall.addEventListener(Event.ENTER_FRAME,dieEnter);
 tempBall.removeEventListener(Event.ENTER_FRAME,ballFly);
 tempBall.removeEventListener(MouseEvent.CLICK,shoot);
}
function dieEnter(e:Event):void {
 var tempBall:MovieClip = e.currentTarget as MovieClip;
 var gravity:int = 20;
 var ymov:int = tempBall.y + gravity;
 tempBall.y = ymov;
 if (tempBall.y > stage.stageHeight) {
   tempBall.parent.removeChild(bb);
   tempBall.removeEventListener(Event.ENTER_FRAME, dieEnter);
 }
}
   可以注意到,在監聽打中後,又加了個Event.ENTER_FRAME,這主要是爲了豐富打中效果而做的,也就是打中後,氣球一邊往下掉,一邊變透明.好了,加上音樂,感覺更好,隨便導入一段聲效.再加入以下的代碼:
   var popSound:pop = new pop();
    popSound.play();
 
     pop就是在庫裏聲音樣本的Linkage名字.這樣到第三步,基本就已經完成一個打氣球遊戲了.
源代碼:
[img]/uploads/allimg/080508/1016421.gif[/img]
下載文件
[url=http://www.uncool.cn/blogs/attachment/ball3.rar]點擊這裏下載文件[/url]
4,給我個計數器  (計算打中的,飛走的,甚至擊中概率)
     從這一步開始,就需要對以前的代碼進行反工修改.所謂記數器,就是知道自己打中了幾個,飛走了幾個。對於贏或者輸會在下一步說.這裏,我們需要在舞臺放放置兩個動態文本,大小爲12,黑色字體.分別命名爲:fireIn(打中),fireOut(飛走)
     每打中一個,就爲fireIn加一個,飛走一個,fireOut也是.那麼好,需要在程序里加以下代碼
var fireInNumber:int=0;
var fireOutNumber:int=0;
//以下的加到lose function
fireOutNumber ++;
fireOut.text = fireOutNumber.toString();
//以下的加到shoot function
fireInNumber ++;
 fireIn.text = fireInNumber.toString();
    擊中概率那個簡單,就是相除就可以,就不說了.
源文件:
[img]/uploads/allimg/080508/1016421.gif[/img]
下載文件
[url=http://www.uncool.cn/blogs/attachment/ball4.rar]點擊這裏下載文件[/url]
 5,成與敗   (怎麼算勝利?怎麼算失敗?如何表現)
    如何算成功?如何算失敗?我們要先說說怎麼算失敗.我這裏打算放一個血條,3格血,飛走一個,就掉一格,全部掉完,算輸.當然直接算飛走3個也可以,不過豐富一點好,以後就知道怎麼做了.接着說成功,那方法就多了,比如10個裏,打中了一個算贏.哈哈,這樣好象過於無恥了點。不過目前都是講概念,怎麼實行還是看你自己怎麼編寫。
   先在舞臺上搞一個血條.像這樣的
[img]/uploads/allimg/080508/1016423.jpg[/img]

    然後在lose Function里加代碼:
//我是根據飛走數量來決定血條,注意此代碼需要加在fireOutNumber ++的後面.
if (fireOutNumber >= 3) {
   t.stop();
   blood.gotoAndStop((fireOutNumber+1));
   trace("YOU DIE!");
    balls.removeEventListener(Event.ENTER_FRAME,ballFly);
    balls.removeEventListener(MouseEvent.CLICK,shoot);
    removeChild(content_mc);
 } else {
   blood.gotoAndStop((fireOutNumber+1));
 }
     加上此代碼後,你可以測試一下,飛走3個氣球就會TARCE出YOU DIE.也表示這一步的失敗做法我們算是完成了。下面說成功,我把氣球的總數改爲20個,只要打中5個就算贏,所以修改代碼,接着根據fireInNumber的數量來決定是否成功.那麼就在shoot  function里加入代碼:
if(fireInNumber>=5){
   trace("YOU WIN!");
   t.stop();
 }
     這段比較簡單,這樣這成與敗算是完成了.源代碼下載:
[img]/uploads/allimg/080508/1016421.gif[/img]
下載文件
[url=http://www.uncool.cn/blogs/attachment/1196010530_0.rar]點擊這裏下載文件[/url]
6,完善     (結尾)
     完善,說起來簡單,但是其實非常麻煩.我在製作一個項目的時候,最後階段的調試是非常麻煩的.你可以回頭看看以上的幾個源代碼都是有非常大的問題,封裝性不夠強.因爲我是邊寫文章,邊寫代碼.而且寫起來太煩瑣.但是,我覺得只要你懂的大意,就可以了.概念性大於實際操作.關於其他的打飛機,打潛水艇遊戲等等,基本上都差不多,唯一的不同就是算法不同.怪物出現的方式不同.
      你知道一個程序的完善靠的是什麼?是經驗,有很多人老說優化問題,我個人認爲,這也是一個個人經驗問題,習慣問題,有良好的編程習慣,對一些數據知道什麼時候監聽,什麼時候移除監聽.因爲,你要知道,有的監聽不用移除也是沒問題的,只不過會多佔用CPU資源,這一切的解決都需要你自己的對代碼研究和製作的經驗.
以下是修復後完整的源代碼:
[img]/uploads/allimg/080508/1016421.gif[/img]
下載文件
[url=http://www.uncool.cn/blogs/attachment/1196095718_0.rar]點擊這裏下載文件[/url]
ps:以後會介紹更多的遊戲製作方法,不過先在這裏沒有把遊戲完整的介紹完說聲抱歉,因爲還有數據顯示啊,重新玩一次等等.不過別急,這個只打個底,以後講遊戲,就不再那麼詳細了,只會把大概意思說一下,然後直接上代碼.飯總要一口一口的吃.
本文轉自:http://www.5uflash.com/flashjiaocheng/Flash-as3-jiaocheng/3213.html
發佈了14 篇原創文章 · 獲贊 1 · 訪問量 1926
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章