techinstitute無料テキストFlyingDroidの途中のコード
github.com
ドロイドくんをスプライトで動かすアプリの障害物を乱数で出力するあたり(テキストp.54)でハマったので修正して動くものを上げてみた。無料テキストに文句言ってもしょうがないけど、GameView.javaの記載が明らかに間違えててどうやっても動かなくなる。
iPhoneアプリと違って階層が面倒なので、コードを見せるだけ。
敵5体はどうやっても避けきれない。
GameView.java
正解。
public GameThread(SurfaceHolder surfaceHolder, Context context, Handler handler) { this.surfaceHolder = surfaceHolder; droid = new Droid(context, droidSize, droidSize); droid.setInitalPosition(100, 0); this.context = context; enemys = new Enemy[EnemyNum]; enemys[0] = new Enemy(context, enemySize, enemySize); } public void setViewSize(int width, int height) { this.width = width; this.height = height; droid.setMovingBoundary(0, 0, width, height); for (int i = 0; i< EnemyNum; i++) { if (enemys[i] != null) { enemys[i].setMovingBoundary(0, 0, width, height); } } }
テキスト通りにやるとこうなる。
直すところも逆だし、「ここでは1つだけEnemyオブジェクトを 生成して、配列の0番目に入れておきます。」のヒントだけではちときつい。
public GameThread(SurfaceHolder surfaceHolder, Context context, Handler handler) { this.surfaceHolder = surfaceHolder; droid = new Droid(context, droidSize, droidSize); droid.setInitalPosition(100, 0); for (int i = 0; i< EnemyNum; i++) { if (enemys[i] != null) { enemys[i].setMovingBoundary(0, 0, width, height); } } } public void setViewSize(int width, int height) { this.width = width; this.height = height; droid.setMovingBoundary(0, 0, width, height); enemy.setMovingBoundary(0, 0, width, height); //??? }
参考)
多分、全部完成してる奴。github.com