質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

SpriteKit

SpriteKitは、iOSやOS Xで使用できるApple社製の2Dゲーム開発フレームワークです。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

COCOS2D-X

COCOS2D-Xは、 2Dゲームを手軽に開発できるフレームワークのことです。 iPhone(iOS)向け、Android等に対応しており、 実質ワンソースで開発が可能です。

Q&A

1回答

2390閲覧

(放置ゲームで)一定時間毎にオブジェクトを画面に追加したい場合の最適な実装方法について

moc

総合スコア18

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

SpriteKit

SpriteKitは、iOSやOS Xで使用できるApple社製の2Dゲーム開発フレームワークです。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

COCOS2D-X

COCOS2D-Xは、 2Dゲームを手軽に開発できるフレームワークのことです。 iPhone(iOS)向け、Android等に対応しており、 実質ワンソースで開発が可能です。

0グッド

1クリップ

投稿2015/08/12 16:04

編集2022/01/12 10:55

現在の状況

現在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

現在考えている実装方法

※ボリュームが多いので、細かいところまでは書けておりません。

  1. モンスターNodeを格納する配列プロパティを作成

Swift

1var monsterArray[SKSpriteNode] = [ ]
  1. MoveToView()メソッド内で、モンスターを生成する独自メソッドaddMonster()メソッドを呼び、モンスターNodeを10体生成し、1)に格納

  2. MoveToView()メソッド内にNSTimerメソッドを記述し、

NSTimer経由で、定期的に、モンスターを生成するaddMonster()メソッドを呼び出す。
(※10体未満の場合のみ)

  1. モンスターNodeをユーザーがタップした時は配列プロパティ (monsterArray)の添え字を元にどのモンスターNodeがタップされたのか特定する

  2. モンスターが倒された場合、対象モンスターを消す

モンスターNodeが倒された場合は、removeFromParentメソッドで一旦オブジェクトを破棄し、
addMonster()内で再度インスタンスを生成する

あるいは

一時的に画面から見えない位置 (座標)に移動させて、
次に呼ばれるタイミングで位置(座標)を変えて画面上に再表示する

5)についてはどちらが良いか判断できていません。

内容に過不足あるかもしれませんが、
上記の実装方針で問題ないかや最適な実装方法などありましたら、
アドバイス頂けますと幸いです。よろしくお願いします。

追記

質問としては下記3点になります。

  • どのモンスターがタップされたか判別するには、4)の方法で問題ないか。
  • 対象モンスターを消す場合は、5)に記載の選択肢のうちどちらが良いか。
  • 一定時間毎にモンスターを生成する実装方法としては3)のNSTimerを用いる形で問題ないか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Stripe

2015/08/12 16:14

ようするに、質問内容は「5) モンスターが倒された場合、対象モンスターを消す」のところだけですか? 質問の主旨がよく分からないのですが。
Stripe

2015/08/12 16:54

えーと、「問題があるのか?ないのか?」という質問のようですが、それは実際に動かして見れば結果が出るのでは? その質問内容からは何を回答してよいのか分かりません。「※ボリュームが多いので、細かいところまでは書けておりません。」ということで、判断材料になるものもほとんど無いし。
guest

回答1

0

これらで問題ないと思いますよ。

どのモンスターがタップされたか判別するには、4)の方法で問題ないか。
対象モンスターを消す場合は、5)に記載の選択肢のうちどちらが良いか。
一定時間毎にモンスターを生成する実装方法としては3)のNSTimerを用いる形で問題ないか。

他の方法は、
モンスターをクラス化するのであれば、モンスターのクラス内でタッチイベントを拾うこともできますね。

5)ですが、私がいつもやるのは、flagを持ち==falseの時は、hidden=YESで消します。
10体限定しているなら、リムーブで外すより、フラグで表示、非表示を管理した方が楽かと思います。

3)NSTimerでも問題はなないですが、レジューム対応をどうするかですね。
私がよくやるのは、NSTimerで1秒測り、1秒でゲームカウントを1つ増やし、
ゲームカウント20でモンスター生成 おおよそリアル20秒で敵が登場するて仕組みにしますかね。

投稿2015/08/26 01:02

MasaakiIrie

総合スコア1021

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問