用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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 用 Go 寫一個簡易的 dockerGoDocker
- 用 JavaScript 寫一個卡片小遊戲JavaScript遊戲
- 用jQuery手寫一個小遊戲jQuery遊戲
- 用Go語言寫一個Windows的外掛(上)GoWindows
- 用原生Go寫一個自己的部落格-搭建專案(一)Go
- 從零開始:用REACT寫一個格鬥遊戲(一)React遊戲
- 用 Go 寫一個簡單訊息佇列(一):定義訊息和基礎工具Go佇列
- 七天用 Go 寫個 docker(第一天)GoDocker
- 嘗試用go寫一個音樂搜尋的包Go
- 用 Go 編寫一個簡單的 WebSocket 推送服務GoWeb
- 用Python和Pygame寫遊戲-從入門到精通(5)PythonGAM遊戲
- [譯] Go 終極指南:編寫一個 Go 工具Go
- Go 寫一個內網穿透工具Go內網穿透
- 我用 GitHub 9.8k 的 Go 語言 2D 遊戲引擎寫了個遊戲GithubGo遊戲引擎
- 用GDX寫個安卓小遊戲安卓遊戲
- gmcache一個用go寫的分散式快取,類似memcachedGo分散式快取
- 容器flappybird遊戲——圖文操作指引貼APP遊戲
- 從零開始:用REACT寫一個格鬥遊戲(二)React遊戲
- [轉載]用 Go 寫一個輕量級的 ldap 測試工具GoLDA
- Python程式碼實現“FlappyBird”小遊戲PythonAPP遊戲
- [Canvas前端遊戲開發]——FlappyBird詳解Canvas前端遊戲開發APP
- 用Swoole來寫個聯機對戰遊戲呀!(一)前言遊戲
- 用 C#.NET 編寫的一個完整字謎遊戲C#遊戲
- 8個炫酷的HTML5動畫、應用和遊戲HTML動畫遊戲
- 最近寫了一個demo,想看看java和go語言是怎麼寫的JavaGo
- Python:遊戲:寫一個和 XP 上一模一樣的“掃雷”Python遊戲
- 七天用 Go 寫個 docker(完結篇)GoDocker
- 七天用Go寫個docker(網路篇)GoDocker
- 期末前端web大作業——用前端語言寫一個小遊戲前端Web遊戲
- 我花了一夜用資料結構給女朋友寫個H5走迷宮遊戲資料結構H5遊戲
- 教你用200行程式碼寫一個偶像拼拼樂H5小遊戲(附原始碼)行程H5遊戲原始碼
- 用 Go 實現一個 LRU cacheGo
- [轉載]用 Go 寫一個輕量級的 ssh 批量操作工具Go
- 七天用 Go 寫個 docker(第三天)GoDocker
- 七天用 Go 寫個 docker(第六天)GoDocker
- 七天用 Go 寫個 docker(第四天)GoDocker
- GO 的鏈式呼叫寫一個轉碼庫Go
- 瘋了吧!這幫人居然用 Go 寫“前端”?(一)Go前端