スポンサーリンク
Scratch

Scratchで性能が良いプログラムを作る(part1)

Scratch

ゲームを作ったときに、スプライトがカクカク動いたりして「動きがわるいなぁ」って思う事はありませんか?
プログラムの作り方次第で、動きに差がでてきます。
今回は、矢印キーでスプライトを動かすプログラムを3パターン作ってスムーズさの違いを比較してみます。

スポンサーリンク

比較方法

プログラムの作り方で、スプライトの動きがどう違うのかを確かめてみようと思います。
3つのスプライトを縦に並べて、→で右に移動するプログラムを作っています。

今回は大きく2つのことを確かめてみます。
1.イベントの「〇〇キーが押されたとき」部品と「ずっと」でキーが押されるのを待ち続ける場合の違い
2.「〇歩動かす」と「X座標を〇ずつ変える」の違い

それぞれ違う部品を使って移動するプログラムになっています。

1つ目のスプライトは

「ずっと」部品を使って、→が押されるのをループして待ち続けます。

2つ目のスプライトは
「→が押されたとき」のイベントを使ってスプライトを動かします。

3つ目のスプライトは
「〇歩動かす」を使って移動させています。
1つ目のスプライトと同じ仕組みで動かしますが、1つ目は「X座標を〇ずつ変える」になっています。

パターンの組み合わせは4種類ありますが、結果の比較ができる3パターンを説明しています。

結果予想(おまけ)

実験する前に、どの処理が一番早いか想像してみました。
これまでの経験と勘ですけど・・・

おそらく、「ずっと」を使う処理は、絶えずプログラムが動き続けるので負荷が大きくて遅い予感。
ただ、「→が押されたとき」はイベントをキャッチするために初動が遅れる気もします。
プログラムが大きくなるほど「ずっと」が不利になる気がします。
今回は小さいプログラムなので、どっちもどっちかなと予想。

「〇歩動かす」と「X座標を〇ずつ変える」は同じことをやってるので差はないと予想。

プログラム

スプライトごとに、どんなプログラムを作ったのか紹介します。

スプライト1

スタートが押されたら、メッセージを2つ飛ばしています。
1つ目は→キーが押されたときの判定をするプログラム。
2つ目は←キーが押されたときのプログラム。

どちらも「ずっと」部品でキーが押されるのをループして待ち続けます。

→キーが押されたら、
スプライトを90度の方向に向けて、
X座標を10動かします。

←キーが押されたときも同じ仕組みです。

このプログラムの特徴は、「ずっと」を使っているので、「もし右向き矢印キーが押されたなら」の判定を繰り返しています。
なんの操作をしていなくても、プログラムが動き続けています。

スプライト2

右向き矢印が押されたときと、左向き矢印が押されたときのプログラムを作っています。

「キーが押されたとき」のイベント部品を使っているところがポイントです。
キーが押されるたびに反応する部品なので、スプライト1の様に「ずっと」を使ってキーが押されるのを待つプログラムを書く必要がありません。
プログラムが単純になるので、処理が早くなるのを期待できます。

スプライト3

プログラムの仕組みはスプライト1と同じです。
違うところは、「10歩動かす」の部分です。

「X座標を10ずつ変える」と「10歩動かす」で実施の動きが違うのかを見てみます。

結果

ステージの左側に並ばせて、→矢印を押すと一斉に右に動き始めます。
動くスピードに違いがあるのか見てみましょう。

スタート

スプライト1と3は同じスピードで動きました。
スプライト2が遅れました。
静止画ではわかりませんが、スプライト2はスタートがかなり出遅れや動きをしました。

「〇〇キーが押されたとき」のイベント部品を使うよりも、「ずっと」を使ってキーが押される判定をし続ける方が動きがスムーズだという事がわかりました。

プログラムは複雑になりますが、ゲームなど動きの反応をよくするにはスプライト1の方法でプログラムを作るのがよさそうです。

コメント

タイトルとURLをコピーしました