用Go和Korok寫一個Flappybird遊戲-5
我們給遊戲新增了場景轉換支援,現在遊戲邏輯已經基本完善,唯一剩下的就是音效了。本節會新增音效支援,這也是這一系列的最後一節。本節你會學會:如何播放音效.
注:如果你沒有完成上一節的教程,也可以直接從 下載到上節結束時的程式碼,以便開始本節的內容。
音訊資源
在 Korok 中,只支援兩種基本的音訊格式:wav 和 ogg/vorbis. 前者是原聲的未壓縮音訊格式比較適合於播放音效,後者是經過壓縮的音訊格式比較適合於播放比較長的背景音樂。在工程的 assets/sound/
目錄中,我們已經準備幾個音訊檔案,不過這些檔案都是音效(在本遊戲中並不需要背景音樂)。
讀取音效檔案可以在 GameScene
的 Load
方法中執行:
asset.Audio.Load("sound/rise.ogg", false) asset.Audio.Load("sound/drop.ogg", false) asset.Audio.Load("sound/point.ogg", false) asset.Audio.Load("sound/collision.ogg", false) asset.Audio.Load("sound/swooshing.ogg", false)
上面程式碼把音訊檔案載入到了記憶體,需要注意的是第二個引數,這個引數指定了當前音訊是直接載入記憶體還是以流檔案的方式載入。對 Flappy Bird 來說,這些檔案都是比較短小的音效,所以直接載入記憶體是沒有問題的。
// 在 GameScene 中新增屬性 type GameScene struct { ... sound struct{ rise uint16 drop uint16 collision uint16 point uint16 swooshing uint16 } }// 在 OnEnter 中初始化sn.sound.rise, _ = asset.Audio.Get("sound/rise.ogg") sn.sound.drop, _ = asset.Audio.Get("sound/drop.ogg") sn.sound.point, _ = asset.Audio.Get("sound/point.ogg") sn.sound.collision, _ = asset.Audio.Get("sound/collision.ogg") sn.sound.swooshing, _ = asset.Audio.Get("sound/swooshing.ogg")
需要注意的是,直接載入僅記憶體的音訊是可以用 audio.PlayEffect()
播放發的,但是以流的形式載入的不可以。以流的形式載入的只能用 audio.PlayMusic
播放, 這是 Korok 音訊系統的一個約定。
播放音訊
播放音訊是非常簡單的,直接在觸發事件的時候呼叫 Play
方法即可。比如,點選螢幕的時候會給鳥一個向上的衝量,同時會播放一個 “呼——” 的音效:
if input.PointerButton(0).JustPressed() { sn.bird.vy = TapImpulse // play effect audio.PlayEffect(sn.sound.rise, 1) }
由於簡書是不能播放影片的,所以效果無法感受了。大概就是每次飛的時候會 “呼——” 的一聲。
在碰撞和墜落的時候也加上音效:
if sn.bird.state != Dead { ps.StopScroll() sn.bird.state = Dead // stop bird animation korok.Flipbook.Comp(sn.bird.Entity).Stop() // play collision audio.PlayEffect(sn.sound.collision, 1) } // detect collision with ground and sky if y := sn.bird.Vec2[1]; y > 480 { sn.bird.Vec2[1] = 480 } else if y以上程式碼在墜落和死亡的時候,分別播放了音效。值得注意的是,播放音效的方法:
audio.PlayEffect(sn.sound.collision, 1)
的第二個引數是一個優先順序。在這個遊戲中,音效比較少幾乎用不到,但在有大量音效的遊戲中,可能會使用這些優先順序引數來調整音訊的重要程度。最終的效果:final final
終
經過5個小節,FlappyBird 系列教程終於結束了,它基本上涵蓋了 引擎 70~80% 的功能,只有粒子系統和一些隱藏功能沒有被提及。程式碼已經傳到 GitHub - ,關注 master 分支。
零幾年的時候剛上大學,那會在圖書館的角落發現一本叫C語言的書,從此便開始了編碼人生,那會經常著迷於折騰一些程式碼編寫小遊戲,比如俄羅斯方塊、連連看。十幾年過去了經歷了專案的壓力、業務的枯燥,有時候在週末想自己寫些程式碼卻不知道寫些什麼。希望經此教程你可以學會用 引擎做一些小遊戲,重拾編寫遊戲的樂趣。
作者:ntop
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2236/viewspace-2805001/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 用jQuery手寫一個小遊戲jQuery遊戲
- 用 JavaScript 寫一個卡片小遊戲JavaScript遊戲
- 容器flappybird遊戲——圖文操作指引貼APP遊戲
- Python程式碼實現“FlappyBird”小遊戲PythonAPP遊戲
- 我用 GitHub 9.8k 的 Go 語言 2D 遊戲引擎寫了個遊戲GithubGo遊戲引擎
- 用 Go 寫一個簡易的 dockerGoDocker
- 從零開始:用REACT寫一個格鬥遊戲(一)React遊戲
- 用GDX寫個安卓小遊戲安卓遊戲
- 用 Python 做一個 H5 遊戲機器人PythonH5遊戲機器人
- Python:遊戲:寫一個和 XP 上一模一樣的“掃雷”Python遊戲
- 從零開始:用REACT寫一個格鬥遊戲(二)React遊戲
- 用Swoole來寫個聯機對戰遊戲呀!(一)前言遊戲
- 從0開始用python寫一個命令列小遊戲(二)Python命令列遊戲
- 從0開始用python寫一個命令列小遊戲(十)Python命令列遊戲
- 從0開始用python寫一個命令列小遊戲(六)Python命令列遊戲
- 期末前端web大作業——用前端語言寫一個小遊戲前端Web遊戲
- 寫一個狼吃羊的小遊戲遊戲
- 我花了一夜用資料結構給女朋友寫個H5走迷宮遊戲資料結構H5遊戲
- 教你用200行程式碼寫一個偶像拼拼樂H5小遊戲(附原始碼)行程H5遊戲原始碼
- 用原生Go寫一個自己的部落格-搭建專案(一)Go
- 用Swoole來寫個聯機對戰遊戲呀!(三)完善遊戲功能遊戲
- 如何用js寫一個簡單的迷宮和打地鼠遊戲JS遊戲
- 用 Go 寫一個簡單訊息佇列(一):定義訊息和基礎工具Go佇列
- ES6 手寫一個“辨色”小遊戲遊戲
- 七天用 Go 寫個 docker(第一天)GoDocker
- 用 Go 編寫一個簡單的 WebSocket 推送服務GoWeb
- 嘗試用go寫一個音樂搜尋的包Go
- 用three.js寫一個簡單的3D射門遊戲JS3D遊戲
- 我用shell寫了個mud遊戲:武林群俠傳遊戲
- 用 JavaScript 和 C3 實現一個轉盤小遊戲JavaScript遊戲
- Go 寫一個內網穿透工具Go內網穿透
- 一個遊戲運營的5年思考:運營到底有啥用?遊戲
- 用Swoole來寫個聯機對戰遊戲呀!(四)遊戲結束判斷遊戲
- 用Swoole來寫個聯機對戰遊戲呀!(二)單機遊戲架構遊戲架構
- 用Python寫個魂鬥羅,另附30個Python小遊戲原始碼Python遊戲原始碼
- 無聊的週末用Java寫個掃雷小遊戲Java遊戲
- PONG - 100行程式碼寫一個彈球遊戲行程遊戲
- [轉載]用 Go 寫一個輕量級的 ldap 測試工具GoLDA