完成した作品はスクラッチ上に共有しています。コードの中を見たり、リミックスしてみてください。
検証したいこと
ボタンを連打したとき、思ったような動きをしません
そうなのですね。本当はどのように動いてほしいのですか?
ボタンを高速で連打したらボタンを押した回数だけ、プログラムが動いてほしいです。
それでは、下のようなことを検証していきましょう。
調べる方法
ボタン連打の動作を検証するために、次のようなコードを用意しました。
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回しか実行されませんでした。
ターボモードは、描画に関連する処理を高速化します。
計算処理自体を高速化することはできないので、
このケースは、重たい処理のままとなり、
ターボモードにしてもしなくても結果は変わりませんでした。
まとめ
ボタンの連打は、プログラムの処理の重さ、特に画面の描画処理が多いかどうか、ということと深い関係があるんですね。
そうですね!ボタンを連打したときに意図したとおりに動かないときは、ターボモードを使うと解決するかもしれません。ただし、無駄な画面描画処理をしていないかなど、プログラムを確認する必要はあります。
コメント