⇒ 動作確認はこちらから

アクセルとブレーキは別のキーにしてほしいというリクエストがあったので別バージョンも作成しました。Zキー:アクセル、Xキー:ブレーキです。⇒ 動作確認はこちらから

問題点の改善

前回まででTypeScript/JavaScriptでもつくる3Dカーレースゲームは一応完成しました。ただ問題点もあるので、それを改善します。

問題点として以下があります。

いきなり音がでる

フレームでどのようなものを作ったのかがわかるようにしているのですが、ロードとすぐにゲームが開始されるため、ライバル車に追突されれば衝突音が発生します。記事を読みたい方にとって頻繁に衝突音がするのはあまりよいとはいえません。基本的にページを読み込んだときに音が自動再生される仕様はよくありません。この点は改善されなければなりません。

読み込みに時間がかかる

コースを描画するためのデータを読み込むときに結構な時間がかかっています。アクセスしてなにも表示されないとせっかくアクセスしてくれたユーザーは離脱してしまいます。この点についても完全の余地があります。

時間が正しく計測されない

Update関数を実行するときに時間がかかる判定処理をしているため時間がかかっているようです。1秒間60フレームのはずなのですが、明らかに1フレームの処理に1/60秒以上の時間がかかっています。タイムとして表示されている時間がじっさいの時間経過と大きくズレているので、この点を改善します。

ゲームとしての完成度を高める

現状では車が走っているだけのブラウザアプリでしかありません。もうちょっとゲームらしいものに改良します。

このようにパッと思いつくだけでもこれだけの問題点があります。では改善策を考えていきましょう。

読み込みに時間がかかる問題を解決する

読み込みに時間がかかっている原因はコースを描画するために必要なデータを読み込んでいる部分と、ここからgeometryを生成してmergeMeshしている部分です。そこで最初は車だけを表示させてゲーム開始と操作方法を表示させます。ゲーム開始ボタンを押してから時間のかかる初期化をおこないます。また「初期化に数秒かかります」と表示させておけばそんなに問題にはならないと思います。

これで読み込みに時間がかかる問題は解決です。それからアクセスしてもゲーム開始の操作をしなければゲームがはじまらないので、いきなり音がでる問題も解決です。

音あり音なしを選択できる

音あり音なしを選択できるようにします。

チェックボックスで選択できるようにする

HTMLに以下の3行を追加します。別にどこでもいいのですが、canvasの前だとレイアウトが崩れてしまいます。管理人は以下の3行をHTMLの一番最後に追加しました。

Init関数の最初のほうにイベントリスナーを追加する処理を書いておきます。

BGMを止める

ゲームが開始されたとき、チェックボックス[音を鳴らす]がチェックされているか調べて、チェックされているときだけBGMを鳴らします。

ゲームが開始されている状態でチェックがつけられた場合、BGMを再生します。チェックが外された場合はBGMを停止します。それからTypeScriptを使う場合、//@ts-ignore をいれておかないと「プロパティ ‘checked’ は型 ‘HTMLElement’ に存在しません」というエラーが出てビルドできません。

ハンドル操作時の効果音を止める

他にも効果音がなる部分があります。

クラッシュ時の衝突音を止める

それからクラッシュしたときも衝突音が出るので、チェックボックス[音を鳴らす]が外されていた場合、衝突音が鳴らないようにします。