得点
ブロックが当たったら消す処理
キャラがぶつかったらブロックを消すようにする。
物理での衝突判定は、physicsWorldにContactListenerをセットし、ContactListenerに色々実装することで行う。
ContactListenerでは、物体同士が接触した時に呼び出されるbeginContactメソッドと、接触した物体同士が離れる時に呼び出されるendContactメソッドがある。
今回はボールがブロックがぶつかった後にボールが跳ね返って、ブロックが消えるようにしたい。
beginContactメソッドでブロックを消すと、ボールが跳ね返らず貫通するような挙動になってしまうので、endContactメソッド内でブロックを消す処理を記述する。
ContactListenerでの衝突処理では、衝突した物体の、物理世界での実体(Body)にはアクセス出来るので、衝突時にブロックのあたり判定を消すことは簡単。
しかし、画面表示での実体(Entity)にはアクセスできないので、ブロックの画面表示を消すことは、ちょっとややこしい処理が必要。
ブロックの画面表示を消すには、ContactListenerの衝突処理の際に、衝突する物体のBodyから画面表示のEntityにアクセスできるようにする必要がある。
BodyにはsetUserDataメソッドで任意のオブジェクトをセットすることが出来る。これを利用し、Bodyに、画面に表示される物体への参照を持たせる。
BodyDataクラスを作成。
持っているデータはブロックの種類を表す文字列データと、画面上での物体への参照であるEntity。
ブロックのBodyの作成時にBodyDataデータをsetUserDataメソッドで持たせる。
ContactListenerの処理で、getUserDataメソッドで物体の画面上での実体にアクセスし、表示をオフにすることで、衝突時にブロックを消す処理を実装する。
得点の表示
HUD
HUD(Head-up Display)を利用する。これは、画面の一番手前に常に表示されるシーン。
普通のシーンのように、newで作成して、スプライトとか文字とかをattachChildすればよい。
けれど、画面に表示させるには、通常のシーンとは違って、カメラにsetHUDというメソッドを使う必要があるので注意
文字の表示
画面に表示する文字はTextというクラス
Textを使うにはリソースとしてフォントを用意する必要がある。
ResourceManegerにフォントを用意する部分を追加
FontFactory.createFromAssetメソッドで与えるColorの引数のタイプは、andengineのColorクラスではなく、
androidのクラスなのでインポートに注意
import org.andengine.util.color.Color
ではなく
import android.graphics.Color
あとは、利用するフォントと表示する文字列を指定してTextをnewしてHUDにattachすればよい。
得点を更新するには、TextのsetTextメソッドを利用する。
得点の更新はブロックが消えたときにすればよい。
最終更新:2013年08月04日 00:31