【検証】ボタン連打

button-mashing テクニック集
サトシ先生
サトシ先生

完成した作品はスクラッチ上に共有しています。コードの中を見たり、リミックスしてみてください。

検証したいこと

シロクマ生徒
シロクマ生徒

ボタンを連打したとき、思ったような動きをしません

サトシ先生
サトシ先生

そうなのですね。本当はどのように動いてほしいのですか?

シロクマ生徒
シロクマ生徒

ボタンを高速で連打したらボタンを押した回数だけ、プログラムが動いてほしいです。

それでは、下のようなことを検証していきましょう。

検証したいこと

ボタンを高速で連打したときに、プログラムはどのように実行されるのか

調べる方法

ボタン連打の動作を検証するために、次のようなコードを用意しました。

1.重たい処理(時間のかかる処理)をするコード

2.キー入力を受け付けるコード①(ブロック内で「重たい処理」を実行する)

3.キー入力を受け付けるコード②(メッセージを送って、送った先で「重たい処理」を実行する)

次に、それぞれのコードを紹介します。

1.重たい処理(時間のかかる処理)をするコード

重たい処理が実行されると、変数が1増えます。
処理が終わるときに、変数が1増えます。

サトシ先生
サトシ先生

プログラムがきちんと実行されていれば、1度ボタンを押すと変数の値が2増えるということです

重たい処理は、スプライトの「動き」ブロックがあるものと、「動き」ブロックがないものを用意しました。

重たい処理_動き
重たい処理_計算

2.キー入力を受け付けるコード①(ブロック内で「重たい処理」を実行する)

キー入力を受け付けるコード①

3.キー入力を受け付けるコード②(メッセージを送って、送った先で「重たい処理」を実行する)

キー入力を受け付けるコード②
サトシ先生
サトシ先生

メッセージを使用するときにどうなるかも調べてみましょう!

検証結果

シロクマ生徒
シロクマ生徒

それでは、10回ずつボタンを連打していきますね!

①ブロック内で「重たい処理」を実行する

「動き」ブロックがある場合

変数の値は「2」です。
つまり、プログラムは1回しか実行されませんでした。

「動き」ブロックがない場合

変数の値は「2」です。
つまり、プログラムは1回しか実行されませんでした。

②メッセージを送って、送った先で「重たい処理」を実行する

「動き」ブロックがある場合

変数の値は「11」です。

つまり、重たい処理を実行する前の「1の加算」処理は動作していますが、
実際に重たい処理を最後まで実行したのは、1回だけということです。

「動き」ブロックがない場合

変数の値は「11」です。

つまり、重たい処理を実行する前の「1の加算」処理は動作していますが、
実際に重たい処理を最後まで実行したのは、1回だけということです。

③追加で確認:ターボモードを使って、「重たい処理」を「軽い処理」に変える

サトシ先生
サトシ先生

ターボモードを使うと、「動き」ブロックの描画を省略できます。その結果、「描画」にかかる処理を高速に実行することができます。

「動き」ブロックがある場合(「重たい処理」⇒「軽い処理」)

変数の値は「20」です。
つまり、10回押したボタンに対して、10回処理が実行されたことになります。

「動き」ブロックを使うと画面の描画処理が実行されます。

この処理は重たい処理なのですが、
ターボモードを使うことで高速に処理され、
軽い処理として、ボタン連打に対応できるようになりました。

「動き」ブロックがない場合(「重たい処理」のまま)

変数の値は「2」です。
つまり、プログラムは1回しか実行されませんでした。

ターボモードは、描画に関連する処理を高速化します。

計算処理自体を高速化することはできないので、
このケースは、重たい処理のままとなり、
ターボモードにしてもしなくても結果は変わりませんでした。

まとめ

シロクマ生徒
シロクマ生徒

ボタンの連打は、プログラムの処理の重さ、特に画面の描画処理が多いかどうか、ということと深い関係があるんですね。

サトシ先生
サトシ先生

そうですね!ボタンを連打したときに意図したとおりに動かないときは、ターボモードを使うと解決するかもしれません。ただし、無駄な画面描画処理をしていないかなど、プログラムを確認する必要はあります。

コメント