所在的位置: java >> 编程思想 >> 案例研究WorldWideMaze

案例研究WorldWideMaze

WorldWideMaze

是一款游戏,您可以在其中使用智能手机导航滚球通过网站创建的D迷宫,以尝试达到目标点。

游戏功能丰富,使用HTML5功能。例如,

DeviceOrientation

事件从智能手机检索倾斜数据,然后通过WebSocket将其发送到PC,玩家在其中通过

WebGL

WebWorkers

。在本文中,我将准确解释这些特性的使用方式、整体开发过程以及优化的关键点。

设备方向

DeviceOrientation事件(

示例

)用于从智能手机检索倾斜数据。什么时候

addEventListener

DeviceOrientation

事件,一个回调

DeviceOrientationEvent

对象作为参数定期调用。间隔本身因使用的设备而异。例如,在iOS+Chrome和iOS+Safari中,回调大约每1/20秒调用一次,而在Android+Chrome中,它大约每1/10秒调用一次。

window.addEventListener(deviceorientation,function(e){//dosomethinghere..});

DeviceOrientationEvent

对象包含每个倾斜数据

X

,

Y

,和

Z

以度为单位的坐标轴(不是弧度)(

阅读更多关于HTML5Rocks的内容

)。但是,返回值也会因所使用的设备和浏览器的组合而异。实际返回值的范围如下表所示:

顶部以蓝色突出显示的值是WC规范中定义的值。以绿色突出显示的那些与这些规格相匹配,而以红色突出显示的那些则不同。令人惊讶的是,只有Android-Firefox组合返回了符合规范的值。尽管如此,在实现方面,容纳经常出现的值更有意义。WorldWideMaze因此使用iOS返回值作为标准,并针对Android设备进行相应调整。

ifandroidandevent.gammathenevent.gamma-=60

但是,这仍然不支持Nexus10。尽管Nexus10返回的值范围与其他Android设备相同,但有一个错误会颠倒beta和gamma值。这正在单独解决。(也许它默认为横向?)如此证明,即使涉及物理设备的API已设置规范,也不能保证返回的值与这些规范相匹配。因此,在所有预期设备上测试它们至关重要。这也意味着可能会输入意外的值,这需要创建变通方法。WorldWideMaze提示初次使用的玩家校准他们的设备作为其教程的第1步,但如果收到意外的倾斜值,它将无法正确校准到零位。因此,它有一个内部时间限制,如果在该时间限制内无法校准,它会提示玩家切换到键盘控制。

网络套接字

在WorldWideMaze中,您的智能手机和PC通过WebSocket连接。更准确地说,它们通过它们之间的中继服务器连接,即智能手机到服务器再到PC。这是因为WebSocket缺乏将浏览器直接相互连接的能力。(使用WebRTC数据通道允许点对点连接并消除对中继服务器的需要,但在实施时,这种方法

只能与ChromeCanary和FirefoxNightly一起使用

。)我选择使用一个名为Socket.IO(v0.9.11)的库来实现,它包括在连接超时或断开连接时重新连接的功能。我将它与NodeJS一起使用,因为这个NodeJS+Socket.IO组合在几个WebSocket实现测试中显示出最好的服务器端性能。

按数字配对

您的PC连接到服务器。  服务器给你的电脑一个随机生成的号码,并记住号码和电脑的组合。  在您的移动设备上,指定一个号码并连接到服务器。  如果指定的号码与来自连接的PC的号码相同,则您的移动设备已与该PC配对。  如果没有指定的PC,则会发生错误。  当数据从您的移动设备传入时,它会被发送到与之配对的PC,反之亦然。

您也可以改为从移动设备进行初始连接。在这种情况下,设备只是简单地颠倒过来。

标签同步

Chrome特有的TabSync功能使配对过程更加轻松。有了它,在PC上打开的页面可以在移动设备上轻松打开(反之亦然)。PC获取服务器发出的连接号,并将其附加到页面的URL中

history.replaceState

history.replaceState(null,null,/maze/+connectionNumber)

如果启用选项卡同步,则URL会在几秒钟后同步,并且可以在移动设备上打开相同的页面。移动设备检查打开页面的URL,如果附加了一个数字,它会立即开始连接。这消除了手动输入数字或用相机扫描


转载请注明:http://www.jiaju1314.com/bcxx/bcxx/17338.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了