トップ «前の日記(2005-11-25) 最新 次の日記(2005-11-28)» 編集

ざらめざいどにっき (G5)


2005-11-26

_ [技術系][Web制作] JavaScript でアクションゲームを作ってはいけない

跳べ! ノミ野郎関連文章。

JavaScript でオブジェクト指向的なことをやるのは実用的なのか・ Ajax を実際に使ってみるとどんな感じか ということを実験するために作ってみたこのゲーム。当初の目標は十分に達成することができましたが、もう一つ感じたことがあります。完璧に趣味で作る以外ではゲーム(特にアクション系)を JavaScript で作らない方がいいです。(多分いないけど)「こんな辺境のサイトでもこんなものができるんだー」と軽い気持ちで作り始めるときっと馬鹿を見ると思うので忘れないうちに書いておきます。

主な理由は以下のとおりです。

画像が扱いづらい
いわゆる DHTML でブロックは簡単に置くことができますので特定の色・パターンの四角形は簡単に扱えますが、それ以外の図形を扱おうとするととたんに難しくなります。画像の拡大・縮小ぐらいはできますが、回転になるともうだめです( IE ではできますけど)。そういうことをしようとすると、全部のパターンをあらかじめ用意しておくか、あるいは画像生成を行うプログラムをサーバ側に用意しておくことになります。多分多くの方がお気づきだと思いますが、今回のゲームでも四角形ブロック以外はその都度サーバで生成してます。(円形も生成してるのは全色用意するのが面倒だから)
デバッグが大変
入れ物は HTML 、色付けなどは CSS 、クライアント側スクリプトは JavaScript 、そしてサーバ側スクリプトには Perl と、多くの技術を組み合わせないといけません。 JavaScript と Perl を同時に編集してるといい感じに頭が煮えてきます。そして当然バグが起こった時の原因も突き止めづらくなります。「ブロックが表示されないなー」と必死に JavaScript 内を見回して、結局原因は CSS の ID 指定の綴りが間違ってたってことも。
IE のタイマーの精度が悪い
先日の日記のとおりです。普通のアクションゲームはモニタのリフレッシュレートに合わせて秒60回更新か30回更新なんですけど、それができません。結果コマ落ちが起きます。シビアな反応が要求されるアクションゲームにとっては致命的です。今回のゲームは動きも比較的ミニマムなので何とかなってますけど。
音が鳴らない
JavaScript で直接的に音を扱う方法が存在しません(あったら教えてください)。 JavaScript & DHTML クックブックでも Windows Media Player との LiveConnection を使用した方法しか紹介していません。この本とは別に flash を使った方法も紹介されていますが、だったらゲーム自体 flash で作った方が、ね。ゲームの種類にもよりますが音はプレイヤーへの重要なフィードバックの1つですから、これがないのはゲームを制作する上での大きな問題です。

もちろん JavaScript で作るメリットもあるわけなのですが、特にアクション系ゲームにおいてはデメリットの方が圧倒的です。 flash は使ったことないんですが、恐らく flash を使った方が圧倒的に生産性も操作性も良いでしょう。賢い人は素直に flash を使いましょう。

要するに、適材適所ってことですよ。これまで flash ぐらいしか語られてこなかったところに Ajax のおかげで JavaScript という選択肢が一般に広がったのは大きな進歩です。と分かったような顔をしてシメ。

本日のツッコミ(全2件) [ツッコミを入れる]
_ NITA (2005-11-27 00:19)

アクションであっても、二十数年前のBASICゲームプログラミング集みたいなのに載っているようなテキスト主体のゲームならFlashより遥かに作りやすいです。

_ Zide (2005-11-27 00:51)

なるほど。確かにテキスト主体になってるようなゲームだと挙げた理由がほとんど潰れますから JavaScript の方が作りやすそうですね。指摘感謝。