使用 Amethyst Engine 實作小行星遊戲

A 13-post collection

使用 Amethyst Engine 實作小行星遊戲 - 12 更多的狀態

這章我們要一口氣新增兩個新的狀態:StateMenu 跟 StateOver,基本上因為不同的 state 都分到不同的檔案,所以多幾個 state 也沒差。
這章其實沒有太多需要介紹的,只有在 state 轉換上面多費點功夫,這部分可以先畫一個狀態圖讓整體更清楚:
stateflow

Continue Reading...

使用 Amethyst Engine 實作小行星遊戲 - 11 事件

上一篇我們做了兩個 state:遊戲進行和暫停的 state,理論上整個遊戲還需要更多的 state:像是遊戲結束、遊戲選單等等,但在這之前我們要先介紹 amethyst 的 event channel。
先前我們在 state 間切換是透過按下鍵盤的事件,但遊戲進行間可能有些場景的轉換是由遊戲內的事件發動的, 例如我們的太空船被隕石砸到,要從遊戲狀態切到遊戲結束,這時候就要透過 event channel 來發送事件了; 同時,用了 EventChannel 可以讓我們改寫一些之前的程式碼,把不同功用的程式分到不用的 system 裡,不用全塞在一起。

Continue Reading...

使用 Amethyst Engine 實作小行星遊戲 - 10 暫停狀態

因為搬家(詳見上一篇)的關係好久沒有更新了;現在搬完家終於可以回來繼續寫 amethyst 的文章啦, 現在寫文章插 code 根本是一種享受,跟 blogger 那種鳥編輯器完全不一樣。
到目前為止,我們討論的範圍都不脫 ECS 的範疇,這兩章我們會實作更多有關 state 的部分, 我覺得寫到這邊我比較有感受到 amethyst 整體的架構是怎麼實作的,但也只是個人的感覺就是。

我們這章先來實作一個小小的功能,就是按下 esc 鍵的時候,能讓遊戲暫停下來, 對應 amethyst 的文件是第十章的 controlling system execution

Continue Reading...

使用 Amethyst Engine 實作小行星遊戲 - 8 使用 ncollide2d 實作碰撞

碰撞偵測應該也是許多遊戲內必要的元素之一,比如說我們的打小行星遊戲,就需要偵測雷射砲跟小行星的碰撞,以及小行星和太空船的碰撞。
簡單一點的土砲法,是用 for loop 把小行星跟電射砲的座標收集起來,太近的兩者把 entity 刪掉就行了; 但我們畢竟身為專業的遊戲設計(才怪),用土砲法就太遜了,這裡我們用同樣是 rust 寫的 ncollide2d 套件來實作碰撞偵測。

Continue Reading...

使用 Amethyst Engine 實作小行星遊戲 - 3 連接輸入

這章有點短,但因為接了鍵盤輸入又要介紹處理輸入的 system 的話,篇幅又太長了,以每章都介紹同樣內容的原則獨立出來;對應為 pong tutorial 的第三章前半部

我們上一章已經寫了幾個 entity 跟 component,這章要開始進到 system,用來操作 entity 跟 component 的內容,在每個 frame system 都會叫起來執行一次,不做事或者做點變動。

Continue Reading...