【CSDN 編者按】這篇文章講述了作者從建筑師轉變?yōu)檐浖_發(fā)人員的五年經(jīng)歷,并分享了他如何通過制作游戲引擎找到編程的樂趣。文章詳細描述了他從制作 Pong 和 Tetris 的克隆版本,到創(chuàng)建自己的 3D渲染世界的過程。
原文鏈接:https://dev.to/lkatkus/why-you-should-make-a-game-engine-5-years-as-a-developer-3ij1
作者 | LAImonas K譯者| 明明如月
責編 | 夏萌
出品 | CSDN(ID:CSDNnews)
人們常說,美好的時光總是短暫。自從我五年前從建筑師轉為軟件開發(fā)者后,我對此深有感觸。
借助我在藝術和設計方面的專業(yè)背景,通過操作 html Canvas 和深入探索編碼的視覺效果,我發(fā)現(xiàn)了一個全新的、充滿樂趣的世界。因此,我對游戲開發(fā)產生了濃厚的興趣。起初,這只是一次出于好奇的小嘗試,但隨著時間的推移,它逐漸演變成了更深遠的追求。這個地方成了我個人的實驗室,我會不斷地將一年中學到的新技術融入到這里。
這段旅程充滿了起伏波折,既有勝利的喜悅,也有失望的沮喪。但始終有一件事在支撐著我,那就是對游戲本身的熱愛。
如果你對此感興趣,請讓我為你娓娓道來。
第 1 年 - 即興創(chuàng)作、適應挑戰(zhàn)和克服困難
事情的起源:盡管在職業(yè)生涯上已經(jīng)取得了成功,但我感到缺乏真正的滿足和快樂。這讓我身心疲憊,意識到必須做出改變。
那時,我對編程已經(jīng)有了一些基本了解。我曾創(chuàng)建自己的作品集網(wǎng)站(作為建筑師的標準做法),為其他企業(yè)開發(fā)了一些基礎網(wǎng)站,并對編程有了初步的涉獵。然而,我從未將編程視為職業(yè)選擇,畢竟我已經(jīng)在建筑領域投入了大量時間。
大概在那個時候,編程培訓機構在各地涌現(xiàn),宣稱能提供豐富的職業(yè)機會。我與附近一所培訓機構的人員進行了交流,他們聲稱提供了三個月的培訓課程,并承諾提供工作。雖然我對此持懷疑態(tài)度,但全職學習似乎是保持專注的好方法。于是,我制定了一個簡單的計劃:全身心投入一年,不留遺憾。
課程內容涵蓋了常見的編程語言,如HTML、css、JAVA、php、Laravel等,目的是培養(yǎng)初級全棧開發(fā)者的能力(盡管這個稱號聽起來有些夸張)。然而,其中有一位 Java 講師引起了我的注意。
"我不僅會教你 Java,還會教你如何像程序員一樣思考。"
這是他的開場白。雖然當時這話聽起來有些俗套,但現(xiàn)在回顧過去,我感到自己非常幸運。他不斷提出的問題,如“這是如何工作的?”“你為什么需要這個?”成了日常的探討。這種深入探究的方式引起了我的共鳴,并幫助我明確了方向。相較于“初級全棧開發(fā)者”這一稱號,“初級 Java 開發(fā)者”顯得更為合適。
受到啟發(fā),我開始在家中尋找項目。畢竟,可以嘗試的項目總是有限的,對吧?那時,我偶然發(fā)現(xiàn)了 HTML Canvas。看到代碼以視覺形式展現(xiàn),特別是以游戲的形式,感覺非常神奇。編寫像 Pong 這樣的小游戲讓我感到興奮,我被深深吸引。我甚至嘗試并成功地制作了俄羅斯方塊!
那么,在嘗試創(chuàng)建 Pong 或俄羅斯方塊之后,接下來的步驟是什么呢?對我來說,自然的選擇是制作一個馬里奧的克隆版本!這是一個全新的挑戰(zhàn)——創(chuàng)建瓷磚、實現(xiàn)玩家與其互動、跳躍等看似簡單的功能。這是否值得?答案是肯定的!它甚至幫助我在多次被拒絕后找到了第一份工作。
隨著培訓機構課程的結束,尋找工作的壓力也隨之而來,我不想讓所有努力白費。因此,我將那個簡單的馬里奧項目轉化為我的個人網(wǎng)站,展示我的編程經(jīng)歷,或許是為了展示自己的能力,也或許是為了未來能繼續(xù)在上面工作。
第 2 年 - 循序漸進,引領變革
在最初的“我現(xiàn)在已經(jīng)真正成為了一名開發(fā)者了”這一激動時刻過去后,我意識到自己必須繼續(xù)努力發(fā)展。那么,接下來該做什么呢?我已經(jīng)完成了 Pong、俄羅斯方塊、馬里奧克隆版的開發(fā),接下來的目標自然是 德軍總部(Wolfenstein )3D。
由于我已經(jīng)為平臺游戲構建了一個基于圖塊的系統(tǒng),剩下的任務就是改變其渲染方式——從本質上來說,就是創(chuàng)建一個光線投射引擎。關于這個主題有許多教程和視頻,甚至包括 John Carmack 本人的一些演講。我需要做的就是將其轉化為 Java 代碼。
出乎意料的是,這個過程并不像我想象的那么復雜。實際上,它相當鼓舞人心。當然,它并不完美,但我將其視為一次有趣的實驗。當時我并未意識到,像 3D 圖形的這次嘗試將成為提升我作為開發(fā)者技能的重要推動力。
下圖是我的 enStein 項目的效果。請注意,它僅支持使用鍵盤(箭頭按鈕)進行控制,所以別抱太大期待。
第 3 年 - 沒創(chuàng)建過 NPM 包,你真的算開發(fā)者嗎?
在逐漸適應開發(fā)者角色,并涉足前端工作之外的領域后,我意識到應該繼續(xù)優(yōu)化我的游戲,讓它的更新和部署更便捷,還要進一步擴展功能。
今年的主要焦點是將部分邏輯提取到一個獨立的包中,因為我已經(jīng)開始考慮在其他地方使用它。劇透一下:一個移動應用, LaikaJS 因此誕生。
將游戲邏輯與設計元素分離,成為了游戲的轉折點。這使我能夠更有效地專注于每個方面的開發(fā)。隨著新功能的加入(如多重背景、音樂、NPC 等),我感到有動力重新審視并改進視覺效果。畢竟,為什么代碼應該是唯一看起來精致的部分呢?
你可以在這里查看最新版本。
第 4 年 - 從游戲樂趣到應用實踐
我已經(jīng)參與了多個項目,并積累了足夠的經(jīng)驗來深入探索 React Native。由于我的游戲的核心 Java 基礎已經(jīng)打下,我決定將其轉化為一個應用程序。這個任務會有多大難度呢?結果證明,我大大低估了它的復雜性。
首先,也是最主要的問題,沒有原生 Canvas 可用!雖然從技術上可以找到一些實現(xiàn)方式,但性能遠不理想。那么解決方案是什么呢?WebGL 成了我的救星。然而,這里有個問題——WebGL 的學習曲線是我迄今為止遇到的最陡峭的之一。我不得不學習 WebGL API,理解 GPU,并實現(xiàn)通用邏輯。值得一提的是,我想直接學習 WebGL 本身,所以并未選擇使用庫。
經(jīng)過一段時間的努力,我掌握了 WebGL 的基礎知識,并成功實現(xiàn)了我想要的所有游戲邏輯!
容易嗎?并不是那么容易。但值得嗎?絕對值得!你可以在 PlayStore 下載并自己體驗一下。
第 5 年 - 沉浸在 WebGL 的世界中
這一年,我開始學習 WebGL,將我的 2D 世界轉化為 3D 世界也是順理成章的事情。
為了實現(xiàn)這一目標,我需要真正深入了解 WebGL 和計算機圖形學,而不僅僅是盲目摸索。Andrew Adamson 的精彩教程對我?guī)椭畲蟆?/p>
今年還有一件事讓我印象深刻,那就是我終于開始閱讀專門的數(shù)學和計算機圖形學書籍。雖然數(shù)量不多,但對我來說,這感覺像是一個重要的里程碑。
有時,這感覺像是我日常工作的一個分支,但長大后的電子游戲愛好、大學時使用的 3D 軟件,以及作為一名對軟件感興趣的建筑師,讓我對此產生了濃厚的興趣。更好地理解計算機圖形學讓我更加欣賞圖形工程師的工作。
但無論如何,盡管這個項目仍在進行中,我對自己所取得的進展感到非常激動。從 Pong 到俄羅斯方塊,再到 2D 平臺游戲,再到簡單的 3D 渲染,現(xiàn)在已經(jīng)是一個完整的 3D 世界了。
第 n+1 年
轉行成為開發(fā)者是一個艱難的決定,但我為自己能邁出了這一步感到高興。到目前為止,這是一段令人驚嘆的旅程,作為曾經(jīng)的建筑師我感到非常滿足。軟件開發(fā)與建筑之間存在許多相似之處,這可能超出了許多人的想象。
我懷著激動的心情期待未來五年的旅程。也許當 AI 使所有開發(fā)者變得過時,我將不得不學習新的技能。
簡言之,我熱愛編程。
你是否也曾從一個領域轉到另一個完全不同的領域?你的經(jīng)歷是怎樣的?歡迎在評論區(qū)分享討論。
參考鏈接
- Laimonas K:https://dev.to/lkatkus
- enStein :https://katkus.eu/demo/wjs
- LaikaJS:https://www.npmjs.com/package/laikajs
- 這里(第三段落):https://katkus.eu/
- PlayStore:https://play.google.com/store/Apps/details?id=eu.katkus.MySuperJavaAdventure&pli=1
- Andrew Adamson:https://www.YouTube.com/@osakaandrew
- 這里(第五段落):https://katkus.eu/3d