私のゲームのグローバルクラスにrealMapというマップがあります。これは、realMapがスコープ内にある限り、ゲーム内のすべてのオブジェクトがアクセスできる変数をマップに格納するために使用されます。基本的にglobal.
はGamemakerのようです。したがって、マップ内のすべてが実行時に保存されます。
これはマップ初期化コードですstd::map<const char*, Real> realMap;
(にReal
宣言された別のファイルにありdouble
ます)。
私のプレーヤーオブジェクトでは、開始時にプレーヤーは globalObject.realMap["playerDead"] = false;
だから私はチェックし、それは0に等しい。
しかし、プレイヤーが死ぬと、マップキーをに設定するtrue
ことになっていますが、そうではありません。表示されたメッセージを実行して、その値を確認しましたが、まだ0です。コードは次のとおりです。
ObjGlobal->realMap["playerDead"] = true;
Real tempVal = ObjGlobal->realMap.at("playerDead");
agk::Message(agk::Str(int(tempVal)));
先ほど述べたように、agk :: Messageは0を表示します。
私は何が間違っているのですか?私はまだマップに不慣れで、C ++全般に少し慣れていないので、ばかげた間違いである場合は申し訳ありません。
前もって感謝します
マップへのキーとして文字列リテラルへのポインタを使用していますが"playerDead"
、コードには2つの異なる文字列があります。リンカが2つの文字列を同じポインタに最適化していない限り(多くのリンカが行う最適化ですが、そうする必要はありません)、キーは実際には異なるものになります。
マップ定義を変更するstd::map<std::string, Real>
と、キーは実際にはメモリ内のアドレスではなく文字列の内容に基づいているため、期待どおりに機能するはずです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加