摘要:今天教大家使用制作一款功能簡(jiǎn)單的游戲冰桶挑戰(zhàn),這是一款大家熟悉的打地鼠類游戲,點(diǎn)擊屏幕使用冰桶澆滅地洞里鉆出來(lái)的明星,結(jié)算得到分?jǐn)?shù)。
今天教大家使用Egret制作一款功能簡(jiǎn)單的游戲——《冰桶挑戰(zhàn)》,這是一款大家熟悉的打地鼠類游戲,點(diǎn)擊屏幕使用冰桶澆滅地洞里鉆出來(lái)的明星,結(jié)算得到分?jǐn)?shù)。游戲頁(yè)面布局使用EUI封裝了大量的常用UI組件,滿足大部分的交互界面需求,開發(fā)者僅用1天時(shí)間即可獨(dú)立完成這款小游戲的開發(fā)。
游戲效果圖如下。
游戲比較簡(jiǎn)單,分為以下幾個(gè)場(chǎng)景:
· 開始場(chǎng)景
· 游戲場(chǎng)景
· 結(jié)束場(chǎng)景
· 游戲類
開始場(chǎng)景
這里使用Eui來(lái)搭建UI,舞臺(tái)大小選擇640 x 960,填充模式選擇fixedWidth;
新建Eui組件將舞臺(tái)大小改為640 x 960,開始場(chǎng)景這里資源只有一張圖片,把它拖進(jìn)去,然后選擇上下填充進(jìn)行約束,將數(shù)值改為比例以便進(jìn)行屏幕適配。
這里為了看起來(lái)像點(diǎn)到“水桶狀”button上,直接拖一個(gè)button,然后改其alpha值為0;
簡(jiǎn)單代碼如下:
//開始場(chǎng)景 class start extends eui.Component implements eui.UIComponent { public btn_Start: eui.Button; public constructor() { super(); } protected partAdded(partName: string, instance: any): void { super.partAdded(partName, instance); } protected childrenCreated(): void { super.childrenCreated(); this.Init(); } private Init() { this.height = this.stage.stageHeight; //場(chǎng)景跳轉(zhuǎn) this.btn_Start.addEventListener(egret.TouchEvent.TOUCH_TAP, () ={ this.parent.addChild(new game()) this.parent.removeChild(this); }, this) } }
游戲場(chǎng)景
將背景圖片bg_png拖入場(chǎng)景中,跟start場(chǎng)景中背景圖片一樣,按調(diào)整好的比例進(jìn)行約束;
放置一個(gè)Group大小改為舞臺(tái)大小,再將其上下填充約束,將其TouchEnbled改為false;
這里由于資源問(wèn)題,“洞”都是固定好的,因此再添加一個(gè)group改為人物圖片大?。═ouchEnbled也改為false),添加Rect作為遮罩;再將水桶和倒水的圖片拖進(jìn)去(將這兩張圖片隱藏掉),結(jié)構(gòu)和效果如下:
將小的group復(fù)制8個(gè),分別按比例進(jìn)行位置約束,然后將這9個(gè)group都隱藏掉;
5.代碼編寫:
o 開啟一個(gè)心跳事件
protected childrenCreated(): void { super.childrenCreated(); this.Init(); } private Init() { egret.startTick(this.Update, this); } //出現(xiàn)的速度 private speed = 1; private count = 0; //心跳函數(shù) private Update(): boolean { this.count++; if (this.count == Math.floor(120 / this.speed)) { this.PeopleChange(); this.count = 0; this.speed += 0.05; } //判斷游戲是否結(jié)束 if (this.time <= 0) { this.parent.addChild(new GameOver()); egret.stopTick(this.Update, this); this.parent.removeChild(this); } return false; }
Update函數(shù)里面寫了控制人物出現(xiàn)的速度和游戲結(jié)束的判定;
private PeopleChange() { //在9個(gè)group里面隨機(jī)一個(gè) let ran = Math.floor(Math.random() * this.group.numChildren); let g: eui.Group =this.group.getChildAt(ran); for (let i = 0; i < this.group.numChildren; i++) { //如果隨機(jī)到的group里面沒有人物圖片就進(jìn)行人物的創(chuàng)建 if (g.numChildren < 4) { if (ran == i) { //在三張人物圖片中隨機(jī)一張 let random = Math.floor(Math.random() * 3); this.group.getChildAt(i).visible = true; //新建一張人物圖片 let img: egret.Bitmap = new egret.Bitmap(RES.getRes(GameUtil.peopleEnemy[random])) //添加到隨機(jī)到的group里面 g.addChild(img); //設(shè)置人物圖片的遮罩 img.mask = g.getChildAt(0); let h = img.y; //將人物圖片放到遮罩的下方,然后讓其緩動(dòng)到上方。 img.y += img.height; } } } }
然后是人物圖片的緩動(dòng),在PeopleChange方法中寫
egret.Tween.get(img).to({ y: img.y - img.height }, 500).to({ y: img.y },500).call(() => { //緩動(dòng)執(zhí)行完成后將group隱藏掉 this.group.getChildAt(i).visible = false; //人物圖片位置復(fù)位 img.y -= img.height; //從group中刪除人物圖片 g.removeChild(img) //移除監(jiān)聽 img.removeEventListener(egret.TouchEvent.TOUCH_TAP, () => { }, this) egret.Tween.removeTweens(img); g.getChildAt(2).visible = false; g.getChildAt(3).visible = false; })
人物圖片的點(diǎn)擊處理
img.touchEnabled = true; img.addEventListener(egret.TouchEvent.TOUCH_TAP, () => { //暫停動(dòng)畫 tw.setPaused(true) //人物圖片不可觸摸,防止多次點(diǎn)擊 img.touchEnabled = false; this.tongNum++; GameUtil.Constant.score++; g.getChildAt(2).visible = true; g.getChildAt(3).visible = true; this.tongNumTXT.text = this.tongNum.toString(); //替換對(duì)應(yīng)被澆水的圖片 img.texture = RES.getRes(GameUtil.peopleEnemyWet[random]); //200ms后動(dòng)畫繼續(xù)播放 setTimeout(() => { tw.setPaused(false); }, 200); }, this)
游戲采用簡(jiǎn)單的計(jì)時(shí)來(lái)判定結(jié)束,在Init方法中寫
//定時(shí)器 let s = setInterval(() => { if (this.time > 0) { this.time--; this.timeDownTXT.text = this.time.toString(); } else { clearInterval(s); } }, 1000)
結(jié)束場(chǎng)景
游戲結(jié)束場(chǎng)景搭建比較簡(jiǎn)單,注意按鈕和文字也需要按比例進(jìn)行約束;
代碼編寫如下:
//結(jié)束場(chǎng)景 class GameOver extends eui.Component implements eui.UIComponent { public btnPlayAgain: eui.Button; public btnFenXiang: eui.Button; public scoreText: eui.Label; public constructor() { super(); } protected partAdded(partName: string, instance: any): void { super.partAdded(partName, instance); } protected childrenCreated(): void { this.height = this.stage.stageHeight; super.childrenCreated(); this.scoreText.text = GameUtil.Constant.score.toString(); this.btnPlayAgain.addEventListener(egret.TouchEvent.TOUCH_TAP, () => { this.parent.addChild(new game()); GameUtil.Constant.score = 0; this.parent.removeChild(this); }, this) } } 游戲管理類GameUtil 游戲管理類GameUtil里面寫了分?jǐn)?shù)字段,和兩種狀態(tài)下人物圖片的地址字符串枚舉; module GameUtil { export class Constant { public static score:number; } export enum peopleEnemy { "person-fs_png" = 0, "person-lj_png", "person-ldh_png" } export enum peopleEnemyWet { "person-fs-wet_png" = 0, "person-lj-wet_png", "person-ldh-wet_png" } }
小結(jié)
本文主要講述了一款簡(jiǎn)單的打地鼠類游戲的制作過(guò)程,游戲素材全部來(lái)自網(wǎng)絡(luò),游戲整體結(jié)構(gòu)和功能較為簡(jiǎn)單。如果覺得這篇文章對(duì)你有所幫助,歡迎在下方評(píng)論區(qū)留言與我們交流互動(dòng)!
GitHub源碼地址:https://github.com/duan003387...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://hztianpu.com/yun/98847.html
摘要:對(duì)的要求基本沒有,都能繪制出來(lái),但是動(dòng)畫制作方式存在不同,可能某些幀不能完全繪制出來(lái)。目前對(duì)是有要求的本身必須是個(gè)多幀,如果只作為容器嵌套其他子項(xiàng)的做法將不會(huì)被繪制。點(diǎn)擊播放按鈕可以預(yù)覽動(dòng)畫,默認(rèn)幀率為。 Texture Merger 可將零散紋理拼合為整圖,同時(shí)也可以解析SWF、GIF動(dòng)畫,制作Egret位圖文本,導(dǎo)出可供Egret使用的配置文件,其紋理集制作功能在小游戲開發(fā)中可以起...
閱讀 2753·2021-11-22 13:53
閱讀 4336·2021-09-28 09:47
閱讀 1038·2021-09-22 15:33
閱讀 1022·2020-12-03 17:17
閱讀 3454·2019-08-30 13:13
閱讀 2268·2019-08-29 16:09
閱讀 1321·2019-08-29 12:24
閱讀 2594·2019-08-28 18:14