鑰匙要點
- 遊戲循環是任何遊戲的心跳,是一個每秒運行多次的函數,並且有兩個主要作業
- 更新正在發生的事情並繪製新場景。 Easeljs ticker類用於管理遊戲循環的時間安排,暫停/恢復遊戲循環並測量經過的時間。
- 遊戲邏輯涉及添加用於發射鏡頭,更新顯示器,移動射擊,處理命中和結束遊戲的功能。 easeLjs displayObjects支持一個hittest()方法,這使得可以輕鬆查看當前對象的位置是否存在點。
這是四個星期內四個帖子的系列中的第三部,它將向您展示如何使用HTML5,JavaScript,Winjs和CreateJS創建一個簡單的Windows 8遊戲。
該遊戲基於XNA樣本遊戲“彈射戰爭實驗室”。當我們為Windows 8開發基於Web技術的Windows 8的新版本時,我們將重複使用該遊戲的資產。
在這篇文章中,我們將使用一些遊戲邏輯和JavaScript將事物栩栩如生。
遊戲循環
任何遊戲的心跳是遊戲循環。 這是一個每秒多次運行的函數,並具有兩個主要作業 - 更新發生的事情,然後繪製新場景。
在第2部分中,我們已經進行了大綱:

現在的問題是,我們如何啟動gameloop()函數並保持每秒多次運行?
easeljs ticker class
幸運的是,Easeljs的股票類別具有我們將使用的一些功能:
- 管理遊戲循環的時機
- 暫停/恢復遊戲循環
- 測量經過的時間
這是一個靜態類,因此我們可以開始使用它。 在default.js中,添加一個新的startGame()函數,並在prepargame()末尾調用它:

在這裡,我們告訴使用window.requestanimatimationframe來控制Gameloop函數的頻率。
requestAnimationFrame是Web應用程序的相對較新的API,可幫助確保不必要地完成工作。 要了解為什麼這比設置固定計時器(例如使用Settimeout())更好,請參見IE測試驅動器網站上的RequestAnimationFrame樣本。

每當RequestAnimationFrame準備就緒時,我們的遊戲循環都會運行。
“準備好,瞄準,開火!”
好的,現在我們有一個遊戲循環的遊戲,所以是時候添加一些樂趣了!
每個玩家/彈射器都將向另一個發射彈藥/岩石。 我們需要知道目前是否開槍,轉彎是誰以及鏡頭的移動方式。
首先,讓我們添加更多變量到default.js:

現在,讓我們通過將以下內容添加到update()函數:

目前,兩個玩家都會自動發射(以隨機的速度發射)。 AmmobitMap移至射擊彈射器的頂部中心,並在有界範圍內給予射速值(按屏幕分辨率調整)。
我們還將添加一個fireshot()功能以顯示鏡頭並告訴遊戲中的遊戲:
更新顯示
在我們在空中移動鏡頭之前,讓我們專注於遊戲循環方程式的第二半部分 - 繪製到屏幕上。 這通常非常複雜,但是Easeljs階段會照顧我們的內容(所有孩子 - 位圖,文字等 - 我們添加到舞台上),因此我們需要:這就是我們所需要的:

就是這樣! 如果您運行遊戲,則玩家1將自動開槍,而射門將出現在紅色彈射器上…

…但是它不會讓人感到不安。 讓我們走動。
移動射擊
讓我們返回到update()函數,然後將邏輯添加到if(shotFlying)語句中:

不要運行它,我們仍然需要兩個功能,但這是發生的事情:
- 線149&150 - 通過添加速度(可能為負數和/或左)移動鏡頭
第151行 - 將重力應用於慢速-
- 線153-155 - 鏡頭是否撞到了屏幕的左側或右邊緣?
>第157-160行 - 錯過 - 結束射門和更改播放器- >
>行162-168 - 播放器1的射門 - 查看是否命中播放器2。如果是,則更新玩家2的生活。
- 行169-175 - 播放器2的射門 - 查看是否命中播放器1。如果是,則更新玩家1的生活。
>
-
讓我們添加校園(位圖)
功能:
關於Hittest的話題是什麼? easeljs displayObjects(基於哪個位圖)支持hittest()方法,這使得很容易查看當前對象的位置是否存在點。 不幸的是,我們正在縮放對象,而Hittest僅適用於原始尺寸,因此我們需要檢查自己的命中率。 只是一點點數學,我們已經設定了。
處理命中

現在,添加
processHit()
函數:
這只是結束射門,改變玩家,並確保遊戲還沒有結束。
結束遊戲

讓我們結束遊戲結束這篇文章。 添加最終遊戲(圖像)函數:
就是這樣! 現在,您可以運行遊戲,看看誰獲勝。

下一步是什麼?

我們在這一部分中增加了很多東西 - 事情正在繪畫,移動,擊球,結局……但是有兩個張開的孔。 首先,播放器實際上沒有玩,因此我們將接下來添加輸入處理。 其次,事情非常安靜,尤其是對於戰爭,所以我們也會折騰一些聲音。
到第4部分:下週!
經常詢問有關使用JavaScript創建簡單Windows 8遊戲的問題
>如何開始使用Windows 8的JavaScript創建遊戲?您還需要安裝Visual Studio,這是Windows 8應用程序的開發環境。擁有這些先決條件後,您可以首先在Visual Studio中創建一個新項目並選擇“空白應用程序”模板。從那裡,您可以開始在JavaScript中編寫遊戲邏輯,並使用HTML5和CSS設計遊戲界面。
>
>我可以使用JavaScript創建的遊戲示例是什麼?可以用來創建各種遊戲的編程語言。一些示例包括益智遊戲,策略遊戲,平台遊戲,甚至3D遊戲。可能性是無窮無盡的,借助正確的工具和資源,您可以創建您可以想像的任何類型的遊戲。
>如何在JavaScript遊戲中添加互動性?這些是發生特定事件時會觸發的功能,例如鼠標單擊或按鍵按下。例如,當用戶單擊遊戲元素或“ onkeydown”事件時,您可以使用“ onclick”事件觸發功能測試和調試我的JavaScript遊戲?
測試和調試是遊戲開發的關鍵部分。 Visual Studio提供了一個強大的調試工具,可讓您瀏覽代碼,檢查變量並確定任何錯誤或錯誤。您還可以使用控制台登錄消息並跟踪代碼的執行。
>如何優化我的JavaScript遊戲以進行性能?
>優化性能的JavaScript遊戲涉及許多技術。其中包括最大程度地減少全局變量的使用,使用RequestAnimationFrame用於遊戲循環,優化您的圖像和資產以及使用有效的遊戲邏輯算法。在各種設備和瀏覽器上測試遊戲以確保其運行順利也很重要。
>如何在我的JavaScript遊戲中添加聲音和音樂?使用HTML5音頻API進行JavaScript遊戲。這使您可以加載和播放聲音文件,控制音量,甚至創建聲音效果。您還可以使用諸如howler.js之類的庫來簡化過程並添加更高級的音頻功能。
>一旦完成開發後,我如何在Windows Store上發布我的JavaScript遊戲?您的遊戲,您可以通過創建商店帳戶,註冊您的應用並提交認證來將其發佈在Windows Store上。您需要提供有關遊戲的屏幕截圖,描述和其他信息。一旦您的遊戲獲得批准,它將可以在Windows Store上下載。
我可以將我的JavaScript遊戲貨幣化嗎?
是的,您可以以多種方式將JavaScript遊戲貨幣化。一種選擇是在Windows Store上出售您的遊戲。您還可以包括應用內購買,玩家可以購買其他內容或功能。另一個選擇是在您的遊戲中顯示廣告,儘管應該很少這樣做以避免破壞遊戲玩法的體驗。
> 我可以使用JavaScript為其他平台創建遊戲嗎?不限於Windows 8或任何特定平台。借助正確的工具和庫,您可以創建在各種平台上運行的遊戲,包括Web瀏覽器,移動設備甚至遊戲機。一些與JavaScript進行跨平台遊戲開發的流行庫,包括Phaser,Pixi.js和Trix.js。
我在哪裡可以通過JavaScript了解有關遊戲開發的更多信息? W3Schools,Mozilla開發人員網絡和CodeCademy等網站提供了有關JavaScript和遊戲開發的教程和指南。還有很多書籍,在線課程和論壇,您可以在這裡學習和獲得其他開發人員的幫助。
以上是使用JavaScript創建一個簡單的Windows 8遊戲:遊戲邏輯的詳細內容。更多資訊請關注PHP中文網其他相關文章!