2015年08月22日

ブロックを組立てていくビジュアル・プログラミング言語「App Inventor 2」を使ってみる(17)


今回は3つのボールが別々の動作する中で、前回と同様にキャンバス(Canvas)の端で壁に当たるようにバウンドするテストアプリです。



テストアプリを起動するとUIはこちらになっています。2つのボールが交差した時は色の交換をします。


マウスによるドラッグで位置を変更する事にも対応しています。



実際の様子はこちらの動画で確認できます。




これを実現している「Blocks」はこちらこちらです。





今回は「ImageSprite」ではなく「Ball」を使っています。「ImageSprite」では表示対象がないので画像を指定しましたが、「Ball」では(色・サイズ指定する必要がありますが)円に決まっています。「Dragged」や「EdgeReached」などのライブラリーは同じ動きをしますから、「上下」・「左右」の移動に関しては前回と同様になっています。

中心課題はボールが重なった(相互に触れた)時の動作で、「CollidedWith」と「NolongerCollidingWith」を使います(こちらを参照)。


2つのボールが重なった時色の交換をしていますが、複数の「CollidedWith」処理が全く同時に動いている訳ではなく、処理の順番によって誤った結果になります。他のボウルでの色交換の処理が終わるまで残しておき、後の順番になっている処理で保存してある色を使うようにしています。

また、「CollidedWith」のイヴェントは重なっていると常に一定のインターバルで発生するので、重なった最初のイヴェントを"Connection"フラッグで区別しています。重なりが終了した事は「NolongerCollidingWith」のイヴェントで知る事ができます。


尚、今回のテストアプリには3つのボールが(直接・間接問わず)重なった時の処理は入っていません。従って全てのボールが同じ色になる事があります(上掲の動画でもそのようになっています・・・)。


 
この記事へのコメント
コメントを書く
コチラをクリックしてください

この記事へのトラックバック