libro
www.tuyano.com
App InventorによるAndroid開発入門

BallとImageSpriteでアクションゲームに挑戦!! (2/6)

作成:2013-07-17 08:27
更新:2013-07-17 08:27

■Canvasの初期化とBallのバウンド

ただし、実際に動かしてみると、いくつか問題があることに気がつくでしょう。それは以下の2点です。

●Canvasの縦幅調整
1つは、Canvasの大きさです。Fill parentを設定してあるのに、Canvasはなぜか縦方向には長く変形してくれません。これはどうもバグっぽい気もしますが、とりあえずスクリーンが初期化される際のイベントを使って大きさを設定しておくと良いでしょう。

ブロックエディタで「MyBlocks」から「Screen1」をクリックし、現れたブロックから「Initialize」を画面にドラッグして配置します。そして以下のような形で配置をします。
when [Screen1.Initialize]
do [set Canas1.Height to][Screen1.Height]
わかりますか? Screen1Intializeブロックを配置し、doのところに[set Canvas1.Height to]を組み込みます。そしてこのブロックの右側に[Screen1.Height]のブロックをつなげます。これでCanvas1の高さが、スクリーンの高さに設定されます。

●Ballのバウンド
もう1つの問題は、Ballが画面の端までくると勝手に止まってしまう、というものです。Ballなどのスプライトは、画面の端まできたら、それ以上進まないように自動的に停止します。これを何とかするためには、端まで来たら跳ね返るようにしておきます。

Ballには、「EdgeReached」というイベントが用意されています。これは、画面の端まで来た時に発生するイベントです。

このブロックをブロックエディタに配置してみましょう。ブロックの右端に「Edge」という小さい部品がくっついた状態で部品が配置されます。この小さい「Edge」は、どの面の端まで辿り着いたかを示すもので、以下のような値が渡されます。

「1」――画面上端
「-1」――画面の下端
「3」――画面の右端
「-3」――画面の左端

Ballを跳ね返らせるには、「Bounce」というブロックを使います。ぶつかった方向を示す値をブロックの右側に設定してやると、その反対側に跳ね返らせることができます。EdgeReachedイベントを使う場合、引数で渡されるEdgeの値をそのままBounceの引数に設定すれば、壁にあたったら反射させることができます。(Edgeのブロックは、「My Blocks」の「My Definitions」内にあります)

下に、3つのBallを動かす例を上げておきましょう。図のブロックをよく見て、EdgeReachedイベントとBounceの使い方をよく理解しておきましょう。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※下図は、動きまわる3つのBallと、ブロックエディタのブロック。

※関連コンテンツ

「App InventorによるAndroid開発入門」に戻る