Back
A003 タワーディフェンス試作

『スターダストディフェンス』の企画に際して、まずTD作るには何をどうすればいいんだ?という絶望的なところから始め、マップの生成、タレットの設置、と一つずつプログラムを作り、とりあえず一通りの仕様を実装してどうにかTDっぽくなったものがこれ。

なんか妙に難しいです。多分パーフェクト取れません。クリアしても何もありません。というかクリア処理がありません。虚しくなるだけかも知れません。描画の処理の事何も考えてないので、後半やたらと重くなります。もうソースコードが残って無かったので何も直せません。諦めましょう。


-TIPS-
タレット(多数)vs敵(多数)のために敵をリスト化してみる。


//スプライト内のオブジェクトが増減する度に再配列化
_enemysArray = [];
for (i = 0; i < _enemysLayer.numChildren; i++) {
	_enemysArray.push(_enemysLayer.getChildAt(i));
}

全敵のリストが出来れば、タレットから三平方の定理で距離を測れば射程内の敵を個別にリスト化出来る。
同じ様に発射した弾から敵への距離を取れば当たり判定が取れるし、着弾点からの距離を取れば範囲攻撃など色々出来る。


//タレットから敵が射程内に居るかを監視
for each (var enemy in _enemysArray) {
	if (Math.sqrt((enemy.x - x) * (enemy.x - x) + (enemy.y - y) * (enemy.y - y)) < [射程]) {
		_inRangeEnemyArray.push(enemy);
	}
}

タレットから狙った敵への角度(弾の発射方向)は三角関数で求められる。
この辺のゲーム的な基本の処理に関してはこちらのサイトがわかりやすくて詳しい。


_rot = Math.atan2(enemy.y - y, enemy.x - x) * 180 / Math.PI;

マップもグリッド式なので、配列を利用すればタレットの設置も簡単に管理出来た。


	_mapArray = [
		0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
		0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,
		0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,
		0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,
		0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,
		0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,
		0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,
		0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,
		0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,
		0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,
		0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,
		0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,
		0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,
		0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,
		0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,
		0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,
		1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
		1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
		0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
	]
	
//カーソルの位置を配列上の位置に変換
_nowGrid = Math.floor((mouseY / グリッドサイズ)) * 横グリッド数 + Math.floor((mouseX / グリッドサイズ));

これであと貫通弾の処理だとか、レベルアップの処理だとか思い付くままに加えて広げていけばスターダストディフェンスの完成。何もわからない所からでも一つ一つ実装していけばどうにかなるんだなという妙な自信が付きました。