html5 で脱出ゲームが作れるのか?という疑問を持ったのでやってみました。
html5 で作るといっても9割は JAVAScript ですけどね。とりあえず第一回ということで、脱出ゲームの基本的な部分「画面遷移」まで作りました。
html5で脱出ゲーム デモ(各種最新ブラウザで動作します)別窓
html5 部分
html5 での肝は canvas タグ。この中に色々描画していきます。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>html5で脱出ゲームは作れるのか?</title>
<script type="text/javascript" src="js/escape.js"></script>
</head>
<body>
<canvas id="escape" width="550" height="400"></canvas>
</body>
</html>
JAVAScript
FLASH と違う点は、ボタンを押した時の処理をボタンに書くような事ができません。あと、クリックポイントでマウスポインタを指マークにするなど FLASH で勝手にやってくれた細かな処理も自分で書かなくてはいけません。
タイトル
var title = "html5で脱出ゲームは作れるのか?";
var startbt = "Play";
var canvas = document.getElementById("escape");
if ( ! canvas || ! canvas.getContext ) { return false; }
var cx = canvas.getContext("2d");
cx.font = "20px 'Century Gothic'";
cx.fillText(title,110,100);
cx.fillText(startbt,250,250);
今回のデモのタイトルはテキストベースで簡素なものですが、いっそ画像にしてしまえば FLASH と遜色ないものができます。「fillText」で表示したいテキスト、x座標,y座標を指定してテキストを描画しています。
Play ボタンのクリック
FLASH では数行で済んだものが、結構な量になります。
canvas.addEventListener("mousedown", mouseDownHandler, false);
var view = 0; //いま自分がどこにいるのかを示す変数(0=タイトル)
function mouseDownHandler(e) { //マウスがクリックされたら動く関数
var rect = e.target.getBoundingClientRect();
mouseX = Math.floor(e.clientX - rect.left);
mouseY = Math.floor(e.clientY - rect.top); //マウスポインタの位置を取得
if(view == 0){
if(mouseX > 250 && mouseX < 300){
if(mouseY > 230 && mouseY < 253){ //クリック範囲を座標で指定
view = 1; //クリックされたら位置変数を更新
printView(); //部屋の画像を表示する(後述)
}
}
}
部屋の画像を表示
function printView(){
var img = new Image();
if(view == 1){
img.src = "image/view1.jpg";
img.onload = function(){ //画像が完全に読込まれたら動く関数
cx.drawImage(img, 0, 0); //画像を描画
moveBt(); //画面遷移ボタンを表示
itemBar(); //アイテムバーを表示
}
}else if(view == 2){ ・・・
画面遷移ボタンの表示
function moveBt(){
cx.beginPath();
cx.moveTo(4, 200);
cx.lineTo(25, 185);
cx.lineTo(25, 215);
cx.closePath(); //3つの点を線で結んで三角形にしています
cx.fillStyle = "#ffffff";
cx.fill(); //白で塗りつぶします
cx.beginPath();
cx.moveTo(546, 200);
cx.lineTo(521, 185);
cx.lineTo(521, 215);
cx.closePath();
cx.fillStyle = "#ffffff";
cx.fill();
}
この時点でまだボタンとしての機能はありません。別に記述します。
ボタンとして機能をつける
Play ボタンクリックの時の「クリックしたら動く関数」に画面遷移ボタンをクリックした時の処理を追加します。
画面遷移ボタンのクリック範囲を座標で指定します。それが各視点分要ります。(view 1~4)
else if(view == 1){
if(mouseX > 4 && mouseX < 25){
if(mouseY > 185 && mouseY < 215){
view = 2;
printView();
}
}
if(mouseX > 521 && mouseX < 546){
if(mouseY > 185 && mouseY < 215){
view = 4;
printView();
}
}
}else if(view == 2){ ・・・
クリックポイントはマウスポインタを指マークにする
画面遷移ボタンのクリック範囲を座標で指定し、マウスカーソルを変更。範囲外ではデフォルトに戻しています。
if(mouseX > 4 && mouseX < 25 && mouseY > 185 && mouseY < 215){
document.body.style.cursor = "pointer";
}else if(mouseX > 521 && mouseX < 546 && mouseY > 185 && mouseY < 215){
document.body.style.cursor = "pointer";
}else{
document.body.style.cursor = "default";
}
ソース
これらの要素を繋げた状態で見ないとわかりにくいのでソースを公開します。
ソース
作ってみた感想
FLASH より大変そうですが、html5 でも作れなくもないかなと思います。この基本構造だけでソースが180行近くあり、本格的に脱出ゲームを組んだらどれだけになるのか想像できません。
私は FLASH(ActionScript)以外にもプログラミング経験があるので出来ましたが、FLASH に慣れた人がいきなり JAVAScript で組むのは難しいと思います。そう考えると、FLASHブラウザゲーム界隈が html5 にシフトは考えにくいかな。敷居が高すぎる。その代わりに FLASH 作成ツールなしで、メモ帳だけでゲームが作れますけどね。
次の記事
html5で脱出ゲームは作れるのか?(2:効果音を鳴らす)