自動化的基於TypeScript的HTML5游戲開發

来源:http://www.cnblogs.com/wildfirecode/archive/2017/08/30/7452517.html
-Advertisement-
Play Games

自動化的開發流程 在HTML5游戲開發或者說在Web客戶端開發中,對項目代碼進行修改之後,一般來說,需要手動刷新瀏覽器來查看代碼修改後運行結果。這種手動的方式費時費力,降低了開發效率。另外,如果我們使用瞭如TypeScript這類需要通過轉換器把代碼轉換成瀏覽器可識別的JavaScript代碼的語言 ...


自動化的開發流程

在HTML5游戲開發或者說在Web客戶端開發中,對項目代碼進行修改之後,一般來說,需要手動刷新瀏覽器來查看代碼修改後運行結果。這種手動的方式費時費力,降低了開發效率。另外,如果我們使用瞭如TypeScript這類需要通過轉換器把代碼轉換成瀏覽器可識別的JavaScript代碼的語言,在運行程式之前,我們還需要進行額外的手動轉換,這同樣是影響開發效率的一個因素。為瞭解決這兩個問題,本文介紹瞭如何通過使用TypeScript Compiler(tsc)的watch模式來實現代碼修改後自動編譯以及使用gulp-connect來實現編譯後瀏覽器自動刷新。

開發環境

  • Visual Studo Code 1.15
  • node v8.4.0
  • npm 5.3.0

示例和源碼

本文將通過一個完整的實例來講解如何實現開發自動化,實例的源碼托管在github。示例所採用的HTML5游戲引擎為LayaAir。目前已經在Windows和Mac OSX系統測試通過。這裡是倉庫鏈接。另外,示例項目是使用VS Code(Visual Studio Code)來開發的。我們常用的HTML5游戲集成開發環境Laya IDE以及Egret Wing等也是基於VS Code開發的,部分相關知識也可以借鑒。另外本文使用了AMD來管理項目的代碼,關於如何在HTML5游戲中使用AMD請參考我的另一篇文章《藉助AMD來解決HTML5游戲開發中的痛點》

使用tsc的watch模式實現自動化編譯

tsc天生就支持自動化編譯和增量編譯。在tsconfig.json中的compilerOptions屬性中增加"wathc":true配置即可。這樣我們執行命令tsc -p .的時候便可以使用這些特性了。

使用gulp和gulp-connect實現編譯後瀏覽器自動刷新

gulp是一種基於nodejs的自動化構建工具,它可以增強我們的工作流程。gulp-connect是gulp的一個插件,主要提供web伺服器和自動化瀏覽器刷新功能。在本文的參考資料列表中可以查看更多的關於gulp和gulp-connect的信息。下麵我講詳細講解自動化流程的創建。

安裝

gulp是基於nodejs,所以首先要安裝nodejs環境,具體安裝過程以及nodejs相關知識我們可以參考nodejs官方網站

nodejs安裝完畢之後,需要初始化項目:

npm init

接著,通過執行命令來全局安裝 gulp和tsc:

npm install -g gulp typescript

下麵安裝開發依賴

npm install --save-dev gulp gulp-connect

創建gulpfile.js

在項目根目錄下創建一個名為gulpfile.js的文件,我們的自動化流程邏輯全部在這裡。

首先我們要創建一個web server,因為gulp-connect使用WebSocket和瀏覽器進行通信,所以這是實現瀏覽器自動刷新的必要條件。我們來創建一個connect任務以實現這個功能。web server的預設埠為8080。

gulp.task('connect', () =>
    connect.server({
        root: './bin',
        livereload: true
    })
);

下麵我們創建一個watch任務來實現對編譯文件的內容變化的監聽,當檢測到變化之後則執行一個名為reload的任務。reload任務負責通知瀏覽器對當前的html頁面進行刷新。

gulp.task('reload', () => {
    return gulp.src('./bin/*.html')
        .pipe(connect.reload());
});

gulp.task('watch', () => {
    gulp.watch(['./bin/js/*.js'], ['reload']);
});

為了自動化執行編譯命令tsc,我們創建一個compile任務來完成這件事。

gulp.task('compile', () => {
    const cmd = os.platform() == 'win32' ? 'tsc.cmd' : 'tsc';
    const childProcess = require('child_process');
    const child = childProcess.spawn(cmd, []);
    child.stdout.on('data', function (chunk) {
        console.log('[tsc]', chunk + '');
    });
    child.stderr.on('data', function (chunk) {
        console.log('[tsc]', chunk);
    });
    child.on('exit', function (code, signal) {
        console.log('[tsc]', chunk);
    });
    return child;
});

當ts文件發生變化的時候,我們可以在控制台的日誌中看到tsc的自動化編譯的工作過程。
最後創建default任務,以觸發其他所有任務的執行。

gulp.task('default', ['connect', 'watch', 'compile']);

配置VS Code

我們需要安裝VS Code插件Debugger for Chrome,以實現使用Chrome在VS Code中調試運行代碼。

接著,我們可以按下F5,並選擇chrome來自動生成調試配置launch.json,此文件位於.vscode文件夾。

下麵,按下F1,並輸入Configure Default Build Task來快速找到配置預設生成任務選項,選擇之後彈出任務列表,在列表中選中gulp:default之後,task.json文件會自動生成,並置於.vscode文件夾。task.json使得我們可以把gulp:default作為預設的構建任務。

至此,所有的配置和編程處理完畢。

開啟自動化的開發之旅

按下快捷鍵Ctrl+Shift+B或者在終端中執行gulp來觸發gulp:default

  • 創建一個web伺服器
  • 執行tsc,在ts文件發生變化之後自動編譯
  • 監聽編譯文件的變化,文件變化之後會通知瀏覽器刷新

接下來,我們可以在瀏覽器中輸入http://localhost:8080來運行游戲。

然後修改示例中的Greeting.ts文件,把Hello LayaAir修改為Hello HTML5 Game.,保存文件之後,便會發現游戲中的顯示文本修改為Hello HTML5 Game.. 具體請看下麵的動圖。

如有其他的配置疑問,請參考示例項目的源碼。

參考


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • # 父子組件之間的通信(props down, events up) 1、父組件向子組件傳遞(props down ) app.vue(父組件) hello.vue(子組件) 如圖所示,按鈕顯示的信息來自父組件: 2、子組件向父組件傳遞(events up) 子組件通過this.$emit("事件名 ...
  • 最近在封裝一個開源框架,已經寫了500行, 已經具備jquery的大多數常用功能,後面還會擴展大量的工具函數和MVVM雙向驅動等功能。跟jquery的使用方法完全一樣,jquery的選擇器,幾乎都能支持,為什麼說這事,跟這篇文章的主題有毛關係呢?因為這篇文章要講的就是我在寫框架過程中碰到的一個問題, ...
  • 一般存在四種情況,JavaScript會對變數的數據類型進行轉換。 目錄 if中的條件會被自動轉為Boolean類型 會被轉為false的數據 會被轉為true的數據 參與+運算都會被隱式的轉為字元串 會被轉為空字元串的數據 會被轉為字元串的數據 會被轉為數據類型標記的數據 參與 運算都會被隱式的轉 ...
  • ------>axios模擬get json一直拿不到文件,先把data放到根目錄,再去dev-server.js(就是npm執行的那個文件)裡面設置靜態資源訪問路徑app.use('/data',express.static('./data')) ... app.use(hotMiddleware... ...
  • 如今移動設備的解析度紛繁複雜。以前僅僅是安卓機擁有各種各樣的適配問題,如今 iPhone 也擁有了三種主流的解析度,而未來的 iPhone 7 可能又會玩出什麼新花樣。如何以不變應萬變,用簡簡單單的幾行代碼就能支持種類繁多的屏幕解析度呢?今天就給大家介紹一種懶人必備的移動端定寬網頁適配方法。 首先看 ...
  • <input class="check" type="checkbox" style="vertical-align:-3px;"/> 我已閱讀以上內容 <button disabled="">同意 >>></button> $('.check').click(function(){ // aler ...
  • 今天在使用fetch方法 瀏覽器返回的請求信息中,header變成了 而該次請求的Request Method也變成了OPTION,不論是生成的奇怪請求頭,還是OPTION方法,都是沒有遇見過的。 這次請求與平時開發中發送的請求有以下幾點不同 1.該次請求對象網站是跨域地址 2.本次請求添加的請求頭 ...
  • 1、html標記 JS 1、獲取 li屬性 data-text的值用 ,隔開 輸出結果;111,222,333 2、編輯的時候初始化ul的li項 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...