Сергей Батищев: 2D игры на HTML5: мифы и реальность...

59
Building 2D HTML5 Games: Myths and Reality Sergey Batishchev https://twitter.com/ sergebat

description

Разработчики и издатели активно экспериментируют с HTML5 играми для мобильных браузеров. Cтандарт развивается очень быстро, но на разных устройствах и платформах все еще отличаются возможности, ограничения и особенности реализации HTML5 API. Докладчик поделится практическим опытом разработки игр на HTML5: какие проблемы уже не актуальны, какие сильно преувеличены, а какие, наоборот, реальны и требуют пристального внимания разработчика.

Transcript of Сергей Батищев: 2D игры на HTML5: мифы и реальность...

Page 1: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Building 2D HTML5 Games: Myths and Reality

Sergey Batishchevhttps://twitter.com/sergebat

Page 2: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Some of our HTML5 Games

Page 3: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

<TL;DR>

Page 4: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

© dracoimagem-com.deviantart.com, used with permission

Page 5: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Why are we doing it?

Page 6: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Playing in Mobile Browser

Page 7: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Reach New Platforms

Page 8: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Bad Reason:

“Write once run everywhere” debug

“Plugin-free”

Page 9: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

What exactly is HTML5? *

* for 2D games

Page 10: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

• <canvas>

• Web Audio API

• Touch API

• Local Storage API

• WebGL

Page 11: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

But HTML and JS are sloooow?!

Page 12: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Canvas Performance

iPhone 4s + iOS7.1 = 47 FPS

SGS3 + Android 4.3 Chrome = 38 FPS

500 sprites per frame

Page 13: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Canvas IS GPU Accelerated!

• iOS 5.0 beta +• https://developer.apple.com/safari/features/

•Chrome for Android (4.0+)• https://developer.chrome.com/multidevice/android/overview?csw=1

Stock Android Browser – ?

Page 14: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Android Stock Browser

500 sprites + SGS3 + Android 4.3 Stock = 8 FPS

80 sprites + SGS3 + Android 4.3 Stock = 40 FPS

Page 15: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Some pitfalls are real…

Page 16: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Implicit Texture Loading

void drawImage( in nsIDOMElement image, in float sx, in float sy, in float sw, in float sh, in float dx, in float dy, in float dw, in float dh );

Page 17: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

GPU vs In-Memory Canvases

<=256x256(In chrome)

256x256+(In chrome)

Page 18: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Small: 256x256Avg: 257x257

http://jsperf.com/mixedcanvases

Page 19: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Pure JS Performance

From “The Computer Language Benchmarks Game” http://benchmarksgame.alioth.debian.org/

Page 20: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

JIT Friendly JS

https://developers.google.com/events/io/2012/sessions/gooio2012/224/

Page 21: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки
Page 22: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Preloader• assets

• img• spritsheet.png• background.png• menubackground.png• …

• sound• tap.m4a• tap.ogg• …

• js• game.min.js

• index.html

Page 23: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Sound• Various formats (m4a, ogg)•Web Audio, fallback to HTML Audio Tag• Browser quirks

Page 24: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Render and UI

•Organize spritesheets•Stage, display lists•Touch, hit test

Page 25: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

But JS engines areeven slower?!

Page 26: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

500 spritesiPhone 4s + iOS7.1 = 47 FPS

SGS3 + Android 4.3 Chrome = 38 FPS

SGS3 + Android 4.3 Stock = 8 FPS

iPhone 4s + iOS7.1 = 30 FPS

SGS3 + Android 4.3 Chrome = 24 FPS

SGS3 + Android 4.3 Stock = 7 FPS

Page 27: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Which engine to choose?

Page 28: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Thoughts on selection

•Canvas / WebGL / Both? •Big guys behind it? • JS/HTML is a priority for them? •Hackable?•Can build SWF/APK/IPA?

Page 29: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

But supporting all browsers/devices is

painful?!

Page 30: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Should work well on:•Browsers• iOS Safari 6.0 +•Android Browser 4.0+•Android Chrome 4.0+

• Popular devices (1-2 year old)• iPhone 4S, iPad 2 and newer•Galaxy S3, Galaxy Tab, etc

Page 31: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Playable (more or less)

• iPhone 4, iPad 1• Galaxy S2/S1/Y

Page 32: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Desktop is often secondary objective

•Two last Chrome versions•Two last Mozilla versions•IE 9.0 +

Page 33: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Keep it Simple

•Pure canvas, no DOM• Libs like Zynga Scroller can help

• Just 1 canvas

•Test on at least one device

Page 34: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Various screen sizesare painful!

Page 35: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Full Screen•Proper• Full screen API (requestFullscreen)

•Hack• scrollTo• Zynga Scroller to handle the tricks

•minimal-ui • iPhone on iOS 7.1+ only

Page 36: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Lock Orientation APO is not widely available (yet)

Page 37: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Dangerous Gestures

Swipe entire screen left/right

Swipe from the topTap the top

Page 38: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Careful with Horizontal Orientation

Page 39: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Background

My choice for now

640x960

Vertically oriented

game area

640x712

Please rotate your phone

Page 40: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Sound Support

Page 41: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

iOS 6.0+

•WebAudio is well supported• Supported format: M4A• Play sound in user interaction

to unmute

Page 42: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Android Chrome

•WebAudio is well supported • Supported format: OGG

Page 43: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Android Stock Browser

•Only HTML audio tag• Supported format: OGG•Huge delays/sync issues

Page 44: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

print(“Hello World”)

Page 45: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

fillText

iPhone 4s + iOS7.1 = 60 FPS

SGS3 + Android 4.3 Chrome = 43 FPS

SGS3 + Android 4.3 Stock = 34 FPS

200 text labels per frame

Page 46: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Multiline Text

FPS is ½ ofplain fillText

(in CreateJS)

Page 47: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

fillText is not pixel-accurate

Chrome (and friends) Firefox and friends

Page 48: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Touch vs Mouse Events

Page 49: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Some devices have both!

Page 50: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

preventDefault();

Touch events

Mouse events

Page 51: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Customers and their API

Page 52: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

• Easy and common:• Add logo + splash (PNG/JPG)• Add animated preloader (HTML+JS)• Submit scores• Submit start/gameover/levelend/etc• Work in iframe, custom resize

• Harder and rare:• Work in “their” API canvas• Custom path to load resources (CDN)

Page 53: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Wrapping Apps

Page 54: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Dreaded WebView• iOS: • No JIT in WebView• Canvas is likely not hardware accelerated• Hint: test on Chrome for iOS

• Android: • Based on standard Android Browser

before 4.4• Canvas is NOT hardware accelerated

Page 55: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

How do we makeapps from HTML5 then?

Page 56: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

+ High performance canvas embedded+ Works across iOS/Android/WinPhone- Custom extensions are coming- Mandatory splash screen

Page 57: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

+ “Real Chromium” embedded+ Open source, backed by Intel XDK- ~20MB min APK, only Android 4+

Page 58: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

+ Mature, well supported+ Open source, optional cloud build, backed by Adobe- WebView - External “FastCanvas” is not easy to support

Page 59: Сергей Батищев: 2D игры на HTML5: мифы и реальность разработки

Questions?

Sergey Batishchevtwitter.com/sergebat

html5devgamm2014.bitbucket.org