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