ホームへ戻る

s2.10 三角の障害物を作る


 三角の障害物を作ってみましょう。
今までの章で基礎をきっちり作ったので新しい障害物の追加は非常に簡単です。
新しい図形クラスを追加したら、コンストラクタで座標をセットし、GameMgrにnewして追加すればよいだけです。
コードを見てみましょう。


↓BarricadeTriangle.java (
新規追加)

public class BarricadeTriangle extends Barricade {
        public BarricadeTriangle( float x, float y, float r, BConf conf ){
                super(3,conf);
                for(int i=0; i<3; i++){
                        _pt[i].x = x + (float) (Math.cos(Math.PI*2/3*i)*r);
                        _pt[i].y = y + (float) (Math.sin(Math.PI*2/3*i)*r);
                }
                _center.x = x;
                _center.y = y;
        }
}


これだけで新しい図形は出来上がりました。
superに渡している3は頂点の数です。三角形なので、3になるわけですね。
for文で代入している座標は点x,yを中心に半径rの正三角形の座標です。



PI*2が360度を示します。3等分したものを *0, *1, *2 しているので、三方向になりますね。
これをθとして持たせ、xにcos、yにsinを代入すれば座標が求まります。
半径はそのままrをかけるだけです。

後は new してGameMgrのタスクリストに追加してやりましょう。
バーをコメントアウトして、トライアングルを追加しました。

↓DiagramCalcr.java (
赤字部変更)

public class GameMgr {

        private static final float PI = (float) Math.PI;
        private ArrayList<Barricade> _barrList = new ArrayList<Barricade>();//障害物リスト
        private LinkedList<Task> _taskList = new LinkedList<Task>();// タスクリスト

        GameMgr() {
                _barrList.add(new BarricadeSquare(  0,  0,480, 20, null));// 画面4隅に四角形を配置
                _barrList.add(new BarricadeSquare(  0,  0, 20,800, null));
                _barrList.add(new BarricadeSquare(460,  0, 20,800, null));
                _barrList.add(new BarricadeSquare(  0,780,480, 20, null));

//              _barrList.add(new BarricadeSquare(0, 390, 480, 20, new BConf(+PI / 180)));// 中央に回転するバー(時計回り)
//              _barrList.add(new BarricadeSquare(0, 390, 480, 20, new BConf(-PI / 180)));// 中央に回転するバー(反時計回り)
                _barrList.add(new BarricadeTriangle(240, 400, 200, new BConf(+PI / 180)));// 中央に回転する三角形(時計回り)

                for (Barricade bar : _barrList) {
                        _taskList.add(bar);     //タスクリストに障害物を追加
                }

                _taskList.add(new Player());
                _taskList.add(new FpsController());
        }

        public boolean onUpdate() {
                for (int i = 0; i < _taskList.size(); i++) {
                        if (_taskList.get(i).onUpdate() == false) { // 更新失敗なら
                                _taskList.remove(i); // そのタスクを消す
                                i--;
                        }
                }
                return true;
        }

        public void onDraw(Canvas c) {
                c.drawColor(Color.WHITE); // 白で塗りつぶす
                for (Task task : _taskList) {
                        task.onDraw(c);// 描画
                }
        }

}


実行結果


この章のプロジェクトをダウンロード

→分からないことがあれば掲示板で質問して下さい


Portions of this page are modifications based on work created and shared by Google and used according to terms described in the Creative Commons 3.0 Attribution License.

- Remical Soft -