top of page

一分間スクラッチ講座 1フレームの時間を計測する方法

このブログテーマでは、スクラッチの初心者から上級者まで、ちょっとお役に立つ情報を不定期で紹介していきます。


スクラッチの繰返し処理「ずっと繰り返す」「〇回繰り返す」「~まで繰り返す」の繰返し処理の中では、ブロック内で指定された処理が繰り返されます。繰返し処理内の1つ1つの処理は「フレーム」という単位であらわされます。

速いパソコンの場合、1フレームは0.03秒程度、つまり1秒間に30回から35回程度の処理が行われます。

今回は使用しているパソコンで、1フレームにどの程度の時間がかかるのか計測する方法をご紹介します。


下の動画は不定期配信の「ファイブボックス 一分間スクラッチ講座」です。ご興味のある方は併せてご参照ください。



1、変数とリストの用意


事前にサンプルの作品をご紹介します。




まずは、リストを1つ用意します。

  • デルタタイム - フレームごとの時間を格納するリスト

※ デルタは2 つの値や状態の差分を表す用語でよく使用されます。プログラミングでは毎フレームの時間を「DeltaTime」などと使用するケースが多いようです。


さらに変数を3つ用意します。

  • 合計 - リスト「デルタタイム」の全ての値の合計を管理する変数

  • 平均 - リスト「デルタタイム」の平均値(合計 / デルタタイムの長さ)

  • 1秒間の処理回数 - 1秒間に繰り返されるフレーム数(1 / 平均)

変数とリストを用意

2、スプライトの動き


スクラッチではスプライトの描写処理がない場合、繰返し処理は一瞬で多くの処理を行ってしまいます。リストの「画面を再描画せずに実行」の処理になります。

そこで事前にスプライトに何らかの動きを施しておきます。

サンプルでは、「ずっとブロック」の内部処理で「次のコスチュームにする」の処理を作成しています。

スプライトに負荷をかける処理

3、時間の計測と集計


フレームごとの時間をリストに格納するには「タイマー」を活用します。


  • 変数:合計を0でリセット

  • リスト:デルタタイムの値をすべて削除して、リストを空っぽにする

  • 以下の処理を繰り返し実行(サンプルでは100回、数が多いほど正確な値に近づきます)

    • タイマーの値をリスト:デルタタイムに追加

    • タイマーの値を変数:合計に加算

    • タイマーをリセット(0に戻す)


Frameごとの時間をリストに格納するスクリプト

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

合計には、100回の処理の合計値が格納されます。

結果をリストに格納する動き

続いて「スペースキー」が押されたときに2つの変数値を計算する処理を行います。

  • 変数:平均 を 変数:合計 / 100 にする

  • 変数:1秒間の処理回数 を 1/変数:平均 にする


フレームの集計をするスクリプト

平均は合計の値を処理回数で割った値になります。今回は100回の処理を行っているので、合計/100になります。

1秒間の処理回数は 1秒 を平均のフレーム時間で割れば算出することができます。


サンプルでは、1フレームの平均時間が 0.03302秒、1秒間の処理回数は 30.284576回になります。これはパソコンによっても違いますし、同じパソコンでもその都度、動作環境によっても変わってきます。


毎フレームの集計値

皆さんのパソコンは、これよりも速い結果、出ましたか?

サンプルはこちらで共有しています。



 

ファイブボックスでは、スクラッチやUnityの個別指導のオンラインレッスンを行っています。

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

コメント


bottom of page