2012-01-05 93 views
3

一位朋友和我正在開發一款使用WebGL的遊戲,在尋找一些物理引擎後,我發現了ammo.js,這是一個端口或子彈物理庫。我們實現了一個簡單的例子,並很快發現谷歌瀏覽器的幀率與Firefox或Safari相比是非常糟糕的。我在談論鉻得到10 FPS的地方,Firefox的相當恆定60 FPS。ammo.js Google Chrome中的性能

經過很多研究,我發現this博客正在探索Chrome的哪個問題。 (tl; dr:ammo.js使用字典對象chrome勸阻)

所以我的問題是:有沒有這個庫的端口沒有使用字典?如果不是,那麼修改原始C++項目符號代碼並重新導入它是否值得(甚至可行)?如果以前的選項都不可行,那麼您推薦使用javascript中的物理引擎?

我知道這裏的選擇相當有限,但我認爲這是值得的問題。

謝謝。

+1

你有基準鏈接嗎?我想將它傳遞給Chrome V8團隊。 – 2012-01-31 14:15:10

回答

3

我懷疑當原始的C++代碼是面向對象的時候,可以將代碼移植到JavaScript中而不使用對象。

如果你想在移植之前「修改」Bullet代碼,我相信你將不得不重寫它,以便它使用JavaScript中有優勢的東西:類型化數組。我想你將不得不重寫大部分代碼才能得到它。在這種情況下,直接編寫JavaScript會更方便。

我對ammo.js旁邊沒有任何好的建議。但是,cannon.js是一個新開始的項目,可以在代碼穩定時滿足您的需求。也許你想爲它做出貢獻?

另一條路可能是FireBreath。它是一個瀏覽器插件開發框架。它可以幫助您製作原生JavaScript功能。如果Bullet被編譯成這樣的插件,並且對JavaScript進行了綁定,那麼你的C++物理引擎就可以在JavaScript中使用了。當然,最終用戶必須先下載插件。