マップ制のゲームで、オブジェクトが自身の座標を持つことは不自然かどうか
解決済
回答 2
投稿
- 評価
- クリップ 1
- VIEW 2,260
前提・実現したいこと
こんにちは毎度お世話になっております。
今回は、ツクールのような、RPGゲームをつくりたいのですが、前回の質問でご指摘を受けて悩んでいることがあります。
具体的には、今回のようなマップ性のゲームで、キャラクターなどのオブジェクトが自身の座標をもつことに違和感があるというものです。
簡単に書くと、
座標 → オブジェクト
オブジェクト → 座標
どちらの流れが自然かで悩んでいます。
質問の意図がつかめない方は、上のリンク「前回の質問」をご参照ください。
ずいぶんとおおざっぱな質問でわかりにくいと思いますが、そのときは追記依頼をお願いします。
どうぞよろしくお願いします。
今のところ考えられる方法
配列の中にオブジェクトがあって、座標を指定してそこからオブジェクトを取り出す方法
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+4
個人的にはそのゲームの内容によって設計を考えます。
ドラゴンクエストとファイアーエムブレムというと大体のゲームのイメージがつかめますでしょうか?
マップ上で十字キーを押したときに、前者はキャラクターが、後者はマップ上の位置がカーソルで動きます。
前者であれば、十字キーを押すとキャラクターが能動的に動くイメージです。この場合、個人的にはマップ上を移動するメソッドはキャラクターのオブジェクトを主導として実装したいので、おそらくキャラクターが現在の座標を持っているほうが処理が円滑に進むのではないかと思います。左に進みたいのだがそこには進めないので動かない、とか、前に宝箱があってそれをあけるかどうか、という判断もキャラクター自身にさせたいです。
ただしキャラクターの周りに何があるかは別管理にするでしょうね。キャラクターは現在の座標を持っていて、その座標を元に別の地形を管理している箇所に問い合わせを行い、前に何があるかを返します。その返り値をもって、キャラクターが何をするかという選択肢が示される。というような実装が自然に感じられます。
後者であれば、キャラクター自身が能動的に動くのではなく、マップ上の地形が既に存在し、そこにキャラクターが乗る、というイメージです。キャラクターが能動的に相手を攻撃する、というよりは、地形を選んでそこにキャラクターがいて、周囲に敵がいれば攻撃することもできる、というようなイメージを私個人は持ちます。ですのでその場合キャラクターには現在の座標は持たせないかもしれません。キャラクター自身が自分の座標を持っている必要を感じないからです。
ただし同様のゲームであっても周囲に敵がいればキャラクターは自動的に相手を攻撃する、というようなゲーム内容の場合はキャラクターが自分自身の座標を持っているほうが処理が円滑に進むだろうと思いますし自然に感じられます。
上記のようにそのゲームの内容によって何が自然な設計かは変わってくると思います。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+2
具体的には、今回のようなマップ性のゲームで、キャラクターなどのオブジェクトが自身の座標をもつことに違和感があるというものです。
その違和感は正しいです。
「キャラクターなどのオブジェクトは自身の座標を持たない」方が多くの場合良い選択となります。
メリットは”オブジェクトの座標情報がマップに集約されるので設計がシンプルになる”ことです。
デメリットもあります。”実装手順が多くなる”や”処理速度”といったことです。
現段階ではデメリットを気にする必要はないでしょう。
デメリットは最適化の問題なので、問題が現実に発生したらその問題に合わせて最適化すれば良いです。
今回の問題に対して、私なら下記のようにします。
・マップは全オブジェクトの座標を管理(「今のところ考えられる方法」に記載のされた内容)
・キャラクタ(オブジェクト)は自分を管理しているマップへの参照をもつ(これは必然)
この方法には賛否が出ると思います。また、実装すると非効率だと感じることでしょう。
キャラクタが自身の現在座標を知るだけでループで探すことになるからです。
キャラクタが自身の座標を持っていればループは必要なくなります。
ですが、オブジェクトに座標を持たせてしまうと
マップとの二重管理を発端に随所に座標やオブジェクトの捜索をする処理が必要になってきます。
定石や上手い管理の仕方がない限り、オブジェクト捜索と座標計算の化け物になってしまいます。
なので、冒頭の回答となります。
蛇足ですが
現実世界もそうです。私たちは自分がどこにいるのかその座標を自分自身では知りません。
自分自身の外、つまりマップが教えてくれます。最も端的な例はGPSです。風景も例になります。
移動に関しても、前に進む時、私たちは意思は持つものの、前に壁があれば進めません。
壁は自分自身の外、マップに存在します。私たちは目を通してそれを認識します。
キャラクタ(=私たち)は、常にマップから情報を得て行動や判断をしているのです。
この点からも、自身の座標を持たないという選択は自然なことと言えます。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.23%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2017/06/04 14:53 編集
>ただしキャラクターの周りに何があるかは別管理にするでしょうね。キャラクターは現在の座標を持っていて、その座標を元に別の地形を管理している箇所に問い合わせを行い、前に何があるかを返します。その返り値をもって、キャラクターが何をするかという選択肢が示される。というような実装が自然に感じられます。
そのように実装しています。
ちなみに2つのゲームを知らないのですが、前者は青鬼、後者はチェスのようなイメージですか?(そっちのほうがわかりにくかったらごめんなさい(´・ω・`))
2017/06/04 14:55
2017/06/04 15:00
参考になりました。ありがとうございます(*^^)v