溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

云計(jì)算后,Go 的下一個(gè)戰(zhàn)場:游戲產(chǎn)業(yè)

發(fā)布時(shí)間:2020-08-02 22:07:13 來源:網(wǎng)絡(luò) 閱讀:718 作者:七仙女很忙 欄目:編程語言

Go 自誕生以來,因其簡單高效的處理效率和對于并發(fā)的出色支持,得到開發(fā)人員的關(guān)注和實(shí)踐。并在 2013 年隨著重磅項(xiàng)目 Docker 的誕生和發(fā)展,逐步在云計(jì)算領(lǐng)域形成燎原之勢。在占領(lǐng)了云計(jì)算后,Go 的下一個(gè)發(fā)力點(diǎn)將會在何方?

在 ECUG Con 十周年盛會上,七牛云 CEO、Go 首席布道師許式偉給出了他心中的答案:游戲行業(yè)。

以下是對他此次演講的內(nèi)容記錄

作為一個(gè)技術(shù)型 CEO,我認(rèn)為技術(shù)人員都是很純粹的,以數(shù)據(jù)為導(dǎo)向,理性判斷趨勢,所以今天我會站在理性角度分析,來聊聊未來 Go 的趨勢,重點(diǎn)是在游戲行業(yè)。

使用 Go 做游戲開發(fā)

云計(jì)算后,Go 的下一個(gè)戰(zhàn)場:游戲產(chǎn)業(yè)

由上圖 我們可以看出 Go 在 Mobile 的發(fā)展時(shí)間軸,從 12 年初開始,實(shí)際上最開始它的關(guān)注度并不高,直到 14 年中旬其活躍程度才有顯著的增加。

云計(jì)算后,Go 的下一個(gè)戰(zhàn)場:游戲產(chǎn)業(yè)

上圖 則顯示,盡管 Go 官方對 Mobile 的支持力度大于 Web,但是 gopher 們對 Web 前端的支持度遠(yuǎn)遠(yuǎn)高出 Mobile。Gopherjs 在社區(qū)的活躍度從 13 年 8 月開始一直很高,從圖中我們可以看出,Gopher 們也有著和 JavaScript 程序員們共同的夢想,使用一種語言統(tǒng)一前后端。

通過上面兩張圖的對比,得出一個(gè)很重要的結(jié)論,就是 Go 在桌面?zhèn)鹊陌l(fā)展,即使用 Go 語言來寫桌面程序,當(dāng)然目前也有很多人在嘗試,包含兩個(gè)流派:通用 UI 和垂直行業(yè)(游戲行業(yè))。Go 團(tuán)隊(duì)官方給出的回答更加側(cè)重后者,關(guān)注垂直行業(yè)——游戲產(chǎn)業(yè)。

為什么會是游戲行業(yè)呢?可以從以下兩點(diǎn)來看一下可行性:

1.市場原因 游戲市場空間巨大;
2.技術(shù)原因 游戲行業(yè)相對其他行業(yè),桌面 OS 的標(biāo)準(zhǔn)控件經(jīng)常被棄用,所以需求相對收斂,更加容易滿足。

接下來探討一下使用 Go 寫游戲的可行性,對于 GUI 來說,基礎(chǔ)支撐是 OpenGL,它本身支持 PC(Windows/Mac/Linux/FreeBSD),Mobile (Android/iOS)以及Web (基于WebGL)。對于游戲來說,分以下幾點(diǎn):PC 端游戲(PC)、頁游(Web)、手游(Mobile),這三項(xiàng)使用 Go也是可以進(jìn)行開發(fā)的:PC端可以通過 OpenGL,手游通過Go Mobile,頁游通過GopherJS(將Go 的代碼編譯成 JavaScript)Go 頁游是非常成熟的,使用的技術(shù)棧也是相對較少的,只需要使用 WebGL 和 GopherJS,還可以調(diào)用 JavaScript框架,諸如

WebGL (https://github.com/gopherjs/webgl)、
jQuery (https://github.com/gopherjs/jquery)、
Websocket (https://github.com/gopherjs/websocket)

總體來說,Go 對 Web 的支持算得上是非常成熟的,它的應(yīng)用面也不局限于頁游,如下圖 所示是一個(gè)仿 React 的一個(gè)項(xiàng)目「vecty」,是使用 Go 進(jìn)行開發(fā)的,由圖我們可以看出這個(gè)項(xiàng)目是在 15 年啟動(dòng)的,活躍度也比較可觀。

云計(jì)算后,Go 的下一個(gè)戰(zhàn)場:游戲產(chǎn)業(yè)

使用 Go 做跨平臺游戲

使用 Go 去做全平臺游戲支持相對于 Web 而言,所能用到東西相對會收斂很多,類似 Javascript 的很多庫就不能再用。

此時(shí)我選擇的技術(shù)方案為:使用 Go 做跨平臺的 Scratch。

首先講一下什么是 Scratch,它是一門面向兒童編程教學(xué)的語言,可以教兒童編寫游戲,目前其排名已經(jīng)擠進(jìn)工程類語言排名的前 20。為什么要使用 Go 來重寫 Scratch 呢? 一是出于我對其的熱愛,其次是 Scratch 目前仍舊存在一些瑕疵,我希望可以去慢慢完善。

2.X 版本(https://github.com/LLK/scratch-flash)只能基于 Flash 編寫并且只能跑在 PC 上,而基于 Google Blockly + React 編寫的 3.0 版本(https://github.com/LLK/scratch-gui)雖然已經(jīng)可用,但是兼容方面仍然存在問題,比如與 2.X 很多地方不兼容,但是2.X的用戶群體是很龐大的。因此 Scratch 還存在很多進(jìn)步空間,是非常值得期待的。

目標(biāo)與挑戰(zhàn)

正是由于 Scratch 的不足,讓我看到了挑戰(zhàn)。我為自己定了一個(gè)目標(biāo),做一個(gè)兼容 Scratch 2.X 的跨 PC、移動(dòng)、Web 多終端平臺的 Scratch 腳本執(zhí)行器。下面是我所面臨的多種挑戰(zhàn):

1.腳本支持—Json 腳本
Scratch3.X 是 Json 腳本,從 parser 角度來看難度不大,但是從 executor 角度來看其難度與使用其他的腳本的難度是一致的。其次,其腳本是單線程偽并行的,由于不同的 Scratch 腳本之間可能會共享變量并且 Scratch 并沒有 mutex 語法,所以真的并行會導(dǎo)致系統(tǒng)邏輯錯(cuò)亂。在Go 當(dāng)中模擬一個(gè)單線程偽并行的程序相對而言還是比較復(fù)雜的,所以這是我面臨的第一個(gè)挑戰(zhàn)。

2.多行文本排版與顯示
True Type 字體的支持,小型排版系統(tǒng)需要考慮行禁(例如:標(biāo)點(diǎn)不能在行首,英文單詞不能分拆到兩行顯示)

3.音頻播放
需要支持常見音頻格式,并且要支持混音(可以同時(shí)播放多個(gè)聲音,應(yīng)當(dāng)要有多個(gè)人同時(shí)說話的效果)

4.SVG 格式支持
Scratch 2.X 內(nèi)建的精靈 (sprite) 都是矢量格式的,并且基于 SVG 格式,SVG 有著非常復(fù)雜的指令集,完整支持等價(jià)于寫一套 GDI Canvas(當(dāng)前 Go 社區(qū)并無成熟的 SVG 渲染的項(xiàng)目)

5.復(fù)雜圖形
云計(jì)算后,Go 的下一個(gè)戰(zhàn)場:游戲產(chǎn)業(yè)

上圖所示的圖形,雖然看似簡單,但是支持卻比較難,當(dāng)然,一旦有 SVG 的支持,這個(gè)只是SVG 的一條指令。

  1. 碰撞檢測
    這基本上是游戲類程序最基礎(chǔ)的需求:兩個(gè)精靈(sprite)的碰撞檢測

實(shí)踐結(jié)果

歷經(jīng)半個(gè)月實(shí)際開發(fā),同時(shí)也由于我在教我兒子學(xué)習(xí)編程時(shí)積淀的 2 年經(jīng)驗(yàn),讓我沉淀了很多素材,現(xiàn)在我所寫的所有 Scratch 教程基本可以正常執(zhí)行,下面就是我這 2 年所積淀的一些素材舉例:

1.社交類
對話:weather-conversation.sb2;包含音頻播放,多行文本排版與顯示,也有很多復(fù)雜的圖形、背后腳本等。下圖所示就是。
云計(jì)算后,Go 的下一個(gè)戰(zhàn)場:游戲產(chǎn)業(yè)

2.×××類
五子棋:five-chess.sb2;圍棋:go-chess.sb2;國際象棋:chess.sb2,這些看起來簡單,但要做到完整要包含協(xié)程(共享全局變量的處理)、復(fù)雜腳本等比較復(fù)雜的東西。下圖 所示是圍棋的示意圖。
云計(jì)算后,Go 的下一個(gè)戰(zhàn)場:游戲產(chǎn)業(yè)

3.小游戲
吃蛋糕:eat-cake.sb2;這個(gè)是我兒子寫的,里面的難點(diǎn)在于碰撞檢測,如下圖

云計(jì)算后,Go 的下一個(gè)戰(zhàn)場:游戲產(chǎn)業(yè)

跨平臺之爭: React Vs.Go

Scratch4.0 是使用 React 做的,而我是使用 Go 去做來進(jìn)行一個(gè)全新挑戰(zhàn)。Scratch4.0 做了很多東西,花了一年多的時(shí)間,功能相對比較完善,但是對于我個(gè)人而言我僅僅做了一個(gè)執(zhí)行器,難度不同,所以最后我會對兩者做一個(gè)對比,比較一下他們之間的優(yōu)缺點(diǎn)。

1.React+React Native
優(yōu)勢:場景比較通用,可以基于 WebGL 也可以開發(fā)游戲;
劣勢:傾向于將 Web 搬到 Native(mobile)技術(shù)棧復(fù)雜,性能相對低;React 框架對開發(fā)游戲的難度基本沒有減負(fù)。

2.Go+GopherJS
優(yōu)勢:技術(shù)棧極簡,上手容易,性能極好;
劣勢:較為小眾;
場景:比較垂直,對游戲有較完整的支持。

總結(jié)

Go 的桌面?zhèn)葢?zhàn)場剛剛開始,但技術(shù)相對而言已經(jīng)比較成熟,盡管很早期,但是由于 Go 所帶來的研發(fā)效率的提升,一定程度上消除了由于早期而導(dǎo)致的資源不足,因此,即便前端知識不足,但是經(jīng)過多年發(fā)展,Go 社區(qū)的豐富資源恰恰彌補(bǔ)了這個(gè)不足。

建議可以適當(dāng)關(guān)注,選擇合適的時(shí)機(jī)進(jìn)軍「戰(zhàn)場」。進(jìn)軍方向可以選擇:其一是使用 Go 寫游戲,它可以做到全平臺支持;其二是使用 Go 寫 Web 應(yīng)用來代替 React 等框架。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI