ポインターと参照の基本は理解していますが、最大の問題は、それらをいつ (そしてどちらを) 使用するかを決定することです。私が与える主な例は、基本的なゲームの 1 つです。セットアップが次のようなものであると仮定します。
- 新世界
- カメラ
- 地図
ゲームが新しいセーブを開始するか、既存のワールドをロードするたびに、ワールドを削除して新しいワールドをロードするため、ワールドはポインタです。ただし、World の内部では、Camera と Map の存在は 1 つだけ存在し、World の期間だけ存在する必要があります。World が破壊された場合、明らかにそれらも破壊されるはずです。ただし、Map がカメラにアクセスする必要があるとしましょう (ただし、他のオブジェクトも同様です)。Camera は、参照によって Map に渡すか、ポインターとして渡す必要がありますか? たとえば、参照によるものであると想定されている場合、次のようにする必要があります。
map = Map(&camera);
(inside map class) Map(Camera camera) {...}
またはもっと好き:
map = Map(camera);
(inside map class) Map(Camera &camera) {...}
また、Map が grid と呼ばれるタイルの 2D ベクトルを保持しているとします。何かのようなもの:
std::vector< std::vector< Tile > > > grid;
ここで、そのグリッドを渡す必要がある PathFinder クラスがあるとします。タイルを直接編集して、f、g などの値を (パスファインディング用に) 変更する必要があります。その 2D ベクトルは、Tile の通常の 2D ベクトルであり、パスファインダーへの参照によって全体が渡されるべきでしょうか? それとも、Tile ポインターの 2D ベクトルである必要がありますか?
また、NPC とプレイヤーには、現在いるタイルである currentTile があります。そのタイルへの参照またはポインタが必要になるため、NPC/Player クラス内の次のようなものを介して、そのタイルの占有者として自分自身を設定することもできます。
currentTile = tile;
currentTile->SetOccupant(this);
もう 1 つの懸念は、そのグリッドを破棄して新しいマップをロードするときに発生します。存在しなくなったタイルを指しているものがないことを確認するにはどうすればよいでしょうか。これらのクラスをループして currentTile を NULL に設定するだけでよいのでしょうか?
これは、私がこのことで本当に混乱し始めたところです。私は明らかにかなり初心者なので、どんな助けも大歓迎です。@_@; これが実際にゲームのトピックに関連していない場合は申し訳ありません。別のスタック交換に移動する必要がある場合は、お知らせいただくか、移動してください (可能であれば)。>_<