せでぃのブログ

ブログ初心者おいどんのどうでもいい愚痴やどうでもいい愚痴やどうでもいいマメ知識などを披露するチラシの裏です。

techinstitute無料テキストFlyingDroidの途中のコード

f:id:Sediment:20150517093959j:plain
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