为Atari街机构建HTML5游戏

分享于 

28分钟阅读

Web开发

  繁體

在10天内开发 Windows 8应用程序。

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

。为Atari街机构建HTML5游戏

今天,在网上开发HTML5游戏是很简单的。 网络上的大多数游戏仍然使用 Plug-Ins 这样的构建,因为开发者没有让游戏开发变得简单和成本有效的工具。

大多数HTML5游戏是独立的,因此硬件和浏览器可以专注于游戏。 但这不是我们想象的现代街道"",用户可以收集,玩游戏,挑战他们的朋友,获得成绩。 我们必须重新考虑如何用一套通用的工具来实现游戏开发。

有了Atari街机,这个游戏改变。 网站完全用于 IE 10和 Windows 8触摸启用设备,尽管它在所有现代浏览器中都很好。 我们将用你自己的HTML5游戏快速启动和运行。 带CreateJS的of是第一个允许你更容易地利用多触摸功能的跨浏览器 HTML5游戏开发平台之一。 Atari街机SDK只是你应该考虑的众多选项之一。 我们分享的所有实践都可以与现代浏览器中的其他游戏平台一起使用。

在本文中,我们将提供:

  • 定义和构建游戏的步骤
  • sdk的目标和方法概述
  • 显示集成的示例代码
  • 添加flair和/或者 pizazz
  • 测试。优化和部署游戏的步骤

想象一个经典

从头开始创造一个概念。 在 gskinner.com, 中,我们很幸运- 提供了to目录,从简单到复杂的目的,任务是重新创建它们。 我们已经证明了现有的游戏,并引入了新的创意。 对于发射,我们有八个最受欢迎和可以识别的标题。

可视化

过去四十年来,随着计算的进步,我们开始从零开始。 我们设计了维护原件的灵魂,这是设计在一个更为严格的。低保真度的环境中。 这是 snap top的原创游戏 snap Yars。

经典。

概念

我们从草图开始简单松散的颜色。 他们帮助大纲的游戏,一般的审美,并获得我们的面对资产和方法,而不关注特定的艺术。

下面是 behind的场景,看看我们最初的草图。

风格化风格

Yars在reimagine中既坚韧又有趣。 尽管在80年代后期是最好的销售头衔,但我们团队里没有一个 played。 在播放原稿后,我们感觉像以前一样。

  • Yar是昆虫。 它们围绕着。
  • Yars射击,可以隐藏在障碍物里。
  • Qotile是他要破坏的对手。
  • 他们可以转换成一个漩涡,在Yar处射击。
  • 但是Yar有一个Zorlon大炮可以被充电和发射 !
  • 然后Yar吃掉它们。

我们发现这个很棒的漫画展示了一些设计的视觉效果

终结

根据这些想法和讨论我们自己,我们得出结论:

  • Yar是机械( 或者在一个带有推进功能的凉爽外骨骼里)。
  • 他和他的武器是冷的无菌的。
  • 周围的环境自然宁静。
  • Qotile,它的卵子和繁殖是有机的,uber的。
  • 卵孵化成孵化器: 搜寻Yar的子弹。
  • 漩涡是一个投影繁殖,在yar的挑战中是最难的。
  • 消耗蛋蛋,能够控制 Yar,这样就能使Zorlon火炮成功。

最初我们讨论了Yar吃鸡蛋,并提供了一种可怕的进食声音。 这是 final 精致的视觉风格。

我们考虑了故事。评分机械。水平系统。动画。用户交互和触摸控制。 随着研究。想法和美学探索 behind - 我们请求反馈,迭代,并最终做出决定。

开发游戏的策略

让我们开始开发简要介绍一下在SDK上构建的必要步骤。

定义清单

我们使用一个非常简单,集中和标准化的方法来定义和加载游戏资产: 游戏 Manifest 是一个简单的json格式的格式,描述游戏信息和它的资产的关键。 这是个传奇存储:

  • 游戏名称。
  • 系统的唯一标识。
  • 我们还包括用于部署的脚本的缩减选项。
  • 音频。映像和数据( XML,JSON ) 资产,需要预加载。
  • 显示在拱廊中的徽标和其他艺术品的路径。
  • 关于游戏模式。玩家数量等多人信息。
  • 它的他可选参数帮助定义框架如何与游戏交互,比如游戏是否可以继续播放。

它包含了预加载和启动游戏所需的相关细节。 下面是超级Breakout©的Manifest:

{
 "splash": "arcadeArt/background.jpg",
 "titleArt": "arcadeArt/gameTitle.png",
 "id": "breakout",
 "name": "Super Breakout",
 "gameClass": "Breakout.js",
 "modes": [
 {"id":"cavity", "label":"Cavity Mode",
 "src":"arcadeArt/sp-mode-01.jpg"},
 {"id":"progressive", "label":"Progressive Mode",
 "src":"arcadeArt/sp-mode-02.jpg"},
 {"id":"double", "label":"Double Mode",
 "src":"arcadeArt/sp-mode-03.jpg"}
 ],
 "dependencies": [
 "scripts/Ball.js",
 "scripts/Brick.js",
 "scripts/Level.js",
 "scripts/Player.js",
 "scripts/Paddle.js",
 "scripts/LevelManager.js",
 "scripts/LevelSelector.js",
 "scripts/Breakout.js",
 "scripts/ScoreBoard.js" ],
 "deployDependencies": [
 "scripts/breakout-min.js" ],
 "assets": [
 {"id":"json","src":"data/data.json"},
 {"id":"bricks","src":"data/bricks.json"},
 {"id":"lives","src":"data/lives.json"},
 "img/lives.png",
 {"id":"paddleData","src":"data/paddle.json"},
 "img/paddle.png",
 {"id:":"brickImage", "src":"img/bricks.png"},
 {"id":"background", "src":"img/background.png"},
 {"id":"scanlines", "src":"img/ui-scanlines.png"},
 {"id":"wall", "src":"sounds/Wall_Hit_02.mp3", "data":2},
 {"id":"brick1", "src":"sounds/Brick_Hit_01_Final.mp3"}
 // Other audio ]
}

图:你不需要做的工作。

提示: 使用 JSONLint 验证json格式化的内容。

这种方法将游戏的资产和游戏所需的信息从核心游戏逻辑中分离出来。 资产被预加载,模式填充,你的鲍瑟李。

Atari街机游戏框架预加载和实例化每个游戏。 Manifest 用于配置和填充站点。 当用户选择你的游戏,一切都预先加载并设置。 所有的资产都提供给游戏一个漂亮的easy-to-use对象散列。

// The game manifest includes an imagevar assets = [
 {id:"projectile", src:"images/projectile.png"}
];// Inside the game, we just do this:function initialize(assets, stage) {
 var bitmap = new createjs.Bitmap(assets.projectile);
 stage.addChild(bitmap);
}

Battleplan

使用SDK将帮助你定义和实现将你的游戏集成到Atari中所需要的方法。

在,网站中,游戏被启动 inside。 这为游戏创造了一个沙箱,并在游戏结束时提供轻松清理。 只需做一个rad游戏,提供一个 Manifest,框架就会完成剩下的工作。 SDK有很多out-of-the-box功能可以让你轻松地运行和运行,而不需要自己管理外围任务。

web服务提供了包含所有功能。实用程序和关键框架类的更深入的开发概述,包括在SDK中的快速入门指南插件。

维护好的文档包含在SDK中,直接从 inline 代码注释中导出。

有些 Gritty

下面是一些重要概念的简要回顾:

游戏初始化和启动

我们知道游戏已经加载了,但是用户没有启动它。 也许他们检查这些控件,或者凝视着闪亮的logo。 这给了你一个机会来初始化你的游戏。

// Simply define the function, and it is called by the framework.function initialize(stage, assets, gameInfo) {
 this.stage = stage;
 // TODO: Add children to stagethis.assets = assets;
 // TODO: Use to get references to preloaded assetsthis.gameInfo = gameInfo;
 // Use to determine info such as multiplayer, number of players// touch enabled, etc.}

一旦他们点击"开始",那就是游戏。

// Simply define this function, and the framework calls it// when a game is ready to be startedfunction startGame() {
 // Start!this.createBall();
 this.startMusic();
}

滴答

Ticker为游戏提供了心跳,由的 Ticker提供。 这是游戏更新( 动画和动画) 精灵,运行碰撞,计算分数,处理输入- 无论你的船。 将自动为你管理 tick: 在必要时停止并启动,甚至在高应力情况下被抑制。

// The game framework calls tick at regular intervals while the game is running.function tick(tickFactor) {
 // Move ballthis.ball.x += (this.ball.vx * tickFactor);
 this.ball.y += (this.ball.vy * tickFactor);
 // Note: the tickFactor tells you the speed the game is running relative to the// defined framerate so you can ensure the game runs at a steady speed.}

游戏质量

在 html5/javascript开发中,许多浏览器和设备的最大差异之一是性能。

根据硬件。浏览器甚至天的时间,可以能有硬件加速性能。 有时浏览器需要重启,或者用户需要升级他们的显卡。 可能有新的驱动程序可用。 可能是满月。

为了战斗这种情况,in允许你在高或者低质量情况下优先级优先级和效果。 简单检查游戏运行的质量模式,或者订阅低质量事件,以禁用或者删除在压力下不能很好地执行的特性。 缩放或者删除粒子效果,大位图动画,甚至交换子画面以降低保真度。

// Create a performance monitorvar minFPS = 20;var threshold = 20; // The number of ticks before toggling low qualityvar perf = new GameLibs.PerformanceMonitor(toggleLowQuality, minFPS, threshold);// Once low quality is toggled, turn off the heavy firework effect.function toggleLowQuality(lowQuality) {
 if (lowQuality) {
 fireworksEffect.enabled = false;
 }
}// During a tick, only emit particles if in high quality mode.function tick() {
 if (perf.lowQualityMode == false) {
 particleEmitter.emit(ball.position, 100, particleProps, defaultParticle);
 }
}

在战斗中,我们关闭了弹道,坦克踏板和其他爆炸效应,当CPU开始抱怨。

游戏得分

所有游戏的得分都不同,但大多数都有类似的要求: 数字点,寿命计数和级别。 一个 ScoreManager 类提供了用于提交的用户定义的分数。格式化的分数以及原始未格式化的分数。 只要将它指向EaselJS文本实例,并添加鲁莽放弃的数字 !

回拨

有时候你完成了Quotile的游戏,并且需要让Yar上级知道战斗是如何结束的。 你赢了我们是否允许你继续?

一些简单的回调可以用于将这里( 以及其他重要的游戏场景) 与框架通信。

function onKillPlayer() {
 // Who are we kidding? You lost. Yars is hard!this.lives--;
 if (this.lives == 0) {
 // Normally we might do something fancy first.// Like fade out the player, or show a death animationthis.onGameOver();
 }
}

就是这样框架做了剩下的事情- 甚至高分数的提交和显示是为你处理的。

用户输入

SDK提供一些方便的实用工具和组件组件来定义和捕获来自键盘或者鼠标的用户输入。 它甚至可以将鼠标按向方向和拖动行为。

web在网络上出现,并且for游戏已经在 IE 10中设计了触摸。 你可以使用EaselJS和Atari街机SDK创建simple-to-use多触摸功能。 它提供了单个。跨浏览器 和开发者透明的实现。

// Initialization is a great time to set up touch controlsfunction initialize(stage, assets, gameInfo) {
 // This setting comes from the gameInfoif (gameInfo.touchEnabled) {
 // Create a joystick. There are lots of awesome// configurations, but this is all you need to get// started. Check out the docs for options!var joystick = new GameLibs.Joystick(stage);
 joystick.setPosition(25, 25);
 stage.addChild(joystick);
 }
}

其他赠品

of开发游戏中使用的许多代码和效果已经被包装。文档化并作为SDK的一部分提供。

  • 粒子效果
  • 游戏用户界面控件( 非 canvas background )
  • 直线和圆形碰撞
  • 方便的数学。点和字符串实用程序
  • HTML background 和视差效果
  • Sprite实用程序

多人助手

你可能会注意到,在SDK中包含了多人类。 我们的初始启动包括四个使用它们的多人游戏,它们交织到了站点框架中。 第三方开发游戏目前不支持多人模式,但我们处理我们的方法,以促进沉浸式。第三方多人体验在街机游戏。 !

给它加满

一旦 Manifest 被填充,资产被加载,它就应该关注这个天赋。 使用声音,粒子,杀手插图和动画装饰游戏。 小心点,从头开始。 将应用程序转换为世界。

它可能是使交互变得有趣的小事情。

在 Yars revenge©中,小的bob和腿部动画让你相信他飞翔。 孵化时 Quotile。howling和蜂鸣声的产卵: they background 声音和飞溅帮助你将你置于环境中。 这是个 private的战斗地点: 一个独立的Yar来拯救他的物种 ! 还是他们压迫着Quotile的村民。 你决定 !

这个框架也能帮助我们。

1.逻辑运动

使用代码添加动作和动画。 许多包含的库可以帮助: 数学实用程序,ScoreManager,TouchBar和更多。

2.小小写字母

在TweenJS中包含简单的动画技巧。 添加抖动和脉冲。 转换视图,对话框或者新的级别。

3。声音

声音效果,background 环境和一个引人入胜的轨迹立即改变体验。 SoundJS使 messiest 跨浏览器 实现中的一个成为。

function fireWeapon() {
 // Play a sound once createjs.SoundJS.playSound(this.assets.fireSound);
 // Play a sound, and get a reference to itvar instance = createjs.SoundJS.playSound(
 this.assets.fireSound,
 createjs.SoundJS.INTERRUPT_ANY,
 offsetMilliseconds, delayMilliseconds,
 loopCount, volume, pan);
 // Call methods, or listen for callbacks instance.onComplete = handleFireComplete;
 instance.pause();
}

4.魔术

粒子效应是flair的工业标准。 ParticleEmitter 增加了烟雾。火花。水花和烟雾痕迹。 它是高度可以配置的,并且带有一个甜蜜的测试工具。 它使用了一个有效的方法,通过使用位图缓存来重用实例。

5.触摸

用户可能用他们的手触摸他们的浏览器。 启用easeljs级的多点多点触控响应。 Skin内置控件,或者为它的手指推出自定义触摸用户界面。

6.作弊

作弊代码是游戏行业的重要内容,所以添加你自己的攻击。 "konami"代码甚至包括了 SDK,连接了一个with类的回调,任何人都能够尝试它们。 我们在一些游戏中加入了支持- 看看你是否能找到 !

把它挤出

HTML5游戏的优化是一篇关于它的文章,但是这里有一些消息可以让你在正确的路径上进行设置:

1.图像和画布

Canvas不执行智能区域重绘( 与 Flash 不同),并且将在每个标记中刷新整个画布。 硬件加速可以帮助这一点,但通常来说,尝试并保持纹理更小。 将 static 背景移出画布。 SDK中的一个方便的GameUI 框架类有助于这一点,还有它的他有用的类可以在画布( 比如视差) 之外。

// An asset in the game manifest, which preloads the backgroundvar manifest = [
 {id: "background", src:"images/background.png"}
];// Backgrounds can be changed in the initialize// Or alternately somewhere in the game, like a level change.function initialize(stage, assets, gameInfo) {
 // Note that the background is provided as part of the assets. GameLibs.GameUI.changeBackground(assets.background);
}

2.在视频卡上跳转

现代浏览器可以加速内容,但是还有一些方法可以获得最佳的爆炸效果。

尽可能重复使用图像实例。 缓存只需要一次绘制的图形实例。 在EaselJS中使用 updateCache() 继续向缓存图像添加像素,例如战斗中的坦克踏板。

// The Arena.js contains the stamp methodfunction stamp(stamp) {
 // Clear out any old children. They aren't drawn so they// only get removed when we want to stamp something new.this.groundLayer.removeAllChildren();
 // Stamp the new sprite on top of existing cachethis.groundLayer.addChild(stamp);
 // Using source-over, it just applies on topthis.groundLayer.updateCache("source-over");
}

创建spritesheets和纹理,它们具有尺寸为2的尺寸。

3。使用 Spritesheets

在HTML5中使用spritesheets允许硬件加速对动画中的所有帧使用相同的图像。 有一个单向的前端负载,图像被缓存,然后简单地转换每个帧。 这也防止浏览器在图像中没有使用图像时将纹理上传到 GPU。

我们使用JSFL将spritesheets捆绑在一起,以便与CreateJS一起使用。

矢量艺术的另一个方法是使用"面向createjs的adobe工具包"直接从 Flash 导出资产。 它可以导出 EaselJS SpriteSheetBuilder 类所使用的矢量数据,以便在运行时动态生成 spritesheets。
现在下载工具包。

4.优化代码

尽管画布呈现占用了大量的管道,优化代码也是我们鼓励的练习。

  • 寻找减少负荷的聪明方法。 这个游戏类就是这样一个例子,它是track精灵接近数千精灵,很少开销( 基于从开始的
  • Resuse对象,数组和其他复杂实例,而不是创建新实例
  • 预先定义常用的计算或者算法。
  • 使用哈希查找而不是不断迭代 array
  • 释放已经完成的对象以释放内存

5.了解限制

某些浏览器使用不同的技术做的更好。 使用硬件加速浏览器来规划游戏设计,但是要做好适当的降级。

  • 远离阴影和混合模式。 大多数浏览器不能加速硬件,它们会使你的framerates崩溃。
  • 监视iOS上的图像大小。 超过 2048 x2048的任何东西都会自动按 50%大小调整大小。 同样,超过限制的内存中创建的任何内容都不会显示。
  • 不同的浏览器有不同的音频频道限制与HTML5音频,所以确保你停留在 40频道的音频(。包含重复效果的重复项)。

6.减少加载时间

这里有很多你可以做的。

  • 处理你的图像格式和压缩设置头部。 将背景保存为 JPG。使用 Omega 和alpha通道混合,或者 ImageAlpha使用索引png来使用完整透明度透明度。 Atari街机游戏利用ImageAlpha来减少游戏 spritesheets,最高达 80%。 把所有这些像素都 !
  • 压缩音频并擦除你可以使用的内容。 游戏不需要 256kb 位立体声音频- 尝试摆脱 32 -64kb单声道( 或者更低)。
  • 压缩代码。将它们合并成单个文件,节省了大量的资源 ! 我们使用服务器端和客户端端编译器来编译 JavaScript,并拥有一个带有 LESS的掺杂CSS流程。
  • 使用cdn托管库。JQuery,Backbone 插件,CreateJS插件。 这是我们作为SDK的一部分提供的,但是它是一个很好的提示,所以它属于这里。
  • 使用spritesheet提示 上面。

把它冲掉

移动和桌面不同的浏览器,不同的行为。 同一浏览器在不同的操作系统或者不同的CPU,甚至不同的视频卡,可以大大不同的结果。 检查目标浏览器,并经常检查。 测试 IE的多个版本时,请尝试使用F12开发人员工具。

通过清除缓存。刷新页面或者测试相同浏览器的旧版本或者较新版本,可以在 Bug 中进行健康检查。 例如有些浏览器经常更新或者透明地引入与代码的不兼容。 如果浏览器或者这样的东西完全失败,那么浏览器重启有时也会帮助。

调试

为了简化和均衡 跨浏览器 控制台报告,我们包括了一些用于将信息记录到控制台的实用程序。

  • Atari.trace() - SDK提供浏览器安全控制台日志方法。 控制台是你的朋友,信息错误是无价的 ! 获取所需信息非常重要,不需要将它的覆盖到最终用户。
  • 核心to类中的" developerMode"标志允许你放入测试代码和场景,而不必担心它的终端用户。 它自动启用/禁用详细错误检查,当 false 阻止所有 Atari.trace() 日志时。

本地测试

HTML5的本质使得在本地测试变得很棘手。 错误会出现,并且会出现浏览器警告。 跨引用在线行为,查看与代码中的合法缺陷相对应的本地测试。 例如在通过XHR加载内容时忽略这些局部产生的交叉源错误。

HTML5中的某些特性要求你的游戏在服务器上运行。 为了在本地测试,使用MAMP和XAMPP之类的工具在本地运行web服务器。
http://www.mamp.info/
Windows 和 Linux:http://www.apachefriends.org/en/xampp.html

在游戏目录上点击它们的首选项,导航到你的本地 IP,然后在你的地址上找到错误。 这也使得在网络上进行设备测试变得轻而易举。 在像 gskinner.com 这样的团队环境中,让它的他人测试 Bug。回归修复和运行本地服务器的游戏。

要在 IE 10中测试本地内容,请在 Windows 8桌面的IE 选项中将你的IP添加为可信站点。

在线测试

在线是唯一真正的考验。 向服务器推进里程碑进度,对所有浏览器。操作系统和设备中的所有功能和修复进行彻底的扫描。 始终清除测试( 除非测试缓存的特定功能) 之间的缓存,并选择退出浏览器。

FTP很慢。在服务器上检查GIT部署存储库,而使用SSH的谁可以提交更改。 我们设置了一个脚本来自动下载服务器上的最新更新,并将它的绑定到一个git提交钩子。 它有几个值得一提的步骤,但它节省了我们惊人的时间。

SDK中的测试线程提供了一种很好的方法来进行游戏测试,并包含一些可以减轻负载的选项:

  • 快速播放:网站 shim 脚本模拟游戏的载入,包括游戏模式,多人和处理游戏。
  • 音频免费:音频可能是游戏中最重的资源。 这里外,有些浏览器有大量的音频文件和特定的编码设置,这使得有一种方法可以防止任何音频。
  • 压力触控: 你不能真正模拟触摸- 但我们至少可以在桌面上模拟控件和场景。

按红色按钮

尽量使最小的。关键的部署过程尽可能的简单。

。但大部分内容都是由SDK提供的。 我们仍然在更新 3 as的游戏提交过程- 但是目标是尽可以能自动化和简单。

完成后,访问开发者中心的游戏提交 section。 我们将在未来几周内用正式的提交过程进行更新。

销毁 !

感谢你的支持 ! 停止阅读,开始建筑选择一个很酷的标题,然后去看看。 让我们知道你做什么,以及你想在 Atari商场或者SDK中看到什么。

资源

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

关于作者

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


构建  GAM  Html5  Building  arc  ata