看板 Ajax 關於我們 聯絡資訊
※ [本文轉錄自 java 看板] 作者: PsMonkey (痞子軍團團長) 看板: java 標題: [GWT] GwtQuake:將 Web 提昇到下一個境界 時間: Fri Apr 2 21:13:04 2010 有影片之 blog 版:http://pt2club.blogspot.com/2010/04/gwtquake-web.html ================ 原文:http://timepedia.blogspot.com/2010/04/ gwtquake-taking-web-to-next-level.html 技術校正、審閱:tkcn 早在 2009 年 11 月的 GWT 高層腦會議上,我和 Joel Webber 就專注於改善 Web 和 UI latency 議題。有人在介紹 WebGL 時,我發現坐在後頭 Joel 看起 來完全沒在聽。當我走近他時,他說:「看過這玩意了嗎?」他晃了晃 notebook 展示 Jake2——將 Quake2 用 Java 移植成 Java Web Start application。幾 年前我就看過這個 project 了,只是不知道已經進展到這種地步。 就在那時,我不用問也知道他想幹麼——他提議我們用 GWT 改寫 Jake2! Web 化的方式 「將 Jake2 這類的東西,用 GWT 來 compile 成 JavaScript」的想法,看起來 好像很簡單。因為 GWT 本來就是把 Java compile 成 JavaScript。不過要能 compile 仍需要對程式碼作一堆調整、以及將 I/O 對應到合適的 Web API。 你可能已經知道,GWT 其實只有實做 JRE 的一部份,而 Jake2 使用了很多 GWT 當中沒有的 Java class: →3D 的 LWJGL library →java.nio.Buffer →網路對戰需要用的 java.net.* →AWT 中關於鍵盤的內容 →載入資料要用到的檔案系統 API →影音要用的 OpenAL 更重要的是,它是用 synchronous API 作 I/O,但是 JavaScript 是使用 event driven 的 I/O 方式。 I/O 對應 Joel 將 Jake2 的 I/O 系統重新改寫成用 event driven pump 來載入檔案。我 們做的第一件事就是處理關卡與 model 的檔案載入,使用 2D <canvas> wireframe renderer 來處理 rendering(沒有用 WebGL)。接著 Stefan Haustein 貢獻了使用 WebGL 的 javascript array 來實做 Java NIO Buffer 的 JRE class,以及用 WebGL 為基礎的 GL renderer。 Joel 很神奇的用 WebSocket 加上了多人對戰的功能,即使測試的人分散在 Atlanta、Mountain View、甚至是 Sydney(雪梨),我們還是廝殺的很爽。 我繼續轉換所有的聲音成 MP3 格式,並且實做了只用 DOM Audio element 的初 步 sound renderer。後來,我把 OpenAL 程式碼重構成一個(譯註:GWT 的) base class,並且提供了 OpenAL Inverse Distance Clamped 聲音 model 的實 做,用來調整 3D 位置中的音量變化。除了 audio.volumn 之外,沒有用其他東 西。 Stefan 使用 LocalStorage 來實做 RandomAccessFile 供遊戲存檔用,以及用 <video> tag 來實做 video 播放。 大部分的工作在今年一月用 part time 的方式完成,但在那之後進度就卡住了 。例如 Stefan 就專注在移植整個單人遊戲(無須 server)成靜態的內容。 我會在 Google I/O 上頭作更詳細的解剖報告,請務必參加! 執行速度呢? 我覺得執行速度可能不快,不過說實話,我從來沒想過我們會做到這種程度;但 事實證明,正常播放的 framerate 是有達成的。在 MacBook 上的 WebKit/Chrome 有 20~25fps、在 Mac Pro 桌機則有 45fps。Joel 則說在 Linux(notebook)可以到 60fps。 這對 web 的意義是什麼? 多年來,人們總覺得 browser 對這類事情而言,是一個貧乏的平台,所以需要 Flash、Silverlight、JavaFX 或 native 程式碼。儘管你不應該期望在瀏覽器 上頭看到像《Far Cry》或《Call of Duty》這種頂級的作品,但這不能解釋為 甚麼一堆 casual game 是用 Flash、或是用 Objective-C(在 iPhone/iPad 上)寫的,而我們使用的類似技術卻作不到。 此外,因為是網頁,你要邀請某人進入你的遊戲或分享遊戲,只要傳一個網址就 可以了。你可以只接 tweet 你的遊戲網址、點下去就可以加入遊戲當中。而不 需要安裝。雖然 Flash 也可以做到,但直接在 browser 當中會覺得比較「自然 」。 我希望這個移植可以鼓勵某些人變得更大膽、更瘋狂地嘗試建立各種 Web App, 因為如果 Quake2 用 JavaScript 跟 browser API 都辦得到,更令人驚艷的 application 正等你開發出來。所以,開始動手吧! 移植版的 source code 在:http://code.google.com/p/quake2-gwt-port ---- 譯註:關於 quake2 的 GWT 移植版,在 GWT 官方 Blog 也有提到,不過該篇文 章沒有這篇仔細,所以選擇翻譯這篇。雖然這個時間點實在令人遐想 [炸],不 過在 Google Code 上頭的確有「非常真實」的程式碼可以觀看,有興趣者不妨 試試看。 -- 錢鍾書: 說出來的話 http://www.psmonkey.org 比不上不說出來的話 Java 版 cookcomic 版 只影射著說不出來的話 and more...... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.70.183.25 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.70.183.25