使用 cocos2d-js 3.0 開發遊戲項目兩三個月,積累了幾個有意思的工具庫,在此作一點小記。javascript

Date/Time

在網絡遊戲中,不可避免地會使用到一些與日期和時間相關的功能,例如活動倒計時之類的。簡單的作法是本身處理時間函數,或者使用 new Date() 來完成計算。但經常會遇到一些坑,致使各類異常。並且處理 strftime 之類的工做也沒有想像中的容易。雖然 npm 上有很多現成的庫可使用,但這裏要推薦一個超級棒的時間工具:moment.jshtml

Parse, validate, manipulate, and display dates in javascript.html5

moment.js 擁有你想獲得的全部日期/時間功能。此外最重要的是,它提供了 durations 概念,例如要倒計時 10 分鐘,可用 moment.duration(10*60*1000) 來建立這樣一個時間段。而且可使用humanize() 輸出可讀的字串符:java

moment.duration("00:10:00").humanize(); // 10 分鐘
moment.duration(10*60*1000).humanize(true); // 10 分鐘內
moment.duration(-10*60*1000).humanize(true); // 10 分鐘前

我曾使用過 new Date(-10*60*1000) 來建立相似的時間段,但在不一樣的運行環境中的表現不太相同——特別是使用負數時間段的時候,在 cocos2d-x jsb 環境下會出現問題。此外 Date 還會受到不一樣設備上的時區影響。git

此外,還能夠用 moment(/*now*/).from("2012-12-20") 來直接得到到某兩個時間差的文字描述。github

P.S.

moment.js 支持多國語言的時間格式化。使用 moment.locale("zh-CN"); 可使用簡體中文輸出時間字符串。npm

Utils

最最實用的工具庫,非 underscore.js 莫屬了。它提供了大量便攜的工具函數用於處理數組(arrays)、對象(objects)和函數(functions)數組

Underscore is a JavaScript library that provides a whole mess of useful functional programming helpers without extending any built-in objects.網絡

尤爲重要的一點是,它還能很好的處理集合(collections)——能夠是數組或字典結構的對象!這大大方便了程序的組織方式。異步

P.S.

underscore.js 的 String 擴展: underscore.string

Misc

另一個不得不提的工具就是 Async.js

Async is a utility module which provides straight-forward, powerful functions for working with asynchronous JavaScript.

在遊戲中有許多異步工做,例如資源分塊加載以及多個網絡請求的組合操做。若是隻用回調函數(callback)來處理的話,不得不寫出一堆由花括號堆砌的晦澀難懂的嵌套函數(怪不得說 javascript 是回調的煉獄)。因而 Async.js 閃亮登場,漂亮地解決了這一難題。

它將多個異步操做用很簡單的結構進行組裝,在內部完成異步操做的結果處理,並提供了相似 underscore.js 的接口,對一組異步操做進行統一處理,大大簡化了開發的工做量。


正是有了這些工具,才使得 javascript 從一款玩具語言變成如些成熟。