ゲームを作ったときに、スプライトがカクカク動いたりして「動きがわるいなぁ」って思う事はありませんか?
プログラムの作り方次第で、動きに差がでてきます。
今回は、矢印キーでスプライトを動かすプログラムを3パターン作ってスムーズさの違いを比較してみます。
比較方法
プログラムの作り方で、スプライトの動きがどう違うのかを確かめてみようと思います。
3つのスプライトを縦に並べて、→で右に移動するプログラムを作っています。
今回は大きく2つのことを確かめてみます。
1.イベントの「〇〇キーが押されたとき」部品と「ずっと」でキーが押されるのを待ち続ける場合の違い
2.「〇歩動かす」と「X座標を〇ずつ変える」の違い
それぞれ違う部品を使って移動するプログラムになっています。
1つ目のスプライトは
「ずっと」部品を使って、→が押されるのをループして待ち続けます。
2つ目のスプライトは
「→が押されたとき」のイベントを使ってスプライトを動かします。
3つ目のスプライトは
「〇歩動かす」を使って移動させています。
1つ目のスプライトと同じ仕組みで動かしますが、1つ目は「X座標を〇ずつ変える」になっています。
結果予想(おまけ)
実験する前に、どの処理が一番早いか想像してみました。
これまでの経験と勘ですけど・・・
おそらく、「ずっと」を使う処理は、絶えずプログラムが動き続けるので負荷が大きくて遅い予感。
ただ、「→が押されたとき」はイベントをキャッチするために初動が遅れる気もします。
プログラムが大きくなるほど「ずっと」が不利になる気がします。
今回は小さいプログラムなので、どっちもどっちかなと予想。
「〇歩動かす」と「X座標を〇ずつ変える」は同じことをやってるので差はないと予想。
プログラム
スプライトごとに、どんなプログラムを作ったのか紹介します。
スプライト1
スタートが押されたら、メッセージを2つ飛ばしています。
1つ目は→キーが押されたときの判定をするプログラム。
2つ目は←キーが押されたときのプログラム。
どちらも「ずっと」部品でキーが押されるのをループして待ち続けます。
→キーが押されたら、
スプライトを90度の方向に向けて、
X座標を10動かします。
←キーが押されたときも同じ仕組みです。
このプログラムの特徴は、「ずっと」を使っているので、「もし右向き矢印キーが押されたなら」の判定を繰り返しています。
なんの操作をしていなくても、プログラムが動き続けています。
スプライト2
右向き矢印が押されたときと、左向き矢印が押されたときのプログラムを作っています。
「キーが押されたとき」のイベント部品を使っているところがポイントです。
キーが押されるたびに反応する部品なので、スプライト1の様に「ずっと」を使ってキーが押されるのを待つプログラムを書く必要がありません。
プログラムが単純になるので、処理が早くなるのを期待できます。
スプライト3
プログラムの仕組みはスプライト1と同じです。
違うところは、「10歩動かす」の部分です。
「X座標を10ずつ変える」と「10歩動かす」で実施の動きが違うのかを見てみます。
結果
ステージの左側に並ばせて、→矢印を押すと一斉に右に動き始めます。
動くスピードに違いがあるのか見てみましょう。
スタート
スプライト1と3は同じスピードで動きました。
スプライト2が遅れました。
静止画ではわかりませんが、スプライト2はスタートがかなり出遅れや動きをしました。
「〇〇キーが押されたとき」のイベント部品を使うよりも、「ずっと」を使ってキーが押される判定をし続ける方が動きがスムーズだという事がわかりました。
プログラムは複雑になりますが、ゲームなど動きの反応をよくするにはスプライト1の方法でプログラムを作るのがよさそうです。
コメント