見出し画像

ファイブボックス 一分間スクラッチ講座 | #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. 1回分の処理が終わるまでにかかった時間を調べる

  2. その時間をリストに入れる

  3. 合計にも足す

  4. タイマーを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の個別指導のオンラインレッスンを行っています。

ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。

いいなと思ったら応援しよう!

ファイブボックス よろしければ応援お願いします! いただいたチップはクリエイターとしての活動費に使わせていただきます!