2012年4月8日日曜日

ゲーム開発

去年のある時期を境にiphoneでゲームが作りたくなって、ある程度構想を練って作り始めた訳ですが、

その過程で分かったことがあります。

「ゲームを作る人(作れる人)ってすごい」ということです。

私が今作成しようとしているゲームは、正直ファミコンでも表現可能なゲームです。
そして、cocos2dを使っているので難しいことは考える必要は無いはずなのです。

それでも、作成しようと決意してからすでに半年程度経過しているにもかかわらず、全然実装の終わりが見えない。

一日1時間程度しか時間が取れないという言い訳満開の事実があるにせよ、予定ではすでに完成しているはずなのです。

なのに全然終わらない。なんだコレ。


別に締切りがある訳では無いんですが、ちょっとある企画に乗った形で作っているので
何か申し訳ない気持ちと、焦りの気持ちでいっぱいです。

しかし、中途半端なものを作りたくないので頑張ります。

けど、一度ファミコン時代のプログラムをみてみたいなー
あのスーパ配管工兄弟のゲームでは、メモリ確保の為に今では考えられない色々なことをしていると噂で聞いたことがあります。

どれくらいのコード量なんやろなー。

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クラスを見ていきます。