今回はディスプレイによって表示サイズを変更できるようにします。

前回までスマホでも表示されるようにするために320px×480pxで作成しましたが、PCだとちょっと小さくしか表示されないという問題がありました。そこで今回はディスプレイによって表示サイズを変更してみることにします。これならスマートフォンのようなディスプレイが小さいものでもPCのような大きなディスプレイにも対応できます。ウィンドウサイズを変更したときもサイズ変更されるのでYouTubeで配信している方に紹介してほしいときにもいい感じで表示されるのではないのでしょうか?

ウィンドウサイズを取得しCanvasのサイズを変更する

JavaScriptであればウィンドウサイズは以下で取得できます。

これまで定数として宣言されていたものを変数に変更します。ただし書き換える場所を最低限におさえるため名前は変えません。

下記7つの定数を変数に変更します。初期値はこれまでと同じです。

ウィンドウサイズを取得して上記の値を適切なものに変更します。Canvasの縦横の比は2:3だったので幅を半分にしたものと高さを3分の1にしたものを比較して小さいほうを2倍にしたものがCANVAS_WIDTHで3倍にしたものをCANVAS_HEIGHTにすればよいわけです。

そこで以下の関数を作成することにしました。CANVAS_WIDTHが変化するとそれに応じてのこりも変数も最適なものに置き換わります。

ゲームをしている途中でウィンドウが変更される可能性もあります。そこで1秒ごとにGetCanvasSize関数を実行して上記変数に適切な値が入るようにしておきます。1秒の根拠ですが、負荷をあまりかけたくないのであまりに短すぎる値にするのはどうかと思い、これが適切ではないかと判断しました。

Canvasのサイズを変更すると描画されている内容が消えてしまいます。そこでCanvasのサイズを変更したあとDraw関数を呼び出しています。

ページが読み込まれたらGetCanvasSize関数を呼び出して適切な値が上記変数に代入されるようにしておきます。

描画関数の修正

描画に関しては上記の7変数をつかって描画処理をしているので問題ないはずですが、スコアや残機、ゲームオーバーの表示に関してはマジックナンバーっぽいものを使っていたので、適切なものに書き換えます。

改善したよ!と報告するともう一度紹介していただくことができました。今回はいい感じです。