八、添加游戲積分系統(tǒng)
前面我們實(shí)現(xiàn)了整個(gè)游戲的流程嗓袱,下面我們來(lái)完善游戲的積分系統(tǒng)。习绢。先來(lái)分析下游戲的積分渠抹,第一次展示積分的地方就是我們的游戲主場(chǎng)景MainScene,玩家通過(guò)一些機(jī)制來(lái)獲取積分闪萄,實(shí)現(xiàn)積分的更新逼肯,當(dāng)玩家游戲結(jié)束后展示玩家所獲的的當(dāng)前積分。
我們一開(kāi)始制作游戲場(chǎng)景的時(shí)候就制作了一個(gè)積分節(jié)點(diǎn)score桃煎,其string屬性值為0篮幢。打開(kāi)GAME.js腳本可以發(fā)現(xiàn),一開(kāi)始的時(shí)候我們onLoad方法就初始化了積分为迈。
接著我們?cè)贕AME.js腳本里新添加一個(gè)函數(shù)來(lái)實(shí)現(xiàn)積分的更新三椿。代碼如下:
01//GAME.js
02//....省略...
03
04?//積分更新
05????gainScore:?function?()?{
06????????this.score?+=?1;
07????????//?更新?scoreDisplay?Label?的文字
08????????this.scoreDisplay.string?=??this.score.toString();
09
10????????cc.sys.localStorage.setItem("ScoreDis",this.scoreDisplay.string);//本地存儲(chǔ)
11
12????},
13
14//.....省略...
這段代碼的意思是實(shí)現(xiàn)積分+1,增長(zhǎng)一個(gè)積分葫辐。并把積分存儲(chǔ)到本地搜锰,注意本地存儲(chǔ)代碼。耿战。蛋叼。那么什么時(shí)候才增長(zhǎng)積分呢?剂陡?
在觸摸屏幕接觸的時(shí)候狈涮,如果背景滾動(dòng)我們就增加一個(gè)積分。添加代碼位置如下圖:
這樣每次玩家移動(dòng)帶動(dòng)背景滾動(dòng)的時(shí)候鸭栖,積分就會(huì)更新歌馍。積分更新到時(shí)候會(huì)存儲(chǔ)到本地,這樣我們游戲結(jié)束的時(shí)候就可以正確的顯示出來(lái)晕鹊。
新建GameOverScore.js腳本松却,代碼如下:
01//GameOverScore.js
02cc.Class({
03????extends:?cc.Component,
04????properties:?{
05????????//積分更新
06????????Scores:?{
07????????????default:?null,
08????????????type:?cc.Label
09????????},
10????},
11????//積分更新
12????disScore:?function?()?{
13????????this.score?=??cc.sys.localStorage.getItem("ScoreDis");//讀取本地存儲(chǔ)的積分
14????????//?更新?scoreDisplay?Label?的文字
15????????this.Scores.string?=?"Score:?"+?this.score.toString();//顯示
16????},
17
18????//?use?this?for?initialization
19????onLoad:?function?()?{
20???????this.disScore();//首次加載時(shí)候調(diào)用
21????},
22
23????//?called?every?frame,?uncomment?this?function?to?activate?update?callback
24????//?update:?function?(dt)?{
25
26
27????//?},
28});
這段代碼的意識(shí)是加載的時(shí)候暴浦,onLoad函數(shù)調(diào)用積分更新的方法,實(shí)現(xiàn)從本地讀取游戲場(chǎng)景中存儲(chǔ)的積分晓锻。
雙擊打開(kāi)GameOver場(chǎng)景歌焦,如圖:
為GameOver場(chǎng)景Canvas綁定剛剛新建的GameOverScore.js腳本。并把score組件拖進(jìn)scores進(jìn)行綁定砚哆。
這樣游戲結(jié)束的時(shí)候同规,就會(huì)更新score節(jié)點(diǎn)組件的顯示內(nèi)容。下面我們來(lái)測(cè)試下窟社。雙擊打開(kāi)主場(chǎng)景,從游戲場(chǎng)景開(kāi)始測(cè)試積分的更新绪钥,以及游戲結(jié)束的積分顯示灿里。
是不是很好玩啊,哈哈程腹。加個(gè)積分排行榜更好啊匣吊,以后 慢慢擴(kuò)展來(lái)。寸潦。色鸳。
到此我們整個(gè)游戲已經(jīng)算完成了,當(dāng)然一個(gè)游戲不能沒(méi)有聲音和音效见转,下面我們來(lái)添加聲音系統(tǒng)功能命雀。。斩箫。
九吏砂、為游戲添加聲音音效功能
游戲的聲音很重要,我們?cè)谶@個(gè)游戲中需要加2個(gè)音效乘客,一個(gè)背景音樂(lè)狐血。。易核。第一個(gè)音效在玩家與障礙物碰撞的地方加碰撞音效匈织,第二個(gè)在玩家主角墜落到屏幕底部的時(shí)候加游戲結(jié)束的音效。然后游戲開(kāi)始的時(shí)候加載背景音樂(lè)牡直。
我們一開(kāi)始在MainScene場(chǎng)景中的聲音圖標(biāo)節(jié)點(diǎn)就是我們用來(lái)控制聲音的開(kāi)關(guān)缀匕。。
首先修改guawileft.js腳本碰逸,添加音效資源弦追,在onload設(shè)置聲音大小。代碼:
01//guanwileft.js
02
03???properties:?{
04
05????????times:?0,
06????????//?碰撞音效資源
07????????pengAudio:?{
08????????????default:?null,
09????????????url:?cc.AudioClip
10????????},
11????},
12????//?use?this?for?initialization
13????onLoad:?function?()?{
14
15????????????this.moveRight();
16????????????cc.audioEngine.setEffectsVolume?(?0.2?);//設(shè)置音效聲音大小
17
18
19????},
同理在guaiwuright.js腳本也是這樣添加花竞。劲件。
為障礙物的2個(gè)腳本添加好代碼后掸哑,我們需要修改我們的兩個(gè)障礙物預(yù)制體。綁定音效資源零远,這里以zhangaiwuleft預(yù)制體為例苗分。雙擊zhangaiwuleft預(yù)制體,添加聲音資源綁定牵辣。如圖:
zhangaiwuright預(yù)制體同理也是這樣添加聲音摔癣。
碰撞音效加載好后,我們?yōu)橛螒蚪Y(jié)束加個(gè)音效纬向。打開(kāi)GAME.js腳本择浊。在?properties中添加屬性。代碼如下:
01????????//?背景音樂(lè)資源
02????????bgmusic:?{
03????????????default:?null,
04????????????type:?cc.Node
05????????},
06????????//?游戲音樂(lè)資源
07????????gameAudio:?{
08????????????default:?null,
09????????????url:?cc.AudioClip
10????????},
11????????//?游戲結(jié)束音樂(lè)資源
12????????gameOverAudio:?{
13????????????default:?null,
14????????????url:?cc.AudioClip
15????????},
添加好代碼后逾条,我們雙擊打開(kāi)MainScene場(chǎng)景開(kāi)始為屬性綁定資源和節(jié)點(diǎn)琢岩。。如圖:
可以跑起來(lái)測(cè)試下我們的聲音有沒(méi)有了师脂。担孔。這就完了嗎?當(dāng)然不是吃警,我們的聲音圖標(biāo)還沒(méi)有用到案馄!酌心!
下面為我們的聲音圖標(biāo)節(jié)點(diǎn)加一個(gè)腳本拌消,新建腳本AudioScript.js。代碼如下:
01//AudioScript.js
02
03cc.Class({
04????extends:?cc.Component,
05????properties:?{
06????????//是否開(kāi)啟音樂(lè)??默認(rèn)開(kāi)啟
07????????isOpen:?true,
08????????//?游戲音樂(lè)資源
09????????gameAudio:?{
10????????????default:?null,
11????????????url:?cc.AudioClip
12????????},
13
14????},
15????//?use?this?for?initialization
16????onLoad:?function?()?{
17????????this.isOpen?=?true;//開(kāi)啟音樂(lè)
18????????cc.audioEngine.playMusic?(?this.gameAudio,?true);
19
20????},
21????//檢查音樂(lè)開(kāi)啟狀態(tài)
22????checkMusic:function(){
23
24????????returnisOpen;
25????},
26????//獲取點(diǎn)擊坐標(biāo)
27????setCp:function(pos){
28
29????????var?rec?=?cc.rectContainsPoint(this.node.getBoundingBoxToWorld(),pos)?;
30
31????????if(rec){
32????????????//檢查音樂(lè)開(kāi)啟狀態(tài)
33????????????//如果音樂(lè)開(kāi)啟了則關(guān)閉音樂(lè)和音效
34????????????if(this.isOpen){
35?????????????//if?(cc.audioEngine.isMusicPlaying())?{
36????????????????cc.audioEngine.pauseMusic();//暫停正在播放音樂(lè)
37????????????????cc.log("暫停正在播放音樂(lè)");
38????????????????//this.node.addChild("Texture/menu_music_off.png");
39????????????????this.isOpen?=?false;
40????????????????}
41????????????else{
42??????????????//?cc.log("music?is?not?playing");
43??????????????cc.audioEngine.resumeMusic?();//恢復(fù)背景音樂(lè)
44??????????????cc.log("恢復(fù)背景音樂(lè)");
45??????????????this.isOpen?=?true;
46?????????????}
47
48????????}
49????},
50
51????//?called?every?frame,?uncomment?this?function?to?activate?update?callback
52????//?update:?function?(dt)?{
53
54????//?},
55});
代碼里實(shí)現(xiàn)了一個(gè)音樂(lè)播放的狀態(tài)安券,用來(lái)給我們判斷是否播放了拼坎。播放了圖標(biāo)顯示聲音圖標(biāo),沒(méi)有播放顯示靜音圖標(biāo)完疫。
1var?rec?=?cc.rectContainsPoint(this.node.getBoundingBoxToWorld(),pos)?;
此處用來(lái)判斷聲音圖標(biāo)的包圍盒和點(diǎn)擊坐標(biāo)的比較泰鸡,如果為true則表示聲音圖標(biāo)被點(diǎn)擊到了,如果聲音圖標(biāo)被點(diǎn)擊則判斷當(dāng)前聲音播放狀態(tài)壳鹤,并改變狀態(tài)盛龄。聲音圖標(biāo)節(jié)點(diǎn)顯示如圖:
聲音節(jié)點(diǎn)綁定好腳本后,我們繼續(xù)修改GAME.js腳本中的代碼芳誓,為AudioScript.js中的方法setCp:function(pos)傳參數(shù)余舶。
首先在頂部添加引用代碼,然后在點(diǎn)擊事件添加點(diǎn)擊的檢測(cè)方法锹淌,然后update實(shí)現(xiàn)更新?tīng)顟B(tài)匿值。代碼如圖:
這里我就不貼代碼了,大家手打下赂摆。挟憔。钟些。到此我們的聲音系統(tǒng)也添加完畢了。绊谭。政恍。對(duì)了,還少一點(diǎn)达传,聲音狀態(tài)切換的時(shí)候聲音圖標(biāo)也要改變啊篙耗。。宪赶。這里大家自己解決宗弯。。
未完待續(xù)............點(diǎn)擊鏈接加入群聊【cocos/unity交流群】
作者:閉眼就天黑
來(lái)源:閉眼就天黑的博客
聲明:發(fā)布此文是出于傳遞更多知識(shí)以供交流學(xué)習(xí)之目的搂妻。若有來(lái)源標(biāo)注錯(cuò)誤或侵犯了您的合法權(quán)益蒙保,請(qǐng)作者持權(quán)屬證明與我們聯(lián)系,我們將及時(shí)更正叽讳、刪除,謝謝