p5.jsで動くゲーム風読み込み画面作ってみた

この記事は GMOアドマーケティング Advent Calendar 2021 24日目の記事です。

はじめに

こんにちは、GMOアドマーケティングのR.Yです。
今回はp5.jsを使用して読み込みの長い画面でも退屈しないようなゲーム風読み込み画面を作成しましたのでその紹介です。

p5.jsとは

p5.jsとはJavaをベースに作られた「Processing」と言う電子アートのプログラミング言語をJavaScriptで使用できるようにしたライブラリになります。p5.jsを使うことでブラウザ上で表示できるアニメーションを作成することができます。

サンプル

文字だけではわかりづらいと思うのでp5.jsによるアニメーションのサンプルを用意しました。以下が実際の表示とプログラムになります。※以降の動画は全て当社が作成したものになります。
sample.html
sample.js
p5.jsにはsetup()という最初に一回だけ呼ばれる関数とdraw()という1フレーム毎に呼ばれる関数があります。基本的にsetup関数では初期設定を行い、draw関数では背景の設定や図形の描画などを行います。

例えば矩形の描画はrect関数で行います。このサンプルではrect関数の引数である「表示するx座標」の値にカウンタの値を指定しているので、draw関数が呼ばれるたびに(1フレーム毎に)カウンタが増えていき右に動いているように見えると言うわけです。

ゲーム風の読み込み画面

まず画面ですが、
1, 読み込んでいることが一目でわかるようにする
2, クリック時にアクションを起こす
と言う要件で作ってみました。以下が実際の表示とプログラムになります。


clickMark.html
clickMarkScript.js

プログラム解説

1, 読み込んでいることが一目でわかるようにする

この要件に関しては「NOWLOADING」の文字を表示させることにしました。また、ゲームの読み込み画面を参考に各文字を順番にずらして表示させて読み込んでいることをわかりやすくしました。
該当するプログラムは↑になります。
loading関数の中では、表示する文字の設定後文字の表示を行なっています。文字表示部分ではloadCountの値によってNOWLOADINGのどの文字をずらして表示させるかを決めており、loadCountの値はdraw関数の中で10フレームごとに+1されます。なので10フレームごとにずれる文字が切り替わるようになっています。

2, クリック時にアクションを起こす

この要件に関してはクリック時に一定時間で消える波紋のようなものを表示させることにしました。これで長い読み込み時間でも飽きずに待てますね!
該当するプログラムは↑になります。
全体を軽く説明すると、画面クリック時にMarkクラスを配列に入れていき配列に入っているMarkをdraw関数で全て表示するという流れです。

まずクリック時の動作はmousePressed関数で定義できます。この関数ではクリックされた場所(mouseX, mouseY)を引数にMarkクラスを作成しmarks配列に格納していきます。Markクラスは表示位置、大きさ、削除までのカウント、フェードアウトのレベルなどの要素を持っています。

次にdisplayMark関数でmarks配列に入っているMarkをその要素の値に合わせて順番に表示します。この時に全てのMarkでaddDeleteCount関数を呼び出し、削除までのカウントを進めたり、円の大きさやフェードアウトレベルの変更を行なっています。これをdraw関数から呼び出すことで波紋のようなものの描画が完成します。

使用例

最後に

今回はp5.jsを使用したゲーム風読み込み画面の紹介でした。

作ってみた感想ですが環境がブラウザで整うので始めやすいのと、
アニメーションなので完成していく過程がわかりやすくとても楽しかったです!

ブラウザでのアニメーション作成に興味がある方は是非お試しください!

明日は星野さんによる「クラウドネイティブな設計の1目〜コンテナ・デザインパターン〜」に関しての記事です。
引き続き、GMOアドマーケティング Advent Calendar 2021 をお楽しみください!

■エンジニア採用ページ ~福利厚生や各種制度のご案内はこちら~

https://note.gmo-ap.jp/n/n02cbeb6edb0d

■noteページ ~ブログや採用、イベント情報を公開中!~
https://note.gmo-ap.jp/