最近在離職的空窗期,感覺大把的時間不能用來浪費,就試著仿照微信跳一跳寫了一個極簡版的遊戲
那麼這個遊戲到底是簡單到什麼程度,差不多就是到下面這個程度吧
預覽地址: luosijie.github.io/threejs-exa…
原始碼地址: github.com/luosijie/th…
由於是第一次嘗試寫遊戲, 也不知道套路對不對, 大家看著玩就好, 不要太認真, 不推薦在手機上預覽, 坑還沒有填好
下面是實現過程
遊戲分析
首先分析一下一個這樣的遊戲需要什麼元素
- Three.js必備元素: 場景,燈光,攝像機
- 一塊又一塊的方塊
- 會跳的那個,或者叫遊戲者
- 以上
遊戲過程
- 初始一個場景, 場景中有一個 會跳的那個 和 2個方塊
- 滑鼠按下儲存 能量值
- 滑鼠放開, 會跳的那個 根據 能量值 和 第2個方塊的方向 跳出去
- 會跳的那個 落到方塊的上平面時, 根據 位置 判斷這一跳是成功還是失敗
- 成功後進入下一步,失敗就根據 位置 執行不同的摔倒方式
關於遊戲的碰撞, 我們要考慮這幾種情況
- 掉落在兩個方塊中央
程式碼
感興趣的麻煩移步 github
主體結構
var Game = function () {
...
}
Game.prototype = {
init: // 初始化
restart: // 重新開始
addSuccessFn: // 成功進入下一步,執行外部函式, 用於更新分數
addFailedFn: // 遊戲失敗, 執行外部函式, 用於顯示失敗彈窗
_createJumper: // 建立 會跳的那個
_createCube: // 建立方塊
_setLight: // Three.js設定光照
_setCamera: // Three.js設定相機
_setRenderer: // Three.js設定渲染器
_render: // Three.js 執行渲染
_createHelpers: // Three.js場景輔助工具
_checkUserAgent: // 檢測是否是移動端
_handleWindowResize: // 視窗縮放繫結函式
_handleMousedown: // 滑鼠按下繫結函式
_handleMouseup: // 滑鼠鬆開繫結函式
_fallingRotate: // 會跳的那個 摔落動畫
_falling: // 會跳的那個 摔落
_checkInCube: // 判斷落點位置
_updateCameraPos: // 更新相機座標引數
_updateCamera: // 更新相機
_setSize: // 設定畫布尺寸
}
複製程式碼
呼叫
var game = new Game()
game.init()
game.addSuccessFn(success)
game.addFailedFn(failed)
...
// 遊戲重新開始,執行函式
function restart () {
...
}
// 遊戲失敗執行函式
function failed(){
...
}
// 遊戲成功,更新分數
function success (score) {
...
}
複製程式碼
最後有什麼好玩的js相關, 歡迎一起交流
先這樣了, 歡迎star