“微信小游戲開發(fā)”系列圖書包含《微信小游戲開發(fā):前端篇》和本書,融合了騰訊云TVP李藝多年來的一線項目研發(fā)和教學經驗。本書在前端篇的基礎上,繼續(xù)講解微信小游戲開發(fā)后端部分的內容,主要包括本地功能開發(fā)、云開發(fā)實踐、后端程序編寫等,最終讓讀者掌握微信小游戲全棧開發(fā)的知識體系與核心技能,并完成一個精心設計的實際項目。本書隨附完整的項目源碼,以方便讀者學習和實踐。
本書共7章,主要內容如下。
第1~3章 本地功能
學習微信小游戲開發(fā),少不了要學習平臺組件和接口。這3章主要介紹如何利用平臺組件和接口實現(xiàn)微信小游戲開發(fā)中常用的本地功能,比如讀寫本地緩存和本地文件、顯示用戶的位置信息、添加背景圖片、監(jiān)聽并記錄錯誤、添加排行榜和廣告等。通過這3章的實踐,我們將使小游戲項目的本地功能更加完善,同時進一步了解微信小游戲的平臺能力,為以后自學平臺組件和接口打下基礎。
第4、5章 云開發(fā)
云開發(fā)可以顯著降低運維成本和運維復雜度,對于獨立開發(fā)者來說尤為適合。云開發(fā)技術一直在快速演進,不斷有新功能、新接口出現(xiàn)。在這兩章中,我們將進行基礎云開發(fā)(云函數(shù)、云數(shù)據庫、云存儲)方面的實踐,了解其運行機制,這樣無論以后云開發(fā)技術如何推陳出新,我們都能快速掌握并運用。
第6、7章 后端
編寫后端程序是重中之重。在這兩章中,我們在保證技能實踐的全面性的前提下,盡量將內容簡化。我們將使用兩種常用的后端技術Node.js和Go編寫同一套接口,實現(xiàn)相同的后端程序功能。在編寫后端接口程序和Web后臺管理程序時,書中提供了分別基于koa2(Node.js Web框架)和Iris(Go Web框架)的快速開發(fā)項目模板,即使你是初學者,也能很快入門。
(1)作者權威:微信學堂“小程序性能優(yōu)化實踐”作者李藝新力作,騰訊云TVP專家,中移聯(lián)合智庫ICT專家級講師,前北京協(xié)同創(chuàng)新研究院人工智能課題項目技術負責人。(2)7位專家推薦:蔣濤、熊平、黃希彤、廖雪峰、陳超、寇永贊、舒欣。(3)內容豐富,深刻全面:等于《從零起步學JS》+《微信小游戲基礎開發(fā)》+《微信小程序云開發(fā)》+《微信小程序Node.js+Go全棧開發(fā)》4本書。(4)實戰(zhàn)式拓展:不直接說教,通過一個個刻意設計的小功能案例,讓讀者自己實踐、領悟、逐步突破、適當拓展,從而做到印象深刻、循序漸進、全面掌握。
在極客時間成立四周年之際,筆者在該平臺上分享過這樣一段話:
我是一個砌石階的人。2021年國慶節(jié)我在趕書稿時,看著最終敲定的復雜代碼,突然確信—我所撰寫的這套技術圖書對讀者來說是有價值的。其價值就在于整套書都在寫一個PBL(Project Based Learning,項目引導式學習)實戰(zhàn)案例,從最開始的3行代碼,到最終的幾萬行代碼。試想一下:如果要求學習者直接以結果代碼為模板進行練習,那肯定不太友好;但如果是讓學習者跟著筆者講解的節(jié)奏,從基礎代碼一步步修改得到結果代碼,那他應該會很有成就感吧。
學編程就像登山,只要一步一個腳印堅持往上爬,就可以到達山頂。泰山雖高,但只要一步一級臺階,終可看到山頂無限風光;而如果有人不走臺階,從荒山野嶺中攀爬,那他將很難爬上去。
這本書及它的姊妹篇《微信小游戲開發(fā):前端篇》就在這種指導思想下完成了。
很多程序員坦言,他們的編程技能并不是在大學里學到的,而是在走向工作崗位以后練就的。在IT公司中,新人成長最快的方式就是有人帶,師傅帶著徒弟做一個項目,等到項目完成時,徒弟也就將編程技能掌握得差不多了。筆者希望以書面的形式帶領讀者來學習,就像公司里老人帶新人一樣,通過一個PBL實戰(zhàn)項目,系統(tǒng)地學習與前后端相關的所有知識點和技能點。
為什么要這樣學習呢?下面先看一下新人學習編程一般需要經歷的5個階段。
初學者進入一個行業(yè),首先要學習基礎知識。有了基礎知識,才能通過實踐不斷積累經驗和技能;有了積累,最后才有可能頓悟。這個過程涉及5個階段,這5個階段可以用我國的古代典籍《易經》中的描述來概括。
初九,潛龍勿用。
九二,見龍在田,利見大人。
上六,龍戰(zhàn)于野,其血玄黃。
九五,飛龍在天,利見大人。
上九,亢龍有悔。
這里的五段爻辭分別對應著編程學習的以下5個階段。
“潛龍勿用”指的是神龍潛伏于水中,暫時還發(fā)揮不了作用。此時學習者剛學會了一點皮毛,不要著急應用。
“見龍在田,利見大人”指的是神龍已出現(xiàn)在地面上,才干已經初步顯露出來,利于被伯樂看到。此時學習者已經習得了一些本領,但根基尚不牢靠。
“龍戰(zhàn)于野,其血玄黃”指的是神龍戰(zhàn)于四方,天地亦為之變色。此時學習者已經通曉了面向對象、模塊化、設計模式等基礎編程技能,可以獨立負責一個項目或維護一個開源軟件了。
“飛龍在天,利見大人”指的是神龍飛上天空,象征德才兼?zhèn)涞娜艘欢〞兴鳛。此時學習者的知識已經具備相當?shù)纳疃群蛷V度,知識結構更加完善。
“亢龍有悔”一般意為居高位的人要戒驕,否則會因失敗而后悔。這里指的是神龍飛得過高,可能會發(fā)生后悔的事。雖然此時學習已經基本結束,但是不要覺得學完了就萬事大吉,有些內容需要反復溫習,經過長期積累才能頓悟,產生新的認知。
了解了這5個階段以后,有的讀者可能會問,我們在學習編程時,是應該先學習基礎知識再學習具體的開發(fā)技術,還是應該先學習一門具體的開發(fā)技術再在工作中夯實基礎呢?這是一個老生常談的問題。
關于如何學習編程,一直有自下而上與自上而下的方式之爭。自下而上的學習方式,指的是先學習計算機基礎知識,再學習具體的某項技術;自上而下的學習方式則是反過來,指的是先學項具體的技術,再在工作中夯實基礎。
筆者的主張是,運用PBL教學思想,在一個虛構的實戰(zhàn)項目中將理論與實踐相結合,同時學習基礎知識與具體的技能。
2020年由北京市十一學校牽頭,北京懷柔九渡河小學做了一次PBL教學實驗。九渡河小學遠離城區(qū),師資力量薄弱,學校就地取材,從附近村民中招攬了40余位傳統(tǒng)手工藝人,讓這些手工藝人教學生們磨豆腐、剪紙、糊燈籠等傳統(tǒng)手藝。學校老師則把1至6年級需要學習的所有知識點打散,然后全部融入這些傳統(tǒng)的手工藝實踐活動中,讓學生在實踐活動中學習。教學實驗非常成功。
在編程這個領域,學習者根本不需要考慮應該自下而上學習還是自上而下學習。以往舊的學習方式,無論是在學校里按部就班地學習基礎,還是在社會培訓機構里實踐應用技能,都存在一定的偏差。最好的編程學習方式是在一個PBL教學案例中,既學習基礎知識,又鍛煉必要的技能,這也是最接近于公司里老人帶新人的學習方式。
關于這套書
筆者撰寫的這套“微信小游戲開發(fā)”系列圖書共包含兩本:一本是《微信小游戲開發(fā):前端篇》,主要通過一個小游戲實戰(zhàn)項目,帶領讀者從3行代碼開始,一步步學會JavaScript(下文簡稱JS)語言、模塊化重構、面向對象的軟件設計技巧及常見設計模式的實際應用技巧;另一本就是本書,主要內容包括小游戲常用本地功能優(yōu)化、廣告組件與社交營銷排行榜、云函數(shù)與云數(shù)據庫、后端接口程序及后臺Web管理系統(tǒng)等。前面提到的5個學習階段—潛龍勿用、見龍在田、龍戰(zhàn)于野、飛龍在天和亢龍有悔,前4個階段正好對應這兩本書中的四篇內容。其中:《微信小游戲開發(fā):前端篇》含潛龍勿用、見龍在田、龍戰(zhàn)于野這三篇,共11章,32課;《微信小游戲開發(fā):后端篇》即飛龍在天篇,共7章,18課。亢龍有悔篇作為番外篇,在筆者公眾號“藝述論”中回復關鍵字10000即可
看到。
微信小游戲是當下最適合新人學習的編程技術,所以筆者選擇它作為本套書的練習項目。表面上讀者學習的是微信小游戲項目開發(fā),但實際上卻是在系統(tǒng)學習編程語言、技巧及思想,小游戲項目僅是作為一個最適合新人的學習形式而存在的。
兩本書的講解風格、寫作指導思想是一致的,內容是連貫的,練習的也是同一個項目,對于編程初學者而言,宜先閱讀前端篇,再學習后端篇。
本書主要內容
后端開發(fā)是全棧開發(fā)中非常重要的一環(huán),不可或缺。本書主要講解微信小游戲后端開發(fā)實戰(zhàn),共7章。
第1~3章 本地功能
這3章主要介紹在微信小游戲開發(fā)中常用的本地功能。學習微信小游戲開發(fā),離不開學習平臺組件和接口。通過這3章的實踐,我們將能使小游戲項目在本地功能方面更加完善,同時進一步了解微信小游戲的平臺能力,為以后自學全部平臺組件及接口打下
基礎。
第4、5章 云開發(fā)
云開發(fā)可以顯著降低開發(fā)者的運維成本和運維復雜度,對于獨立開發(fā)者來說尤為適合。云開發(fā)技術一直在快速進化,不斷有新能力、新接口出現(xiàn)。在這兩章中,我們將進行基礎云開發(fā)(云函數(shù)、云數(shù)據庫、云存儲)方面的實踐,了解其運行機制,這樣無論以后云開發(fā)技術如何推陳出新,我們都能快速掌握和運用。
第6、7章 后端
這兩章主要講解如何編寫后端程序,是重中之重,我們盡量將實踐內容簡化,同時保持技能實踐的全面性。我們將用兩種常用的后端技術Node.js和Go編寫同一套接口,實現(xiàn)相同的后端程序功能。Node.js是“后端的JS”,好入門、易上手、應用廣泛,值得學習;Go語言天生支持高并發(fā),被稱為“互聯(lián)網時代的C語言”,是全棧工程師必學語言
之一。
讀者對象
每一本書都有它特定的讀者,本套書面向編程新人,主要包括以下人群。
大中專院校的在校學生及編程培訓機構的初學人員。
準備轉型開發(fā)的運維人員和產品經理。
在閱讀過程中如果感到吃力,可以先學習番外篇中的計算機基礎、JS語言語法和Go語言語法等內容。這些內容在筆者公眾號“藝述論”中回復相應關鍵字即可看到。
如何學習本書
本書基于PBL教學理念撰寫,以一個小游戲項目貫穿始終,內容由易到難,建議初學者按部就班地從前向后依次學習。為了啟發(fā)讀者思考,書中特意增加了以下兩類內容。
原因探索引導。讀者在書中可能會看到一些運行錯誤,這些錯誤是我們在實際開發(fā)中經常會遇到的,這時適合停下來,想一想為什么會出現(xiàn)這樣的問題,應該如何解決。
拓展內容。書中凡標題中帶有“拓展”字樣的小節(jié)都屬于實踐拓展內容,這些內容與當前的實踐密切相關,有助于加深對當前實踐主題的理解。
本書附有隨書示例源碼供讀者下載,關于源碼的使用,有以下兩點說明。
示例源碼是分目錄獨立放置的,各目錄下的示例互不影響。代碼頂部一般都附有源碼文件的相對地址,另外當某課內容涉及代碼運行及測試時,也會提示示例的相對目錄,讀者只需查看對應的示例即可。
對于不同語言的示例源碼,需要使用不同的測試方式。如果是JS代碼,可以使用Node.js或babel-node測試;如果是小游戲項目源碼,則需要通過微信開發(fā)者工具測試。具體如何使用,書中都有詳細講解。
如何獲取更多資源
為方便讀者學習,本套書為讀者提供以下額外資源。
項目源碼與讀者交流群
關注筆者的微信公眾號“藝述論”,回復關鍵字10000即可下載所有隨書示例源碼。同時,還能看到讀者交流群的入口。歡迎所有讀者進群交流。
為了避免因為軟件版本差異給讀者帶來不必要的使用困惑,筆者將書中用到的所有軟件也放在了源碼包中,下載后在software子目錄下即可看到。
李藝 騰訊云TVP,有近20年互聯(lián)網軟件研發(fā)經驗,參與研發(fā)的音視頻直播產品曾在騰訊QQ上線,有數(shù)千萬人使用;是中移聯(lián)合智庫ICT專家級講師,一汽大眾等企業(yè)內訓講師,北京協(xié)同創(chuàng)新研究院人工智能項目技術負責人。國內早期閃客之一,曾自定義課件標準并完成全平臺教育課件產品研發(fā),被Adobe官方選為中國社區(qū)管理員。業(yè)余喜歡寫作,創(chuàng)建微信公眾號和視頻號“藝述論”,用以分享技術教程,是微信學堂“小程序性能優(yōu)化實踐”和極客時間“微信小程序全棧開發(fā)實戰(zhàn)”的專欄作者,著有《小程序從0到1:微信全棧工程師一本通》等書。
目 錄 Contents
序一
序二
前言
第1章 本地功能:本地存儲與
LBS定位1
第1課 讀寫本地緩存1
創(chuàng)建數(shù)據服務單例,實現(xiàn)本地數(shù)據
讀取2
拓展:使用Storage面板管理本地
緩存數(shù)據4
面向Promise編程:異步轉同步5
如何清除本地緩存12
本課小結13
第2課 使用FileSystemManager讀寫
本地文件13
讀寫本地文件,實現(xiàn)數(shù)據服務模塊14
面向Promise編程:避免使用try catch17
本課小結20
第3課 使用騰訊位置服務顯示用戶
城市20
使用騰訊位置服務21
拓展:小心隱藏字符錯誤27
解決回調函數(shù)簡寫引發(fā)的錯誤28
使用異步轉同步技巧重寫LBSManager29
本課小結30
第2章 本地功能:優(yōu)化游戲體驗
與性能31
第4課 優(yōu)化游戲體驗:添加背景圖片
和頂級UI層31
添加適配不同機型的背景圖片31
使用有限字符的自定義字體35
在左擋板失誤時振動37
監(jiān)聽并處理背景音樂的意外暫停39
使用一個暫停按鈕,控制游戲的暫停
與恢復41
解決游戲暫停后定時器不暫停的問題47
添加游戲頂級UI層,實現(xiàn)退出功能51
本課小結58
第5課 優(yōu)化游戲性能:監(jiān)聽全局錯誤,
記錄錯誤日志59
監(jiān)聽全局錯誤,使用外觀模式記錄
錯誤日志59
允許打開設置頁面,用戶自己管理
授權66
拓展:關于小游戲UI層結構的說明68
主動垃圾回收68
拓展:如何控制屏幕亮度69
本課小結70
第3章 本地功能:添加排行榜和
廣告71
第6課 添加好友排行榜,為社交
營銷助力71
實現(xiàn)一個游戲內玩家排行榜71
實現(xiàn)好友中心玩家排行榜82
開啟游戲圈:從小游戲中進入游戲圈83
開啟客服會話:在小游戲中打開客服
窗口86
開啟用戶意見反饋通道87
添加防沉迷機制88
本課小結91
第7課 添加廣告92
添加Banner廣告92
添加視頻激勵式廣告93
本課小結94
第4章 云開發(fā):創(chuàng)建與使用云函數(shù)96
第8課 創(chuàng)建第一個云函數(shù)97
配置云開發(fā)98
開通云環(huán)境99
在云數(shù)據庫中創(chuàng)建集合101
認識云函數(shù)102
創(chuàng)建云函數(shù)103
本課小結105
第9課 調試和調用云函數(shù)106
云端測試106
本地調試109
調用云函數(shù)111
本課小結112
第5章 云開發(fā):使用云數(shù)據庫113
第10課 在小游戲端直接操作云
數(shù)據庫113
在小游戲中初始化云環(huán)境113
直接操作云數(shù)據庫集合114
拓展:了解云數(shù)據庫中的字段類型118
本課小結120
第11課 用兩種方式實現(xiàn)分頁查詢120
使用分頁查詢方法121
使用聚合查詢方法123
使用循環(huán)的方式清空小數(shù)據集合126
拓展:為查詢字段添加索引,提升
執(zhí)行效率127
拓展:了解集合的權限控制128
本課小結129
第12課 用戶如何操作自己創(chuàng)建的數(shù)據:
查詢與更新129
查詢用戶自己添加的歷史數(shù)據130
在調試區(qū)測試云函數(shù)133
使用原子操作,更新用戶自己創(chuàng)建
的數(shù)據133
拓展:關于數(shù)據庫操作符和數(shù)據庫
聚合操作符136
拓展:使用云文件ID137
本課小結138
第6章 后端:用Node.js實現(xiàn)接口
及處理客服消息139
第13課 準備MySQL數(shù)據庫141
安裝MySQL數(shù)據庫與數(shù)據庫管理
工具141
創(chuàng)建數(shù)據庫實例142
創(chuàng)建數(shù)據表history143
拓展:了解常用的MySQL數(shù)據類型146
本課小結149
第14課 實現(xiàn)history的3個RESTful
API(Node.js版本)149
啟動模板項目149
熟悉node-koa2項目模板結構150
拓展:了解RESTful API設計規(guī)范160
實現(xiàn)history的3個接口(Node.js
版本)162
拓展:學習9種HTTP請求方法166
本課小結167
第15課 在小游戲端調用Node.js接口167
實現(xiàn)后臺接口管理者模塊,調用
history的3個接口167
擴展新方法getOpenid,注意保持
新舊代碼的兼容性171
小游戲與小程序接口不一定一致174
使用外觀模式實現(xiàn)統(tǒng)一的存儲服務
管理者178
本課小結181
第16課 在服務器端接收和處理客服
消息(Node.js版本)181
使用內網穿透工具frp181
在小游戲后臺啟用與配置消息推送187
實現(xiàn)消息推送接口(Node.js版本)188
拓展:如何使用Linux指令查殺、
重啟程序192
拓展:如何在Windows系統(tǒng)上運行
Linux指令193
本課小結196
第7章 后端:用Node.js和Go
實現(xiàn)管理后臺197
第17課 實現(xiàn)導航與登錄功能
。∟ode.js版本)197
創(chuàng)建數(shù)據表account198
拓展:互聯(lián)網鑒權方式簡介199
實現(xiàn)登錄200
添加歷