ファイブボックス 一分間スクラッチ講座 | #009 1フレームの時間を調べる方法
今回は、スクラッチの繰り返し処理が、どのくらいの速さで実行されているのかを調べてみます。
スクラッチには、次のような繰返し処理があります。
ずっと
○回繰り返す
○まで繰り返す

これらのブロックの中では、入れた処理が何度も繰り返し実行されます。
このとき、1回分の処理にかかる時間を調べると、スクラッチがどのくらいの速さで動いているのかを確認できます。
今回は、1フレームにかかる時間を計測し、さらに1秒間に何回処理されているのかを計算してみます。
Youtubeショート動画、ファイブボックス一分間スクラッチ講座でもわかりやすくまとめていますので、もしよければ合わせてご参照ください!
1フレームとは?
ゲームやアニメーションでは、画面が少しずつ更新されながら動いているように見えます。
この1回分の更新のことを、ここでは1フレームと考えます。
たとえば、1フレームに約0.033秒かかっている場合、
1秒 ÷ 0.033秒 ≒ 約30回となり、1秒間に約30回処理されていることになります。
速いパソコンではもっと速くなることもありますし、重い処理をしている場合は遅くなることもあります。
1. 変数とリストを用意する
まず、計測結果を入れるためのリストを1つ作ります。
作成するリスト
デルタタイムこのリストには、1フレームごとにかかった時間を順番に入れていきます。
「デルタ」という言葉は、プログラミングでは「差」や「変化量」という意味でよく使われます。
スクラッチでは難しく考えすぎず「デルタタイム = 1回分の処理にかかった時間」と考えれば大丈夫です。
作成する変数
次に、変数を3つ作ります。
合計
平均
1秒間の処理回数それぞれの役割は、次の通りです。
合計 → デルタタイムに入れた時間の合計
平均 → 1フレームにかかった時間の平均
1秒間の処理回数 → 1秒間に何回くらい処理されているか

2. スプライトに動きをつける
次に、スプライトに動きをつけます。
今回は、ネコのスプライトに次のような処理を作ります。
旗が押されたとき
ずっと
次のコスチュームにするこれで、ネコが走っているように見えます。
ここで大事なのは、画面上でスプライトが動く処理を入れておくことです。
スクラッチでは、スプライトに見た目の変化がない場合、繰り返し処理がものすごく速く実行されることがあります。

今回は「画面が更新されるときの処理時間」を調べたいので、ネコのコスチュームを切り替えて、画面に動きが出るようにしています。
3. 時間を計測する
次に、フレームごとの時間を計測していきます。
ここでは、スクラッチのタイマーを使います。
タイマーは、時間を測るためのブロックです。
今回の考え方は、次の通りです。
変数とリストをリセットして、次の処理を100回繰り返します
1回分の処理が終わるまでにかかった時間を調べる
その時間をリストに入れる
合計にも足す
タイマーを0に戻す
計測用のスクリプト
旗が押されたときに、次の処理を行います。
旗が押されたとき
合計 を 0 にする
デルタタイム のすべてを削除する
100回繰り返す
タイマー を デルタタイム に追加する
合計 を タイマー ずつ変える
タイマーをリセットする
最初に、前回の結果が残らないように、
合計を0にする
デルタタイムの中身を全部消すという初期化をしています。
そのあと、100回繰り返しながら、1回ごとの時間をリストに記録していきます。
4. リストに時間が入る
実行すると、リスト「デルタタイム」に数字が入っていきます。
たとえば、次のような数字です。
0.032
0.034
0.032
0.035
0.033これは、それぞれのフレームにかかった時間です。
0.032秒
0.034秒
0.032秒
0.035秒という意味になります。
サンプルでは、だいたい 0.032秒〜0.035秒 くらいの数字が多く入りました。

また、変数「合計」には、100回分の時間の合計が入ります。
たとえば、合計が 3.302 になった場合は、
100回分の処理に、合計で約3.302秒かかったという意味になります。
5. 平均を計算する
次に、スペースキーを押したときに、平均を計算します。
今回のサンプルでは100回計測しているので、平均は次の式で求められます。
平均 = 合計 ÷ 100スクラッチでは、次のようなブロックを作ります。
スペースキーが押されたとき
平均 を 合計 / 100 にする
たとえば、合計が 3.302 の場合、
3.302 ÷ 100 = 0.03302となります。
つまり、1フレームに平均で約 0.03302秒 かかっていることが分かります。
6. 1秒間の処理回数を計算する
最後に、1秒間に何回くらい処理されているのかを計算します。
計算式は次の通りです。
1秒間の処理回数 = 1 ÷ 平均スクラッチでは、次のようにします。
1秒間の処理回数 を 1 / 平均 にするたとえば、平均が 0.03302 の場合、
1 ÷ 0.03302 ≒ 30.28となります。
つまりこの場合は、1秒間に約30回処理されている、ということになります。

7. 実行結果の見方
サンプルでは、次のような結果になりました。
平均:0.03302
1秒間の処理回数:約30.28回これは、1フレームの平均時間が約0.033秒で、1秒間に約30回処理されているという意味です。
ただし、この結果はいつも同じになるわけではありません。
パソコンの性能や、そのときに動いているアプリ、スクラッチの処理内容によって変わります。
同じパソコンでも、何回か実行すると少し違う数字になることがあります。
今回のポイント
今回は、スクラッチで1フレームにかかる時間を調べる方法を紹介しました。
ポイントは次の3つです。
1. タイマーを使うと、処理にかかった時間を調べられる
2. リストを使うと、フレームごとの時間を記録できる
3. 平均を使うと、1秒間の処理回数を計算できる今回使った考え方は、ゲーム制作でもよく使われます。
特に、ゲームの動きを安定させたいときには、1フレームにどのくらい時間がかかったかを考えることが大切になります。
スクラッチの繰り返し処理は、パソコンの性能や処理内容によって速さが変わります。
今回のようにタイマーとリストを使うことで、自分のパソコンでは1フレームにどのくらい時間がかかっているのかを調べることができます。
サンプルでは、1フレームの平均時間が約0.033秒、1秒間の処理回数は約30回になりました。
皆さんのパソコンでは、これより速い結果になりましたか?
ぜひ試してみてください。
サンプル作品
今回のサンプルはこちらで共有しています。
https://scratch.mit.edu/projects/1084239761
ファイブボックスでは、スクラッチやUnityの個別指導のオンラインレッスンを行っています。
いいなと思ったら応援しよう!
よろしければ応援お願いします! いただいたチップはクリエイターとしての活動費に使わせていただきます!