在HTML5中,Mobilizing Arcade

分享于 

20分钟阅读

Web开发

  繁體

This recently Arcade Arcade Arcade Arcade Arcade Arcade and and and and and and。

选择目标

通过在第一版中限制桌面和平板电脑,我们缩小了范围,并且能够提供一个半响应的布局。 我们包括了大部分标准分辨率显示器,以及像 Surface 和iPad这样的平板。

但是我们很快了解到,由于移动设备上的用户数量不多,我们缺少了一些东西。 现在,巨大的市场占全球所有互联网流量的1,跨越各种尺寸。分辨率和处理器。 我们的下一个任务是确定将拱廊带到移动网络的方法。 我们希望支持多种解决方案,包括 Windows Phone 8和 iPhone 5等新设备中的高 DPIs。

本文讨论了,的目标,以及一些方法,我们遇到的问题,以及我们发现的一些技巧。

瞄准

我们花了很多时间来确定不同平台上建立一个适合移动的特性集。

我们的目标是建立一个网站:

  • 可以使用我们已经构建的大部分站点框架
  • 在任何分辨率下缩放
  • 在新设备上执行 awesomely
  • 用触摸方式导航很直观
  • 我们的游戏中可能会包括一些游戏,我们的游戏不久后
  • 可以扩展到第三方开发者 !

使用这个游戏计划,我们设计了网站前端,并使游戏弹性支持我们需要的解决方案。

什么工作?

第一个任务:消除那些不能工作的平台。 我们的平台和型号广泛的手机,我们做了一些重点测试,如下:

  • 技术一些设备没有足够的画布,JavaScript,CSS或者HTML支持。
  • 游戏的功能已经达到 ,所有的游戏都已经启用,所以我们删除了所有只有单一输入触摸支持的候选。
  • 在移动设备上使用浏览器,我们需要足够的房地产,在需要的时候,我们的游戏会显示出很大的and。
  • 性能正确looked正常运行,我们专注于性能和监视帧率。

我们测试了许多设备- 主要目标是微软 8设备( 为 Highlight 提供平台的技术能力)的Windows,以及 iphone ( 到达最广阔的市场)。 我们还在许多Android手机上进行了测试,以了解我们可以支持什么。

这些结果非常令人惊讶,并不是所有的手机都是相同的,但是街机在我们测试的几乎所有。

  • 我们在 Windows Phone 8上获得了难以置信的性能。 它的帧速率最高,网站呈现预期,并且多触摸工作得很好。 不幸的是,我们只能获得一个用于启动的rtc设备( 800 x480 ),但是我们期望,和 720p 设备没有问题。
  • 这个网站和游戏在新的iphone上做得很好,但从开始移动 Chrome的移动消耗太多了。 为了支持 Mobile Safari 在中,街机需要固定在主屏幕上以便在全屏幕上运行。 然后我们发现iOS5和 below 在固定站点模式中没有硬件支持,因此尽管我们可以支持它,但并非所有的游戏都能。
  • 我们在测试的各种Android设备上得到了混合的结果,包括手机和 Nexus 7平板电脑。 我们的网站和游戏大部分都是,但由于我们的短时间,我们决定在它的他平台上聚焦。

有趣的是,装载和显示我们的游戏没有任何麻烦,除了音频的错误。 在各种移动浏览器上看到这种一致的支持,我们。

适应环境

随着技术尘埃的确定,我们开始重新设计。

为了在单个生产周期中进行目标设备,我们合并了响应性和适应性的方法。 无论大小或者 landscape 纵横比如何,它都保留视口中包含的所有内容。 不需要媒体查询。

查看以下 Windows Phone 8 ( 左边) 和 iPhone ( 右边)的比较:



我们尽可能在桌面和移动站点之间保持尽可能多的一致性。 这让我们使用现有的大多数站点HTML和CSS结构- 这两者都需要相对较小的编辑来支持新视图。 我们实现了一个基于滑动的移动导航,让我们的艺术向前推,使手指更容易和更快。

街机现在响应 User Agent,并为固定大小的桌面版本。自适应移动版本或者不支持的浏览器和设备提供合适的消息。

最初的发现

要在移动浏览器中拥有最好的游戏体验,我们必须得到全屏,或者至少尽可以能接近。

Windows Phone 工作出色

WP8的基本位置:在屏幕底部有一个持久的浏览器栏,在 landscape 和 portrait 模式下,但是在浏览器游戏体验中有足够的屏幕。

iOS 6全屏显示。

它运行得很好,但有一些有趣的问题。 全屏模式真的很容易切换,并且导航按钮覆盖的底部区域,甚至可以滚动屏幕。 值得注意的是 Mobile Safari 中的全屏幕只是一个景观特性,这对我们来说是很好的。

iOS 5后退

iOS5通过用户主页上的'固定地点'获得了接近全屏的效果。 如果没有这里变通方法,Mobile Safari Chrome 将通过接近 50%来降低viewport高度。 但是要注意:固定的站点在iOS5上没有硬件支持。 有些内容将运行得不好。

本机滚动和缩放

移动浏览器本身包括直观的页面滚动。滚动和缩放。 这对于查看网页非常有用- 但不是游戏。 幸运的是,我们几乎完全可以。 这里方法在 Windows Phone 7中不工作,这是我们选择不支持它的另一个原因。 为了 block的原生缩放,我们使用这些元标记:

<!-- Define the viewport -->
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=0, target-densitydpi=device-dpi">
<!-- iOS helper -->
<meta name="apple-mobile-web-app-capable" content="yes"/>

为了防止滚动,我们包含了这个简单的JavaScript:

document.addEventListener(
 "touchstart",
 function() { returnfalse; },
 false);

自适应液体布局

,的第一个版本,我们选择了一个单一的分辨率,使游戏开发 straightforward,并且settled在大多数显示器上,还可以适应曲面或者iPad上的viewport。

对于移动,我们必须认为我们的方法和方法,使游戏看起来好在一个小屏幕上。 我们不能只是缩放游戏,或者简单地把 assets 放到液体布局中。 我们需要一种混合方法,在那里我们的游戏既灵活又伸缩。

使之适合

第一步是缩放画布。 因为移动设备每英寸的像素都能自动缩放内容,使它的更易于阅读,所以这提供了独特的挑战。 通过一系列测试我们确定:

  • Windows Phone 7和 8 (。仅在写入时在WVGA上测试) 缩放内容为 1.666 x。 请在这里阅读更多的,在这里是
  • iPhone将内容扩展到 2.

这意味着我们必须调整我们的内容,以便在每个设备上正确地适应。 为这里,我们将大多数HTML元素( 例如容器 iframe ) 上的维度乘以比例因子( 0.6为 WP,针对iPhone的1/window. devicePixelRatio )的倒数。 阅读有关devicePixelRatio的更多信息。

var factor = 1;if (iOS) {
 // devicePixelRatio evaluates to"2" on iPhone 4+ factor = 1/window.devicePixelRatio;
} elseif (wp7 || wp8) {
 factor = 0.6;
}var frame = document.createElement("iframe");
frame.width = 1024 * factor;
frame.height = 622 * factor; 

不过,在游戏画布上,我们希望看到像素而不是缩小游戏,然后将设备加倍,使之加倍。 所以我们使用了CSS缩放。 当通过CSS更改HTML画布的尺寸时,将缩放内容,而不仅仅是更改viewport大小并依靠浏览器重新计算画布的大小。 这给我们几乎在屏幕上的1/1 像素比率,它在一个小的高分辨率设备上看起来非常。

var factor = 1;if (iOS) {
 // devicePixelRatio evaluates to"2" on iPhone 4+ factor = 1/window.devicePixelRatio;
} elseif (wp7 || wp8) {
 factor = 0.6;
}var canvas = document.createElement("canvas");
canvas.style.width = canvas.width * factor;
canvas.style.height = canvas.height * factor;

结果( 不成比例) 游戏大小被传递到 GameInfo 类中的游戏中,并且游戏可以按常规的方式呈现。

// In game codefunction startGame() {
 var btn = new createjs.Shape(btnGraphics);
 // Position on the bottom right btn.x = this.gameInfo.width - btn.width - 10;
 btn.y = this.gameInfo.height - btn.height - 10;
}

重新洗牌

使用我们的新viewport设置,我们仍然面临一些挑战:

1.内容对齐

由于游戏是用单个的用例开发的,当画布改变大小时,assets的定位需要调整。

大多数时候用户界面和游戏元素已经锚定到一个边缘或者中心,但不总是。 它提醒我们,我们应该使用边缘对齐或者基于百分比的定位,无论从起点开始。

2.内容缩放

一些重排不是那么简单。 在超级断裂中,砖子设计为准确适合标准视口大小的13列。 为了支持更小的屏幕,我们开始把所有的东西缩小。 幸运的是,位图呈现在较小的尺寸上,但是在一个小屏幕上,我们留下了 13个。

这鼓励我们在开发人员SDK中包含一种直接的方法,以确定我们处理什么样的解决方案,以便内容能够适应。 我们没有提供像DPI这样的东西,而是选择了一种简单模式: 低。正常和高分辨率。 这个属性现在被暴露在 Atari Arcade的帮助GameInfo类中。

// On a tiny device, scale downif (gameInfo.quality == GameLibs.GameInfo.QUALITY_LOW) {
 myBtn.scaleX = myBtn.scaleY = 0.5;// On a high-resolution device, scale up} elseif (gameInfo.quality == GameLibs.GameInfo.QUALITY_HIGH) {
 myBtn.scaleX = myBtn.scaleY = 1;
}

当游戏在高分辨率设备上时,图像和UI元素被放大。 在一个极端的例子中,to和 720p Windows 手机几乎比它们的rtc对应的分辨率倍。

在新版本中,我们只包含 10列,以及 assets 缩放以适应可用空间。 幸运的是,EaselJS使缩放更加智能和简单。 你可以扩展单个 assets。具有多个子级的容器,甚至可以提供备用图像源以在高分辨率环境中交换。

function startGame() {
 // In high-resolution, scale the entire HUDif (this.gameInfo.quality == GameLibs.GameInfo.QUALITY_HIGH) {
 this.gameHud.scaleX = this.gameHud.scaleY = 0.6;
 }
}

在屏幕控件上

改变形式因素时,总是存在某些方面不能很好地翻译的风险。

当我们构思计划时,我们的关键问题之一是玩家的手。 在像 Surface 这样的设备上,只有在触摸模式下用户的小部分被用户的手遮住了。 在手机大小的设备上这个区域的增长相当大。

我们不能仅仅将UI控件缩放到游戏的它的余部分- 我们需要它们足够大的控制用户。 我们最初的计划是只推出 3个游戏,那些不需要用户界面控件的游戏: 超级突破。Pong和导弹命令。 但是经过一些快速测试,我们确信小行星也会工作。

它已经 控制需要缩小约 60%,但游戏仍然可以玩,有趣。

我们希望能够提供它的余的游戏机和开发人员提交的任何新游戏,在移动网站很快。

越来越多的测试

设备测试可能是一种痛苦。 模拟器可以让你进入一半,但是没有一个实际设备可以用来测试。 我们有一个强大的设备缓存,我们经常使用。

但是,你可以做许多很酷的事情来简化调试和测试:

  • 在IE10测试中,在没有过时测试机器的情况下,对以前的IE 版本提供了很好的测试。
  • 浏览器中的设备欺骗允许一种测试用户代理和viewport大小的方法。 Chrome 和Safari有很好的工具用于。
  • 要测试响应式界面,只需缩放浏览器窗口。
  • 使用 Wienre 远程调试提供出色的DOM检查。
  • 使用iOS6和 Lion 远程调试只需插入你的设备即可提供全面的网络检查。 只需在 iOS Safari首选项中启用检查器,并通过桌面上的Safari'开发者'菜单访问它。
  • iOS 5用户仍然有一个基本控制台,可以在 iOS Safari首选项中打开。
  • 通过 MAMP插件或者XAMPP插件运行服务器,设备可以通过内部网络访问开发版本。
  • in中包含的新测试包含了一些选项,用于在游戏中欺骗移动分辨率和触摸交互。 有'er !

寻址性能

作为这个项目的一部分,我们花了一些时间和微软的工程师和 evangelists,这是令人难以置信的洞察力。 除了微软的神奇团队,我们还获得了一些惊人的尊敬,我们学习了一些宝贵的技巧,技巧,以及我们进入Atari网站,Atari街机SDK和CreateJS套件的下一个版本的最佳实践。

我们大多数人在快速的四核( 或者更多) 核心机器上开发,拥有出色的gpu和更多马力比我们需要的更多。 在这个Arcade阶段,我们不得不仔细观察性能,并确保拱廊能够前进到较低的动力设备,包括基于微软的微软公司的微软。

以下是我们删除的一些大小大小的提示:

  • 单独保留 DOM。JavaScript -> DOM通信昂贵。 即使是在DOM中添加/删除音频,也会导致巨大的性能损失。
  • 降低DOM中的复杂性和嵌套。
  • 学习使用CSS转换,而不是像上面和左边那样定位属性。 CSS转换是硬件加速,超快速。 通过CSS进行位置更改非常慢。 注意,许多浏览器仍然使用前缀转换,因这里方法更复杂- 但结果值为 is。
// Old waydiv.style.top = "100px";// New wayvar props = ["transform", "msTransform", "webkitTransform", "oTransform", "mozTransform"];var found = false;for (var i=0; i <props.length; i++) {
 if (props[i] in div.styles) {
 div.styles[props[i]] = "translateY(100px)";
 found = true;
 break;
 }
}if (!found) {
 div.style.top = "100px";
}

有趣事实:IE10既有前缀还是无前置转换,因这里只要你想要增加性能,你就会想应用它。

  • 在元素上使用CSS类而不是使用javascript来操作样式。
  • 画布上的像素访问非常昂贵,因为它需要进入视频缓冲区。 尽可以能避免它。如果这里原因,EaselJS不会跟踪鼠标手势,除非显式关闭它们:
// Create a stagevar stage = new createjs.Stage(canvasElement);// Enable the mouseOver with a frequency// whic is the maximum number of checks per second.stage.enableMouseOver(10);
  • 触摸事件非常昂贵。 避免触摸输入造成的复杂动作,而是缓存触摸坐标,并在游戏刻度上执行动作,或者使用某种形式的失效。

总是在目标机器上总是测试。 许多 上面 提示在桌面上无法辨别,或者在桌面模拟时无法识别。 一旦它在你手上,你就会感觉到。

接下来

to希望能够很快打开开发人员,希望使用to可以提交到街机的开发人员。 有了最新版本的SDK,所有必要的钩子。方法和测试环境都可以在今天开始构建和测试移动游戏。 希望提交过程将在不久的将来扩展到移动领域。

所以,看看下面的资源,克隆街机的GitHub库插件,并有乐趣

资源

拿这些awesome的书。 它们是几年旧的,但是非常有用,并且为所有开发人员和设计人员提供了 gskinner.com 阅读。

下面是关于HTML5游戏开发的一些附加资源和参考。

关于作者

他和 Chris。com是致力于构建出血边缘互动和创新的高级员工,并为平台所有者。开发者和最终用户提供价值。 我们制作展示和增强技术平台的成功故事。 最近我们使用Atari来想象 Atari Arcade使用,CSS3和 web sockets等。


Html5  arc  ata  
相关文章