2012年1月17日火曜日

cocos2dでタワーディフェンス その3


前回の続きです。
前回はCreepクラスを継承して2種類の敵を設定する所まで見ました。

次は、DataModelクラスとWayPointクラスを利用して、敵に動作を与える箇所につて見ていきます。

Creep.mの以下の箇所
- (WayPoint *)getCurrentWaypoint{
 DataModel *m = [DataModel getModel];
 WayPoint *waypoint = (WayPoint *) [m._waypoints objectAtIndex:self.curWaypoint];
 return waypoint;
}

- (WayPoint *)getNextWaypoint{

 DataModel *m = [DataModel getModel];
 int lastWaypoint = m._waypoints.count;
 self.curWaypoint++;
 if (self.curWaypoint > lastWaypoint)
  self.curWaypoint = lastWaypoint - 1;

 WayPoint *waypoint = (WayPoint *) [m._waypoints objectAtIndex:self.curWaypoint];
 return waypoint;
}
「getCurrentWaypoint」は現在のWaypointを取得します。
要は今の敵の位置ですね。

「getNextWaypoint」は次のWaypointを返します。
要は次にどこまで移動するかの情報ですね。

この両メソッドを見てみると、
WayPoint *waypoint = (WayPoint *) [m._waypoints objectAtIndex:self.curWaypoint];
という共通箇所があるのが見れると思います。
ここでは、Creepクラスで保持している「curWaypoint」からwaypointを見つけて返却しています。

次の場所を取得したい場合は、「curWaypoint」の値を増やせばOKです。
ただし、増やした値が配列の最後の値なのかの確認は必要ですが。

配列の末尾の値になったら、「curWaypoint」の値はそれ以上増えません(これ以上移動しないって意味です)。
値を「0」にすると敵はループし続けます。

getNextWaypoint内の
self.curWaypoint = lastWaypoint – 1;

self.curWaypoint = 0;


に変更してみてください。

こうすると、タワーが破壊されない限りWaveが繰り返されます。
「self.curWaypoint = lastWaypoint – 1;」だと、敵が一周すると出てこなくなるのに対して
「self.curWaypoint = 0;」だと一周した後、再び敵が出てくるのがわかりますね。

今回はここまで。
次回はTutorialSceneクラスを見ていきます。

0 件のコメント:

コメントを投稿