iT邦幫忙

鐵人檔案

第 11 屆 iThome 鐵人賽
回列表
Software Development

從讀遊戲原始碼學做連線遊戲 系列

在 2019 年 8 月初的時候剛好有一款停止營運的網頁遊戲公開了原始碼,因為是一款有著即時對戰機制的遊戲因此相對於線上遊戲來說比較不複雜,但是內容豐富程度也不會太過單調。因此就跟朋友開始架設跟營運這款遊戲,既然都要讀原始碼了解這款叫做 Unlight 的遊戲,不如就跟大家分享一下 Unlight 在「連線」機制上的設計,還有實際上要怎麼寫出自己的連線框架。

鐵人鍊成 | 共 33 篇文章 | 49 人訂閱 訂閱系列文 RSS系列文
DAY 1

達標好文 Day 01 - 要怎麼做連線遊戲?

我想很多人開始學習寫程式的原因是想要製作遊戲,我最初也是希望當一個遊戲設計師,雖然後來開始寫程式的契機是架設網站。不過終究還是走上了跟遊戲開發相關的道路,還記得...

2019-09-15 ‧ 由 蒼時弦也 分享
DAY 2

Day 02 - Client 與 Server 的溝通 - 暖身一下

既然要開發連線遊戲,最一開始需要的思考的問題就是「玩家之間該怎麼連線?」 基本上如果要產生一個連線的話,勢必會有人要扮演伺服器的角色。如果是多人連線遊戲的話,大...

2019-09-16 ‧ 由 蒼時弦也 分享
DAY 3

Day 03 - Client 與 Server 的溝通 - 同時處理多個連線

在上一篇的範例中,我們會發現無法「多人連線」,這是因為 Ruby 的程序會因為有一個連線進入後就呈現了阻塞(Blocking)的狀態,為了處理這樣的問題在大多數...

2019-09-17 ‧ 由 蒼時弦也 分享
DAY 4

Day04 - Client 與 Server 的溝通 - 使用 EventMachine 管理連線

既然知道了 EventMachine 在 Unlight 專案中扮演了處理 TCP 連線的角色,不過實際上又是怎麼設計跟實作的呢? 我們先來看一下在 Event...

2019-09-18 ‧ 由 蒼時弦也 分享
DAY 5

Day 05 - 指令系統 - Unlight 指令結構分析

在我們能跟伺服器溝通後,就需要來定義伺服器跟客戶端如何發送跟接收對方所傳遞的資料。以 HTTP 協定來說就是一種溝通的方式,伺服器跟瀏覽器都已預先定義好的格式發...

2019-09-19 ‧ 由 蒼時弦也 分享
DAY 6

Day 06 - 指令系統 - Unlight 的指令處理(一)

在上一篇我們了解指令是如何從封裝後客戶端發送到伺服器,我們依舊不清楚 Unlight 是如何將指令的內容轉換成可以被程式執行的動作。因此我們還需要了解 Unli...

2019-09-20 ‧ 由 蒼時弦也 分享
DAY 7

Day 07 - 指令系統 - Unlight 的指令處理(二)

為了要知道 @func_list 是在哪裡被定義,我們繼續在原始碼裡面找到 #post_init 這個方法,內容大致上如下 # 接続時 def post_ini...

2019-09-21 ‧ 由 蒼時弦也 分享
DAY 8

Day 08 - 指令系統 - Unlight 的指令處理(三)

繼續往下看到 #init_receive 方法的部分,不過出現了一些比較少見的程式碼。 # 受信コマンドの初期化 def init_receive(cmd)...

2019-09-22 ‧ 由 蒼時弦也 分享
DAY 9

Day 09 - 指令系統 - Unlight 的指令處理(四)

到上一篇為止我們已經知道 register_r 這類解析資料的 _r 類型方法是怎麼定義的,但是卻不知道當解析完畢後後直接呼叫的方法實際上是做什麼。 我們繼續以...

2019-09-23 ‧ 由 蒼時弦也 分享
DAY 10

Day 10 - 指令系統 - 客戶端發送指令(一)

我們已經知道伺服器是如何接收指令並執行,不過我們還不清楚客戶端要如何將指令發送到伺服器執行玩家的操作。不過因為 ActionScript 在目前 Flash 已...

2019-09-24 ‧ 由 蒼時弦也 分享