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

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

ただいまの
回答率

88.23%

マップ制のゲームで、オブジェクトが自身の座標を持つことは不自然かどうか

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 2,260

chankane

score 138

前提・実現したいこと

こんにちは毎度お世話になっております。
今回は、ツクールのような、RPGゲームをつくりたいのですが、前回の質問でご指摘を受けて悩んでいることがあります。
具体的には、今回のようなマップ性のゲームで、キャラクターなどのオブジェクトが自身の座標をもつことに違和感があるというものです。

簡単に書くと、
座標 → オブジェクト
オブジェクト → 座標
どちらの流れが自然かで悩んでいます。

質問の意図がつかめない方は、上のリンク「前回の質問」をご参照ください。
ずいぶんとおおざっぱな質問でわかりにくいと思いますが、そのときは追記依頼をお願いします。
どうぞよろしくお願いします。

今のところ考えられる方法

配列の中にオブジェクトがあって、座標を指定してそこからオブジェクトを取り出す方法

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+4

個人的にはそのゲームの内容によって設計を考えます。

ドラゴンクエストとファイアーエムブレムというと大体のゲームのイメージがつかめますでしょうか?
マップ上で十字キーを押したときに、前者はキャラクターが、後者はマップ上の位置がカーソルで動きます。

前者であれば、十字キーを押すとキャラクターが能動的に動くイメージです。この場合、個人的にはマップ上を移動するメソッドはキャラクターのオブジェクトを主導として実装したいので、おそらくキャラクターが現在の座標を持っているほうが処理が円滑に進むのではないかと思います。左に進みたいのだがそこには進めないので動かない、とか、前に宝箱があってそれをあけるかどうか、という判断もキャラクター自身にさせたいです。
ただしキャラクターの周りに何があるかは別管理にするでしょうね。キャラクターは現在の座標を持っていて、その座標を元に別の地形を管理している箇所に問い合わせを行い、前に何があるかを返します。その返り値をもって、キャラクターが何をするかという選択肢が示される。というような実装が自然に感じられます。

後者であれば、キャラクター自身が能動的に動くのではなく、マップ上の地形が既に存在し、そこにキャラクターが乗る、というイメージです。キャラクターが能動的に相手を攻撃する、というよりは、地形を選んでそこにキャラクターがいて、周囲に敵がいれば攻撃することもできる、というようなイメージを私個人は持ちます。ですのでその場合キャラクターには現在の座標は持たせないかもしれません。キャラクター自身が自分の座標を持っている必要を感じないからです。
ただし同様のゲームであっても周囲に敵がいればキャラクターは自動的に相手を攻撃する、というようなゲーム内容の場合はキャラクターが自分自身の座標を持っているほうが処理が円滑に進むだろうと思いますし自然に感じられます。

上記のようにそのゲームの内容によって何が自然な設計かは変わってくると思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/06/04 14:53 編集

    自分の解釈が合っていれば、前者の能動的に動くイメージに該当します。
    >ただしキャラクターの周りに何があるかは別管理にするでしょうね。キャラクターは現在の座標を持っていて、その座標を元に別の地形を管理している箇所に問い合わせを行い、前に何があるかを返します。その返り値をもって、キャラクターが何をするかという選択肢が示される。というような実装が自然に感じられます。

    そのように実装しています。
    ちなみに2つのゲームを知らないのですが、前者は青鬼、後者はチェスのようなイメージですか?(そっちのほうがわかりにくかったらごめんなさい(´・ω・`))

    キャンセル

  • 2017/06/04 14:55

    はい、そのイメージで合っています。

    キャンセル

  • 2017/06/04 15:00

    ではキャラクターに座標を持たせるようにしたいと思います。
    参考になりました。ありがとうございます(*^^)v

    キャンセル

+2

具体的には、今回のようなマップ性のゲームで、キャラクターなどのオブジェクトが自身の座標をもつことに違和感があるというものです。

その違和感は正しいです。
「キャラクターなどのオブジェクトは自身の座標を持たない」方が多くの場合良い選択となります。

メリットは”オブジェクトの座標情報がマップに集約されるので設計がシンプルになる”ことです。
デメリットもあります。”実装手順が多くなる”や”処理速度”といったことです。
現段階ではデメリットを気にする必要はないでしょう。
デメリットは最適化の問題なので、問題が現実に発生したらその問題に合わせて最適化すれば良いです。

今回の問題に対して、私なら下記のようにします。

・マップは全オブジェクトの座標を管理(「今のところ考えられる方法」に記載のされた内容)
・キャラクタ(オブジェクト)は自分を管理しているマップへの参照をもつ(これは必然)

この方法には賛否が出ると思います。また、実装すると非効率だと感じることでしょう。
キャラクタが自身の現在座標を知るだけでループで探すことになるからです。
キャラクタが自身の座標を持っていればループは必要なくなります。
ですが、オブジェクトに座標を持たせてしまうと
マップとの二重管理を発端に随所に座標やオブジェクトの捜索をする処理が必要になってきます。
定石や上手い管理の仕方がない限り、オブジェクト捜索と座標計算の化け物になってしまいます。
なので、冒頭の回答となります。

蛇足ですが
現実世界もそうです。私たちは自分がどこにいるのかその座標を自分自身では知りません。
自分自身の外、つまりマップが教えてくれます。最も端的な例はGPSです。風景も例になります。
移動に関しても、前に進む時、私たちは意思は持つものの、前に壁があれば進めません。
壁は自分自身の外、マップに存在します。私たちは目を通してそれを認識します。
キャラクタ(=私たち)は、常にマップから情報を得て行動や判断をしているのです。
この点からも、自身の座標を持たないという選択は自然なことと言えます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/06/09 23:30

    お久しぶりです。作っていて疑問に思ったことがあります。
    ・マップは全オブジェクトの座標を管理(「今のところ考えられる方法」に記載のされた内容)
    ・キャラクタ(オブジェクト)は自分を管理しているマップへの参照をもつ(これは必然)
    これはオブジェクトの二重管理になりませんか?
    マップの上では存在することになっているが、キャラクター側では自分を管理しているマップへの参照をもたない。逆に、マップの上では存在しないことになっているが、キャラクター側では自分を管理しているマップへの参照をもつ。
    この二重管理は必然ですか?それとも私がなにか勘違いをしていますか?

    キャンセル

  • 2017/06/11 11:09

    勘違いはされていません。指摘は合っていて二重管理になっています。
    この点に気づかれたということは二重管理について本質は伝わったのだと感じています。

    質問に回答します。
    「必然」と書いたのには私の経験が含まれています。言い換えると「いろいろとやろうとすると、結果、キャラクタがマップの情報を持つことになる。その時キャラクタが持つマップの情報はマップへの参照。」になります。これを端的に「必然」と書きました。
    コメントで書いてくださった「マップの上では存在することになっているが~キャラクター側では自分を管理しているマップへの参照をもつ。」は、二重管理をすることで発生する問題点であり、防止すべき状態を示すものです。

    二重管理の問題点をお伝えしましたが、二重管理は必要になります。
    私が今回伝えたいのは「二重管理は必要。どのレベル(マップ/座標etc)で二重管理するかがポイント」ということです。
    マップ制ゲームとして下記の処理内容・条件・実装パターンでどうなるか取り組んでみると意味が伝わると思います。
    【処理内容】
    ・キャラクタを前後左右に移動させる
    【条件】
    ・前後左右の移動処理はキャラクタ側に実装する
    ・マップには障害物(キャラクタがそこには移動できない)がある
    ・キャラクタは複数いる(プレイヤーキャラクタの他、敵キャラクターもいる)
    ・マップが複数ある
    【実装パターン】
    ・キャラクタに座標を持たせて、マップではキャラクタの座標を管理しない
    ・キャラクタにマップへの参照を持たせて、マップてキャラクタの座標を管理する
    ・キャラクタには座標もマップへの参照も持たせず、マップでキャラクタの座標を管理する

    キャンセル

  • 2017/06/11 11:26

    やはり必然ですか...。となれば上記の自分のコメントみたいな状況にはならないようにしないといけませんね!
    なんだかおもしろそうです。少し時間がかかるかもしれませんが3パターン実装してみたいと思います。
    それでもわからなかったらまた質問します。
    ご回答ありがとうございました!(^^)!

    キャンセル

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

  • ただいまの回答率 88.23%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る