1秒まつ

今回は、「1秒まつ」・「タイマー」・「音」ブロックを使わずに
どうやったら1秒はかれるか?を[ため]してみたいと思います。

まずはどうやったらはかれるか、考えてみて下さい
予想ができたら、実際[じっさい][ため]してみましょう。

 
↓↓[つづ]きを読む↓↓をご[らん]ください 
 

Scratchで「1秒まつ」を使わずに1秒を計るには?



変数[へんすう]を使ってはかってみる?

変数[へんすう]を使って、1秒間に何回ループするかをはかってみるのはどうでしょうか?
ループ回数ではかってみる
 

じっさいに[ため]してみましょう。
タイマーで1秒をみながら、何回ループするかをはかってみます。
すると、毎回ループ回数がちがいました。

これは、コンピュータの[いそが]しさ([ほか]のアプリを使っていたりすると[いそが]しい)によって
ループできる回数がちがってしまうからです。

また、[ほか]のパソコンで実行したとき
そのパソコンのスピードによっても、ループ回数はちがってしまいます。

これでは1秒を計れそうにもありませんね。

ネコのあるくスピードをはかってみる?

では、ネコがあるくスピードを計ってみるのはどうでしょう?
ネコが「1歩進む」をくり返すと、何歩目で1秒間に到達[とうたつ]するか[ため]してみましょう。

30fps
 

30回くり返すと、およそ1秒を計ることができました。
環境[かんきょう]によって多少の誤差[ごさ]がでます)
さっきの変数[へんすう]で計る方法[ほうほう]とはちがい、この方法[ほうほう]なら何秒はかっても
誤差[ごさ]は0.01~0.05秒くらいでした。

これは、Scratchが30FPSというきまりで動いているからです。
FPSとは(Frame per second)の[りゃく]
1秒間に何枚[なんまい]画像[がぞう]をつかって映像[えいぞう]を作っているか?を表します。

30FPSだと、1秒間に30[まい]のパラパラマンガをつかって
アニメーションしていると考えるとわかりやすいです。

[わたし]たちがみているテレビなどは30FPSでできています。
アニメは秒間24コマなので24FPSですね。
プチコンは60FPSです。

ブロックを30[]つなげると?

「30回くり返す」ではなく、動きブロックを30[]つなげてみると同じ結果[けっか]になるでしょうか?

くり返しブロックの<ruby><rb>機能</rb><rp>[</rp><rt>きのう</rt><rp>]</rp></ruby>

30[]つなげて実行してみると、一瞬[いっしゅん]で終わってしまうことがわかると思います。
これは、コンピュータが「再描画[さいびょうが]せずに」ブロックをいっぺんに処理[しょり]してしまうからです。

つまり「くり返しブロック」をつかわないと
コンピュータは描画[びょうが]のタイミングを計れないのです。 

このへんのムズカシイ話は
Scratch の舞台裏[ぶたいうら]
この記事が参考[さんこう]になるかと思います。

垂直[すいちょく]同期のはなしとかが入ってます。

プチコンなどをやっている人は垂直[すいちょく]同期しないとゲームにならないので
知っている方も多いと思います。
VSYNC命令[めいれい]垂直[すいちょく]同期にあたります。

VSYNCの[くわ]しい説明[せつめい]はこちら参考[さんこう]になります。

ちなみに、クローンなどを沢山[たくさん]使うと、動きがゆっくりになることがありますね

これは、30秒に1回のかきかえタイミングが来たけど、
コンピュータの処理[しょり]が間に合わなくて、
でも絵がいるからとりあえず途中[とちゅう]までできたやつを[][]けておく!
みたいなイメージです。

これが[ぞく]にいう「処理[しょり]落ち」ですね。


まとめ

描画[びょうが]するブロック(動き・見た目・ペン)がないと
くりかえしの中に入っていてもスグおわっちゃいます。
<ruby><rb>描画</rb><rp>[</rp><rt>びょうが</rt><rp>]</rp></ruby>のはなし

「絵がかわると」って言ってますが「0歩動かす」でも
描画[びょうが]ブロックなので、30FPSで描画[びょうが]してくれます。



さいごに、「1秒まつ」を使わずに時間が計れる
線香[せんこう]時計[とけい]」を作りました。

WS0412
はたをクリックすると、線香[せんこう]がだんだん短くなっていき
1分で[][]きてしまうプロジェクトです。

時計[とけい]がない時代には、線香[せんこう]で時間を計っていたそうですよ。