現在の状況
現在Swiftの2Dゲームエンジン、SpriteKitを用いて放置ゲームを作っています。
具体的には、画面上に一定間隔で出現するオブジェクト(モンスターなど)を主人公キャラが倒したりする度にポイントが上がるゲームです。
実装を進めてみたのですが、途中で行き詰まってしまったため、質問させて頂きます。
▽現状
Scene画面上に主人公(1体)Node、モンスター (1体 )Nodeがあり、
現状までに下記の実装を進めました。
(1) 画面内で動き回るモンスターNode(1体) をユーザーがタップ (2) 主人公NodeがモンスターNodeの位置まで移動して攻撃する (3) モンスターNodeが消えて、ポイントアップ
今後やりたいこと
a. 初回表示時はモンスターNodeをMax数(10体)表示しておきたい。 b. モンスターNodeが10体未満であれば、一定時間(20秒ごとなど)毎に1体増えるようにしたい。 c. 同じ種類のモンスターNodeの中でどのモンスターNodeがタップされたのか特定し、その場合、タップされたモンスターNodeだけを画面上から消すようにしたい
※foreground⇄background切り替えによる時間管理は上記の実装後に進める予定です。
例1:
http://www.topmusic100.com/-d3lxdjB5ZVhWODA.html
例2:
https://www.youtube.com/watch?v=DWrdADwlHoU
現在考えている実装方法
※ボリュームが多いので、細かいところまでは書けておりません。
- モンスターNodeを格納する配列プロパティを作成
Swift
1var monsterArray[SKSpriteNode] = [ ]
-
MoveToView()メソッド
内で、モンスターを生成する独自メソッドaddMonster()メソッド
を呼び、モンスターNodeを10体生成し、1)に格納 -
MoveToView()メソッド
内にNSTimerメソッド
を記述し、
NSTimer経由で、定期的に、モンスターを生成するaddMonster()メソッド
を呼び出す。
(※10体未満の場合のみ)
-
モンスターNodeをユーザーがタップした時は配列プロパティ (
monsterArray
)の添え字を元にどのモンスターNodeがタップされたのか特定する -
モンスターが倒された場合、対象モンスターを消す
モンスターNodeが倒された場合は、removeFromParentメソッド
で一旦オブジェクトを破棄し、
addMonster()
内で再度インスタンスを生成する
あるいは
一時的に画面から見えない位置 (座標)に移動させて、
次に呼ばれるタイミングで位置(座標)を変えて画面上に再表示する
5)についてはどちらが良いか判断できていません。
内容に過不足あるかもしれませんが、
上記の実装方針で問題ないかや最適な実装方法などありましたら、
アドバイス頂けますと幸いです。よろしくお願いします。
追記
質問としては下記3点になります。
- どのモンスターがタップされたか判別するには、4)の方法で問題ないか。
- 対象モンスターを消す場合は、5)に記載の選択肢のうちどちらが良いか。
- 一定時間毎にモンスターを生成する実装方法としては3)のNSTimerを用いる形で問題ないか。