SlideShare a Scribd company logo
初心者向け
JavaScript/HTML5
ゲームプログラミング
2015年7月25日
#1.Study program of dearness∼プログラミング勉強会∼
@zukkun
自己紹介
• 北海道天塩町出身
• 先週、30歳になりました
• 小学5年 プログラミングに目覚める
(BASIC)
• VisualBasic/VisualC++でDirectXで
ゲームプログラミングして遊ぶ
• ゲーム会社でプログラマとして5年過
ごした(主にC++)
• 現在:システム開発会社に転職して
色々やってる
@zukkun
ゲームを作りたい!
昔
• BASIC
• RPGツクール
• HSP
• DXライブラリ
今
• Unity
• Cocos2d-x
• UnrealEngine
ここで新たな
ゲームエンジンを紹介
\ Webブラウザ /
えっ?
Webブラウザで動く
ゲームの開発方法の紹介
使用する言語
• HTML
• JavaScript
使用するツール
• Webブラウザ
• Google Chrome
• Mozilla Firefox など
• テキストエディタ

(Vimとか、Vimとか、Vimとか)
フレームワークは?
HTML5ゲームフレームワーク
• Phaser
• Impact
• CreateJS
• enchant.js
• melonJS
• LimeJS
• Kiwi.js
• ……ほか多数(HTML5ゲームフレームワーク戦国時代)
フレームワーク
開発を楽にする
学習を楽にする
HTML JavaScript
SceneGraph
Sprite
AnimationPhysics
SpriteSheet
TextureAtlas
Particles Camera
Input
Sound
Tilemap
Device Scaling
Plugin
覚えなければいけないものが
山のように押し寄せる!
初歩段階で
フレームワークを導入すると
学習意欲に
致命的なダメージを与える
フレームワークは
使いません
フルスクラッチ
フルスクラッチ
【 full scratch 】
• フルスクラッチとは、既存のものを一切流用せずにまったく
新規に開発すること。もとは模型の用語。
• システムやソフトウェアの開発において、パッケージ製品や
他のソフトのソースコード、雛形などを使用せず、ゼロから
開発していくことをスクラッチ開発というが、まったく何も
流用していないことを強調したいときにフルスクラッチとい
う。
• フルスクラッチとは|full scratch - 意味/解説/説明/定義
: IT用語辞典 http://e-words.jp/フルスクラッチ.html
HTML (index.html)
<!DOCTYPE>
<html>
<head>
<meta charset=“UTF-8”>
<title>ゲーム</title>
</head>
<body>
</body>
</html>
HTML (index.html)
<!DOCTYPE>
<html>
<head>
<meta charset=“UTF-8”>
<title>ゲーム</title>
</head>
<body>
<canvas id=“main_canvas”
width=“640px”
height=“480px”>
</canvas>
</body>
</html>
HTML (index.html)
<!DOCTYPE>
<html>
<head>
<meta charset=“UTF-8”>
<title>ゲーム</title>
<script src=“main.js”></script>
</head>
<body>
<canvas id=“main_canvas”
width=“640px”
height=“480px”>
</canvas>
</body>
</html>
JavaScript (main.js)
var canvas = null;
var ctx = null;
JavaScript (main.js)
var canvas = null;
var ctx = null;
// 初期化
function init() {
}
JavaScript (main.js)
var canvas = null;
var ctx = null;
// 初期化
function init() {
canvas =
document.querySelector(‘#main_canvas’);
// document.getElementByIdでも良い
}
JavaScript (main.js)
var canvas = null;
var ctx = null;
// 初期化
function init() {
canvas =
document.querySelector(‘#main_canvas’);
ctx = canvas.getContext(‘2d’);
}
getContext( 2d )が返すもの
CanvasRenderingContext2D
https://developer.mozilla.org/ja/docs/Web/API/
CanvasRenderingContext2D
JavaScript (main.js)
var canvas = null;
var ctx = null;
// 初期化
function init() {
canvas =
document.querySelector(‘#main_canvas’);
ctx = canvas.getContext(‘2d’);
}
CanvasRenderingContext2D
init関数を呼ぶ
// init();
// いきなり呼び出すと、
// HTML要素が構築される前に呼び出してしまう
window.addEventListener(‘load’, init);
init関数を呼ぶ
// init();
// いきなり呼び出すと、
// HTML要素が構築される前に呼び出してしまう
window.addEventListener(‘load’, init);
Functionオブジェクト
画像を読み込む
// 画像を読み込む
function loadImage() {
}
画像を読み込む
var image = null;
// 画像を読み込む
function loadImage() {
image = new Image();
}
画像を読み込む
// 画像を読み込む
function loadImage() {
image = new Image();
image.src = ‘box.png’;
}
box.png
画像を読み込む
// 画像を読み込む
function loadImage() {
image = new Image();
image.src = ‘box.png’;
image.onload = function() {
// 読み込み完了
};
}
画像を読み込む
// 画像を読み込む
function loadImage() {
image = new Image();
image.src = ‘box.png’;
image.onload = function() {
// 読み込み完了
};
}
標準で非同期読み込み!
画像を読み込む
// 画像を読み込む
function loadImage(onComplete) {
image = new Image();
image.src = ‘box.png’;
image.onload = function() {
// 読み込み完了
};
}
画像を読み込む
// 画像を読み込む
function loadImage(onComplete) {
image = new Image();
image.src = ‘box.png’;
image.onload = function() {
// 読み込み完了
onComplete();
};
}
画像を読み込む
function init() {
:
loadImage();
}
画像を読み込む
function init() {
:
loadImage(function() {
// 画像読み込み完了後に行う処理
});
}
更新処理と描画
function update() {
render();
}
function render() {
}
画面をクリア
function render() {
// 画面をクリア
// clearRect(X座標, Y座標, 幅, 高さ)
ctx.clearRect(
0, 0, canvas.width, canvas.height);
}
画像の描画
function render() {
// 画面をクリア
ctx.clearRect(
0, 0, canvas.width, canvas.height);
// drawImage(画像, X座標, Y座標)
ctx.drawImage(image, 0, 0);
}
画像の描画
function render() {
// 画面をクリア
ctx.clearRect(
0, 0, canvas.width, canvas.height);
// drawImage(画像, X座標, Y座標)
ctx.drawImage(image, 0, 0);
}
updateしてみる
function init() {
:
loadImage(function() {
// 画像読み込み完了後に行う処理
update();
});
}
実行してみる
毎フレーム処理
function update() {
window.requestAnimationFrame(update);
render();
}
次回、描画タイミングで都合の良いタイミングで
関数を1度だけ呼び出してくれる
(大抵の環境では60FPS)
箱を動かしてみる
// みかん箱のX座標
var boxX = 0;
箱を動かしてみる
// みかん箱のX座標
var boxX = 0;
function update() {
boxX += 1;
render();
}
箱を動かしてみる
function render() {
:
ctx.drawImage(image, boxX, 0);
}
実行してみる
はい
というような感じでですね
Webブラウザで動く
少しゲームっぽいものを作る
初歩の紹介をしました
Webブラウザで
フルスクラッチでゲームを作って見る利点
• 昔のBASICでゲームを作るような

楽しさが味わえる
• 書いたコードが

すぐ実行できて楽しめる
PCのブラウザでしか
動かないの?
そんなことはありません
• スマートフォンのブラウザでも

Canvasは使えます
• Cordovaというツールを使えば、

Android/iOS向けのアプリパッケージにして

ストアで配信することも可能です
実は今回は
Webブラウザの魅力的な機能の
2%程度しか紹介できていない
※時間の都合上
※当社比
他に
Webブラウザが標準で持つ
魅力的な機能を簡単に紹介
Fullscreen API
フルスクリーン表示!
Gamepad API
ゲームパッド入力!
WebGL
3D表示!
Web Audio API
遅延の少ない音声再生!
効果音に最適!
Pointer Lock API
マウスカーソルが無くなって
マウスの動きの量だけ監視!
明らかに
FPSゲーム向けだろこれ!
Webブラウザには
ゲーム向けと思われる
標準仕様の機能が
増えてきています
※そのうち物理演算も

標準で載るんじゃないかとか想像してます
これは
各ブラウザベンダー
またはWeb標準化団体からの
「Web標準機能を使って
 ゲームを作りなさい」
我々に対する
という要求です
※個人の解釈です
ならば
受けて立ちましょう
あなたも
その一人になってみませんか?
ご清聴ありがとうござました

More Related Content

PDF
Webサイトに動きをつける、jQueryプラグインの設置方法 先生:田中 晶子
PDF
Web frontend performance tuning
PDF
レスポンシブ・イメージのWordPressへの実装と4.4
PDF
HTML5-20100626
ODP
HTML5 アプリ開発
PDF
Grunt front-osaka-1-lt-tanaka
ODP
HTML5 開発環境の紹介
PDF
Webエンジニアのためのプロジェクションマッピング(とりあえず完結編)
Webサイトに動きをつける、jQueryプラグインの設置方法 先生:田中 晶子
Web frontend performance tuning
レスポンシブ・イメージのWordPressへの実装と4.4
HTML5-20100626
HTML5 アプリ開発
Grunt front-osaka-1-lt-tanaka
HTML5 開発環境の紹介
Webエンジニアのためのプロジェクションマッピング(とりあえず完結編)

What's hot (20)

ODP
今流行りのウェブアプリ開発環境Yeoman
PDF
Vue.js with Go
PDF
今すぐブラウザでES6を使おう
PDF
WebComponentsとPolymerを使ってみた
PDF
WordCamp Kansai 2015 CI ハンズオン
PDF
YARAIYA! Opendata with WordPress
PPTX
Looking glass + videoplayer
PDF
久しぶりにWebエンジニアのためのプロジェクションマッピング
PDF
GUIツールで送る快適な Gitライフ@Creators MeetUp #29
PDF
ブラウザだけで学ぶWebアプリ開発
PPTX
[社内勉強会]Gradleを使おう
PPTX
JavaScriptフレームワーク入門にVue.jsはいかが?
PDF
ピピピのPWA
PDF
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
PDF
スマホにおけるWebGL入門
PPTX
WordCamp Kansai 2015 ハンズオン - 踏み出してみよう!翻訳の第一歩 #wck2015
PDF
Kwikをはじめるまえに
PDF
インラインSVGをつかって地図っぽいものをつくってみる
PPTX
Webアプリのシナリオテスト自動化を運用に乗せるまでの10のステップ
PDF
とある Perl Monger の働き方
今流行りのウェブアプリ開発環境Yeoman
Vue.js with Go
今すぐブラウザでES6を使おう
WebComponentsとPolymerを使ってみた
WordCamp Kansai 2015 CI ハンズオン
YARAIYA! Opendata with WordPress
Looking glass + videoplayer
久しぶりにWebエンジニアのためのプロジェクションマッピング
GUIツールで送る快適な Gitライフ@Creators MeetUp #29
ブラウザだけで学ぶWebアプリ開発
[社内勉強会]Gradleを使おう
JavaScriptフレームワーク入門にVue.jsはいかが?
ピピピのPWA
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
スマホにおけるWebGL入門
WordCamp Kansai 2015 ハンズオン - 踏み出してみよう!翻訳の第一歩 #wck2015
Kwikをはじめるまえに
インラインSVGをつかって地図っぽいものをつくってみる
Webアプリのシナリオテスト自動化を運用に乗せるまでの10のステップ
とある Perl Monger の働き方
Ad

Similar to 初心者向けJavaScript/HTML5ゲームプログラミング (20)

PDF
JavaScriptでいいじゃなイカ
PDF
サーバサイドで動的にhtml生成していたりjQueryをガッツし使っている既存プロジェクトにAngularJSを部分的につっこんでみた @jscafe21
PPTX
2012 kanemotolablecture4
PDF
2014/12/13 第1回 Scala関西勉強会 play2-memcached supports Play 2.4 ~Play 2.4モジュールのつく...
PDF
GCP vs 他社クラウド
PPTX
誰にでもできるパフォーマンスチューニング
PPTX
2010/8/27 TechEd2010 ライトニングトーク
PDF
WP-CLI (WordBench Sendai 20140628)
PDF
進化する Web ~ Progressive Web Apps の実装と応用 ~
PDF
Ssaw08 1014
PPTX
React NativeでTwitterクライアントを作ってみよう
KEY
How to django at first
PPTX
T119_5年間の試行錯誤で進化したMVPVMパターン
PDF
プロダクトに 1 から Vue.js を導入した話
PDF
Titanium勉強会
PPTX
Web Workers
PDF
Jenkins+Play!で気軽にCI
PDF
vImageのススメ(改訂版)
PDF
Unity に於ける iOS ビルド自動化のおはなし - 20141030 第26回 Unity 勉強会
PPTX
Scalaコーディングの準備
JavaScriptでいいじゃなイカ
サーバサイドで動的にhtml生成していたりjQueryをガッツし使っている既存プロジェクトにAngularJSを部分的につっこんでみた @jscafe21
2012 kanemotolablecture4
2014/12/13 第1回 Scala関西勉強会 play2-memcached supports Play 2.4 ~Play 2.4モジュールのつく...
GCP vs 他社クラウド
誰にでもできるパフォーマンスチューニング
2010/8/27 TechEd2010 ライトニングトーク
WP-CLI (WordBench Sendai 20140628)
進化する Web ~ Progressive Web Apps の実装と応用 ~
Ssaw08 1014
React NativeでTwitterクライアントを作ってみよう
How to django at first
T119_5年間の試行錯誤で進化したMVPVMパターン
プロダクトに 1 から Vue.js を導入した話
Titanium勉強会
Web Workers
Jenkins+Play!で気軽にCI
vImageのススメ(改訂版)
Unity に於ける iOS ビルド自動化のおはなし - 20141030 第26回 Unity 勉強会
Scalaコーディングの準備
Ad

初心者向けJavaScript/HTML5ゲームプログラミング