雲風的 BLOG: 3d engine 專案招聘
我們的 3d engine 專案從 2018 年 1 月底開始,已經過去 10 個月了。比原計劃慢,但是進度還可以接受。目前已經大致完成了執行時的基礎渲染框架(基於 ecs 模式),整合了 bullet 物理引擎,開發了一個基於網路的虛擬檔案系統,可以不依賴本地的資源/程式碼直接遠端執行。另外還開發了一個 lua 的遠端互動偵錯程式,可提升 lua 的開發效率。
單從 runtime 角度,引擎的完成度已經較高。但和之前開發 ejoy2d 不同,這次希望把引擎的側重點放在工具鏈上。所以雖然有計劃開源,但在工具鏈不成熟的現階段,暫時還是閉源開發。
目前團隊有全職程式 3 名,我個人沒有全職加入,但也花了頗多精力在上面。所以在關鍵節點上,我們已有 4 個人全力開發。
現在想再招聘一名成員,主要想補充工具鏈,尤其是開發環境/編輯器的開發。讓引擎可以在半年內可用於新遊戲 demo 的開發。對於這個職位,可以列出下列明確的需求:
相關推薦
雲風的 BLOG: 3d engine 專案招聘
我們的 3d engine 專案從 2018 年 1 月底開始,已經過去 10 個月了。比原計劃慢,但是進度還可以接受。目前已經大致完成了執行時的基礎渲染框架(基於 ecs 模式),整合了 bullet 物理引擎,開發了一個基於網路的虛擬檔案系統,
雲風的 BLOG: Skynet 1.2.0
今天我釋出了 skynet 1.2.0。 距離上次釋出 1.1.0 已經有一年了。雖然我覺得給 skynet github 倉庫裡某個特定版本起個有意義的名字並無太大意義,因為我也不會刻意去維護一個所謂穩定版。但在 issues 中還是發現有一些
雲風的 BLOG: 給 skynet 增加網路統計
這些資料通過系統的 netstat 指令也可以查到,但是由 skynet 提供,可以查到更多細節:最關鍵的內部資訊是一個 socket 被繫結在 skynet 的哪個內部服務上,這是系統的 netstat 無法提供的資訊。 在設計獲取統計資訊
雲風的 BLOG: 判斷點是否在三角形內的演算法精度問題
我看了一下原始碼,把這個函式提出來,改寫了一點點,方便獨立測試。 #include <stdio.h> // #define float double static float dtVdot2D(const float v0[3]
雲風的 BLOG: Lua GC 的原始碼剖析 (1)
/* ** Union of all Lua values */ typedef union { GCObject *gc; void *p; lua_Number n; int b; } Value; /* ** Tagge
雲風的 BLOG: Lua 虛擬機器的封裝
我們面臨的需求是:建立一個(或幾個)Lua 虛擬機器,定期驅動它執行。重點在,定期驅動它執行。這可視為向虛擬機發送訊息,虛擬機器本質上是訊息驅動的(其實 Windows 程式也是)。通常,有一個時鐘驅動的行為,或者有一個渲染幀驅動的行為;然後,有外
雲風的 BLOG: 動作遊戲中的擊打判定
即使現在用 3d 技術來渲染,大多數格鬥遊戲依然可以歸到 2d 格鬥型別中,還是可以用這種方法來做的。比如最新的 Street Fighter 5 ,完全延續了平面 AABB 攻擊盒的規則。在網上甚至可以找到工具 顯示出攻擊盒,幫助玩家訓練,提高技
雲風的 BLOG: lockstep 網路遊戲同步方案
首先,我認為把 lockstep 翻譯成幀同步,還有與之對應的所謂“狀態同步” (我在多次面試中聽過這個名詞),都是對同步演算法的錯誤理解造成的。把自己所理解的演算法牽強附會到已有的在歐美遊戲先行者中經過實踐的方案上。 btw, 前幾天和幾位做區
雲風的 BLOG: Lua 的多執行緒支援
這些個方案都允許使用者在不同的虛擬機器間相互呼叫函式,大約是利用在虛擬機器間同步函式的位元組碼和 upvalue 實現的。基於這些執行緒庫的程式,用起來和別的支援多執行緒的語言(比如 Golang)那樣沒有太大區別。 但我不喜歡這種多執行緒解決方
雲風的 BLOG: 用 2d 縮放及斜切變換模擬斜視角下的旋轉
我對牆壁的旋轉很感興趣,一開始以為是預渲染了若干張圖。後來試著解開了 .kwad 資源包(可自行 google 到工具)發現裡面的資源圖片只有一或兩張。ps. 圖片是用 zlib 壓縮過的 RGBA 點陣圖,格式也可以 google 到。 以門為
雲風的 BLOG: 虛擬檔案系統的自舉
首先我不想做的太複雜。我們不需要特別彈性的不同檔案系統模組掛接到虛擬檔案系統的不同目錄上的功能。所以我寫死了一個叫 .firmware 的目錄,專門存放用來自舉所需的基礎程式碼(的備用版本)。這塊程式碼在啟動後可以在網路模組載入完畢後,用新的版本覆
雲風的 BLOG: Lua C API 的正確用法
當 lua 發生了未捕獲的異常時,會呼叫 panic 函式,然後呼叫 abort() 退出程序。一個補救的方法是在框架的最外層設定一個恢復點:C 語言用 setjmp ,C++ 用 try catch 。在 lua_atpanic 設定的 pani
雲風的 BLOG: Lua GC 的原始碼剖析 (2)
lua 的 GC 分為五個大的階段。GC 處於哪個階段(程式碼中被稱為狀態),依據的是 global_State 中的 gcstate 域。狀態以巨集形式定義在 lgc.h 的 14 行。 /* ** Possible states of th
雲風的 BLOG: Lua GC 的工作原理
幾乎所有現代程式語言都有自動化記憶體管理設施,在記憶體不再使用的時候,能夠自動釋放它們。有兩種方法可以做到這點,一是引用計數,二是垃圾收集。引用計數有迴圈引用無法將不再使用的物件引用減到零的問題,但這並不是 Lua 選擇垃圾收集方法的主要原因。主要
雲風的 BLOG: 《我的程式設計感悟》 Archives
我有一個忘記從哪繼承來的觀點:無論我們想學什麼,都應該從學習他的歷史開始。極端點說,無論學什麼,都是在學他的歷史。 前幾天在北京見到了我的小表妹,她剛上初一,人極為聰明。七年前我在北京工作時,她還沒有上小學。那個時候我就回答過她許多科普問題。一個
雲風的 BLOG: 伺服器排隊系統的一點想法
遊戲系統需要估計自己的環境大約可以支援一定時間段多少人可以進入。這個用來估算每個新使用者的大致等待時間。 遊戲系統採用一個以時間為演算因子的序列 key ,用來做進入的驗證。只有持有這個 key 的使用者才認為是經過排隊的。允許進入。 排隊伺服
雲風的 BLOG: 遊戲資源倉庫及升級釋出
這次實現,我們去掉了目錄和檔案處理方式上的差異,一律都變成了以其內容的 hash 值為檔名(key)的資料塊。倉庫僅僅是一個 key-value 的資料倉庫,以內容 hash (選用了 sha1 演算法)為檔名放在倉庫目錄下。為了避免單個目錄檔案太
雲風的 BLOG: ejoy2d sprite pack 的空間優化
其實方法很簡單。在 64bit 平臺上,我將 sprite pack 結構中的指標都改成了一個 32bit 的相對 pack 頭的偏移量。 在設計之初,我就是把整個 sprite pack 存放在連續單個記憶體塊上的。為之做了一個非常簡單的 bu
雲風的 BLOG: 可靠 UDP 傳輸
本文分三個部分:一,什麼時候有可能採用 UDP 通訊而不是用 TCP 更好;二,一個可靠的 UDP 通訊模組的 API 介面該如何設計;三,一個簡單的實現。 首先,我一直是非常反對在 UDP 協議上實現一個可靠傳輸協議的,即類似 TCP ov
雲風的 BLOG: sproto 的預設值處理
sproto 由於主要供 lua 使用,是不能在協議定義中描述預設值的。所有不編碼的欄位都呈現為 lua 中的 nil 。 注:這裡還有個實現上的小問題。如果一個數組為空,也會呈現為 nil 而不是空表,所以應當注意處理。 我最近給 sprot