JavaScriptで3Dブロック崩し

JavaScriptで無理やり3Dゲーム。

はじめに

JavaScriptには幾何描画機能はない。直線を引くことすらできない。しかし、スタイルシートを操作することで画像の配置、重ね合わせ、表示・非表示などの制御が可能である。

で、考えた。画像をうまく配置すれば3Dっぽく見せることができるんじゃね、と。

じゃぁ作ってみるかということで作ってみたのがこのゲーム。開発初期は鬼畜な感じだったが今ではだいぶ丸くなった・・・はず。

3DであることよりもJavaScript製であることに意義がある・・・って大学祭の展示で一般人相手に主張しても分かってくれることはそうそうないんでサイトで主張してみる。

ゲーム

ゲームのプレイは下のリンクからどうぞ。

アルファチャンネルPNG対応のブラウザじゃないと正常に表示されないと思います。ということでIE6には未対応。

とりあえず動作確認したブラウザはFirefox3、IE7、Google Chrome、Opera9、Safari3。

バグ報告とか

バグ・不具合報告、要望、提案等は送信フォームまたはメールでどうぞ。

バグ・不具合報告の際はブラウザの種類やバージョンを記載してくれると早期解決(または匙投げ)できるかもしれません。

FAQ

ゲームシステム系

Q.一回ミスっただけでゲームオーバーしたんですが。

A.残機なんてありませんよ。一発でゲームオーバーです。ようするに仕様です。

Q.ステージ1種類だけなの?

A.はい。1種類だけです。

一応blockbreaker.jsのstage関数をいじればオリジナルのステージを作ることもできます。

Q.視点変換できないの?

A.できないの。

Q.ゲームオーバーしたんだけどこれからどうすればいい?

A.Enterキーを押すか、ゲーム画面上でクリックすればタイトルに戻ります。

描画系

Q.ボールの遠近感がつかみにくいんですけど。

A.確かに・・・。特に手前から奥へ(または奥から手前へ)ボールが動くときとかは静止しているようにみえたり。

手前に来ると大きくなって奥にいくと小さくなるようにすればいい・・・というわけだが今使ってる方法だとそれができないし、当たり判定関連もややこしくなりそう。ということでこの辺の改善は期待薄です。

エラー系

Q.灰色の画像がいっぱい出てるんですけど。

A.ブラウザがアルファチャンネルPNGに対応していないと思われます。こちらで動作確認したブラウザを使えば問題なく画像が表示されると思います。

Q.ボールを落としたあとゲームオーバーの表示も何もなしにいきなり新しいゲームが始まったんだけど。

onmousedonイベントを拾ったあとonmouseupイベントを拾い損ねたのでしょう。

とりあえずEnterキーを押すか、ゲーム画面上でクリックすれば直るはずです。

Q.○○の当たり判定(反射処理)がおかしい!!

A.詳細に報告お願いします。この際はブラウザの種類とかの情報は結構です。

実際のところ3次元での当たり判定や反射について人間に正しく認識できるのか怪しいところですが。

今後

冒頭で「JavaScriptには幾何描画機能はない」って言ったけどそれも変わりつつあるんだよね。HTMLの次期仕様と目されているHTML5ではcanvas要素っていう幾何描画とかができる要素が加わるようで、すでにいくつかのブラウザで実装されています。

canvas要素を使えばFAQで「できましぇん」とか言ってた機能、描画のいくつかが実現可能になりそうです。ということでcanvas要素版も作ってみようかな〜、と考えてたりしてます。実際作るかどうかはともかく。