今日のlibGDX目次
http://snoopopo.hatenablog.com/entry/2015/04/27/220545
今日のテーマ:E. 開発記 2 ターゲット(的)
今回はゲームのゴール条件である的を作っていきます.
とりあえず作るソース
的クラスを作っていきます.これも的の情報を保持したjavabeansなクラスをとりあえず作る.
・Target.java
public class Target { private Image image = null; private int x = 2; private int y = 2; public Target(Image image){ this.image = image; } public Image getImage() { return image; } public void setImage(Image image) { this.image = image; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } }
的を表示する
・MainLisner.java
@Override public void create() { stage = new Stage(); boll = new Boll(new Image(new Texture("img/boll.gif"))); target = new Target(new Image(new Texture("img/target.png"))); stage.addActor(target.getImage()); stage.addActor(boll.getImage()); }
ボールのときとなんらかわりませんが、 stage.addActorする順番で画像が手前に表示されるか、後ろに表示されるかが変わるみたいです。
後にaddした方が手前に表示されます。
今回はボールのほうが手前に表示されたいので、後にaddしました。
的を複数表示する
的を複数表示するために、的クラスを持ったリストを作ります。
インスタンス生成したときに、座標を設定し、Actor.setPosition()までするようにTargetのコンストラクタを変更しました。
・MainLisner.java
List<Target> targetList = new ArrayList<Target>(); @Override public void create() { targetList.add(new Target(200, 400, new Image(new Texture("img/target_red.png")))); targetList.add(new Target(400, 400, new Image(new Texture("img/target_blue.png")))); targetList.add(new Target(600, 400, new Image(new Texture("img/target_green.png")))); targetList.forEach(target -> stage.addActor(target.getImage())); }
・Target,java
public Target(int x, int y, Image image){ this.x = x; this.y = y; this.image = image; image.setPosition(this.x, this.y); }
的とボールがあたる時の判定
ボール1つと複数の的それぞれを見ないといけないので、ここでもstream APIを使います。
・MainLisner.java
//的の動作 targetList.stream() .filter(target -> boll.getX() == target.getX()) .filter(target -> boll.getY() == target.getY()) .forEach(target -> target.disappear());
とりあえずボールの座標と、的の座標が一致することで当たり判定しています。
これだと実際は、左下の頂点しかみていないので、画像が重なってもあたり判定に引っかからないので、だめですね。 画像の大きさ分の判定が必要になりそうですが、そのあたりは後回しにします。
的がボールとあたったときの動作
的とボールがぶつかったら的が消えてほしいです。
Stage クラスにaddしているので、削除するようなメソッドがあるのかと思いましたが、すぐにわからなかったので、 今回は、画像を縮小して消えたように見せることにします。
的クラスに、消滅したときの動作を定義しておきます。
・Target.java
public void disappear(){ image.setScale(0); //0まで縮小して消えた風に見せてる箇所 setDisappear(); //消滅フラグON }
このあと
次回は、タイトル画面→ゲーム→ゴール判定して、ゴールだった→タイトル画面へ戻る までを作者さんのプロジェクト見ながらやっていきます。(そういう動きがあるようなので)