このブログテーマでは、スクラッチの初心者から上級者まで、ちょっとお役に立つ情報を不定期で紹介していきます。
スクラッチの繰返し処理「ずっと繰り返す」「〇回繰り返す」「~まで繰り返す」の繰返し処理の中では、ブロック内で指定された処理が繰り返されます。繰返し処理内の1つ1つの処理は「フレーム」という単位であらわされます。
速いパソコンの場合、1フレームは0.03秒程度、つまり1秒間に30回から35回程度の処理が行われます。
今回は使用しているパソコンで、1フレームにどの程度の時間がかかるのか計測する方法をご紹介します。
下の動画は不定期配信の「ファイブボックス 一分間スクラッチ講座」です。ご興味のある方は併せてご参照ください。
1、変数とリストの用意
事前にサンプルの作品をご紹介します。
まずは、リストを1つ用意します。
デルタタイム - フレームごとの時間を格納するリスト
※ デルタは2 つの値や状態の差分を表す用語でよく使用されます。プログラミングでは毎フレームの時間を「DeltaTime」などと使用するケースが多いようです。
さらに変数を3つ用意します。
合計 - リスト「デルタタイム」の全ての値の合計を管理する変数
平均 - リスト「デルタタイム」の平均値(合計 / デルタタイムの長さ)
1秒間の処理回数 - 1秒間に繰り返されるフレーム数(1 / 平均)
2、スプライトの動き
スクラッチではスプライトの描写処理がない場合、繰返し処理は一瞬で多くの処理を行ってしまいます。リストの「画面を再描画せずに実行」の処理になります。
そこで事前にスプライトに何らかの動きを施しておきます。
サンプルでは、「ずっとブロック」の内部処理で「次のコスチュームにする」の処理を作成しています。
3、時間の計測と集計
フレームごとの時間をリストに格納するには「タイマー」を活用します。
変数:合計を0でリセット
リスト:デルタタイムの値をすべて削除して、リストを空っぽにする
以下の処理を繰り返し実行(サンプルでは100回、数が多いほど正確な値に近づきます)
タイマーの値をリスト:デルタタイムに追加
タイマーの値を変数:合計に加算
タイマーをリセット(0に戻す)
下の図のように、リストには100個の時間が格納されます。サンプルでは0.032~0.035秒の間の数字が多いようです。
合計には、100回の処理の合計値が格納されます。
続いて「スペースキー」が押されたときに2つの変数値を計算する処理を行います。
変数:平均 を 変数:合計 / 100 にする
変数:1秒間の処理回数 を 1/変数:平均 にする
平均は合計の値を処理回数で割った値になります。今回は100回の処理を行っているので、合計/100になります。
1秒間の処理回数は 1秒 を平均のフレーム時間で割れば算出することができます。
サンプルでは、1フレームの平均時間が 0.03302秒、1秒間の処理回数は 30.284576回になります。これはパソコンによっても違いますし、同じパソコンでもその都度、動作環境によっても変わってきます。
皆さんのパソコンは、これよりも速い結果、出ましたか?
サンプルはこちらで共有しています。
ファイブボックスでは、スクラッチやUnityの個別指導のオンラインレッスンを行っています。
コメント