3-(2) 図形を動かす!

図形をアニメーションで動かしてみます。長方形を表示する横方向の位置(X)を1コマに1ドット(1ピクセル)ずつ右方向にずらしていきます。ここで、プログラムの中で値が変化する「長方形を描画」ブロックのXの値を、「変数」というものを使って表現します。

「変数」は、書き換え可能なメモ用紙のようなものでその時々で何かの数字を書いておき、必要に応じて書き換えることができます。通常はアルファベットの文字(文字列)で名前をつけます。

まず、その「変数」をひとつ作ります。「変数」のカテゴリから「整数の変数を作る…」をクリックして、「posX」(position X)と入れて「OK」します。「posX」という名前の変数が作られます。

図3-4  変数「posX」を作成

変数「posX」を使う形にプログラムを修正していきます。

まず「長方形を描画」ブロックの「X」に接続されている数値「0」を削除して、代わりに「変数」カテゴリの中の「posX」ブロックを接続します。「X」の値をいろいろ変更したいからです。

この状態では変数「posX」に何も値が入っていませんので、「初期設定」のところで「posX」に「0」を書き込んでおくことにします。「変数」カテゴリから「posXに_をセット」ブロックを持ってきて「ゲーム初期化」ブロックの下に接続します。空白部分には数値の「0」を接続します。

さらに「アップデート50ms」の下にも「posXに_をセット」ブロックを接続し、「数値」カテゴリから「_+_」ブロックを空白部にに接続、空欄に「posX」を配置して「posX + 1」となるようにします。「posX」用紙に書かれている数字を消して、「その数字プラス1」を新たに書き込む感じです。

この部分が、フレーム(1コマ (50ミリ秒))ごとに長方形の描画位置(posX)を右方向に「1」ずつ移動させていきます。

図3-5  長方形を移動するプログラム

図3-6  長方形を移動

「My Game」ボードにアップロードして実行してみてください。長方形(正方形)が左から右に移動していけば成功です。

*図形が右端から消えてしばらくするとまた左端から現れることに気づくと思います。図形が消えてもプログラムはまだ続いていて、「posX」の値が最大値(255)を超えるとまた「0」から再開してしまうのです。普通の10進数で100の位を隠してしまうと、数値が100になったところでまた0に戻ったように見えるのと似ています。

次に長方形が画面の右端で跳ね返るようにしてみます。図形が右端に到達したら「posX + 1」を「posX – 1」にすれば良さそうです。ここではこの「+1」と「-1」を表す変数「spdX」(speed X)を用意して、最初は「spdX = 1」とし、右端に来たら「spdX = -1」に変更します。

「posX」のときと同様に「spdX」という名前で整数の変数を作ってください。初期設定のところで「spdXに1をセット」、ループの中の「posX + 1」の「1」の部分に「spdX」を接続します。とりあえずこれで実行して前と同じ動きをすることを確認しましょう。「Copy Code」ボタンでArduino IDEに貼り付け、矢印ボタンでボードに書き込みです。

図3-7  変数「spdX」を使う

それでは跳ね返る部分のプログラムを作ります。やることは、

・長方形が右端に来たら(「posX」が「画面の横幅 – 長方形の一辺」になったら)「spdX」を「-1」にする。

です。ついでに、

・長方形が左端に来たら(「posX」が「0」になったら)「spdX」を「1」にする。

も加えておきましょう。

このように「もし~なら~をする」ということをやりたい場合は、「論理」の中にある「もし_実行」ブロックを使います。「もし_実行」ブロックを「アップデート50ms」の下に接続してください。今回画面の右端と左端で「もし」が二つありますので、「もし_実行」ブロックを少し変形します。歯車のマークをクリックして左側の「そうでなくもし」を右側の「もし」の下にくっつけます。これで2種類の「もし」をキャッチできるようになりました。もう一度歯車をクリックして閉じます。

図3-8  「もし」ブロックを使う

図3-9を参考に跳ね返り部分のプログラムを完成させてください。「もし」の横には右端での跳ね返りを実施するための条件を、「そうでなくもし」の横には左端での跳ね返りを実施するための条件を記述します。「_ = _」(イコール)のブロックは「論理」に、「画面幅」のブロックは「MyGame」→「機能」にあります。「_ – _」(マイナス)のブロックは「数学」にある「_ + _」(プラス)のブロックを持ってきてドロップダウンリストから「-」を選択します。「画面幅」のところは普通に数値で「128」としても同じ意味です。

「実行」の部分で、「spdX」の値「-1」または「1」を設定します。「もし」のブロックは、その条件に合致しなければそのまま素通りです。

「MyGame」ボードにプログラムを書き込んで実行してみましょう。図形が画面の左右端でバウンドして往復動作をすれば成功です。

図3-9  跳ね返りのプログラム

インデックス
3-(3)ボタンを使う

コメント

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