得点

得点

ブロックが当たったら消す処理

キャラがぶつかったらブロックを消すようにする。
物理での衝突判定は、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