作者PsMonkey (痞子军团团长)
看板Ajax
标题[GWT] GwtQuake:将 Web 提昇到下一个境界
时间Fri Apr 2 21:14:04 2010
※ [本文转录自 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