
このブログテーマでは、スクラッチの初心者から上級者まで、ちょっとお役に立つ情報を不定期で紹介していきます。
スクラッチの繰返し処理「ずっと繰り返す」「〇回繰り返す」「~まで繰り返す」の繰返し処理の中では、ブロック内で指定された処理が繰り返されます。繰返し処理内の1つ1つの処理は「フレーム」という単位であらわされます。
速いパソコンの場合、1フレームは0.03秒程度、つまり1秒間に30回から35回程度の処理が行われます。
Unityではデバイス間の処理速度を変更する方法がいくつかありますが、スクラッチには内容です。
1分間 Unity講座 デバイス間の処理速度を統一する3つの方法
今回は使用しているパソコンで、1フレームにどの程度の時間がかかるのか計測する方法をご紹介します。
下の動画は不定期配信の「ファイブボックス 一分間スクラッチ講座」です。ご興味のある方は併せてご参照ください。
1、変数とリストの用意
事前にサンプルの作品をご紹介します。
まずは、リストを1つ用意します。
- デルタタイム – フレームごとの時間を格納するリスト
※ デルタは2 つの値や状態の差分を表す用語でよく使用されます。プログラミングでは毎フレームの時間を「DeltaTime」などと使用するケースが多いようです。
さらに変数を3つ用意します。
- 合計 – リスト「デルタタイム」の全ての値の合計を管理する変数
- 平均 – リスト「デルタタイム」の平均値(合計 / デルタタイムの長さ)
- 1秒間の処理回数 – 1秒間に繰り返されるフレーム数(1 / 平均)

スプライトの動き
スクラッチではスプライトの描写処理がない場合、繰返し処理は一瞬で多くの処理を行ってしまいます。リストの「画面を再描画せずに実行」の処理になります。
そこで事前にスプライトに何らかの動きを施しておきます。
サンプルでは、「ずっとブロック」の内部処理で「次のコスチュームにする」の処理を作成しています。

時間の計測と集計
フレームごとの時間をリストに格納するには「タイマー」を活用します。
- 変数:合計を0でリセット
- リスト:デルタタイムの値をすべて削除して、リストを空っぽにする
- 以下の処理を繰り返し実行(サンプルでは100回、数が多いほど正確な値に近づきます)
- タイマーの値をリスト:デルタタイムに追加
- タイマーの値を変数:合計に加算
- タイマーをリセット(0に戻す)

下の図のように、リストには100個の時間が格納されます。サンプルでは0.032~0.035秒の間の数字が多いようです。
合計には、100回の処理の合計値が格納されます。

続いて「スペースキー」が押されたときに2つの変数値を計算する処理を行います。
- 変数:平均 を 変数:合計 / 100 にする
- 変数:1秒間の処理回数 を 1/変数:平均 にする

平均は合計の値を処理回数で割った値になります。今回は100回の処理を行っているので、合計/100になります。
1秒間の処理回数は 1秒 を平均のフレーム時間で割れば算出することができます。
サンプルでは、1フレームの平均時間が 0.03302秒、1秒間の処理回数は 30.284576回になります。これはパソコンによっても違いますし、同じパソコンでもその都度、動作環境によっても変わってきます。

皆さんのパソコンは、これよりも速い結果、出ましたか?
サンプルはこちらで共有しています。ttps://scratch.mit.edu/projects/1084239761
ファイブボックスでは、スクラッチやUnityの個別指導のオンラインレッスンを行っています。