前提・実現したいこと
OpenSiv3Dで簡単なゲームを開発しています。
そこでUIにPlayerオブジェクトのHPを常時表示させたいと考えています。
UIクラスにstd::unique_ptr<Player>変数を持たせ、コンストラクタで生成したオブジェクトを登録しようとしたのですが、そこでコピーが起きているのか、実際はHPが減っているのに、デフォルトの値から変更されません。
何が間違っている & 他に良い手段はないでしょうか?よければ教えてください。
該当のソースコード(一部略)
cpp
1#include <Siv3D.hpp> 2 3class Player 4{ 5private: 6 uint32 m_hp; 7 8public: 9 Player(uint32 hp = 4) 10 :m_hp(hp) {} 11 12 void hp_minus() 13 { 14 this->m_hp--; 15 } 16 17 auto hp() 18 { 19 return this->m_hp; 20 } 21 22 void debug() 23 { 24 Print(U"player.HP"); 25 Print(this->m_hp); 26 } 27}; 28 29class UI 30{ 31private: 32 using PlayerPtr = std::shared_ptr<Player>; 33 PlayerPtr m_playerPtr; 34 35public: 36 UI() = default; 37 UI(Player& player) 38 { 39 m_playerPtr = std::make_shared<Player>(player); 40 } 41 42 void debug() 43 { 44 Print(U"UI.playerPtr->HP"); 45 Print(this->m_playerPtr->hp()); 46 } 47}; 48 49void Main() 50{ 51 Player player(4); 52 UI ui(player); 53 player.debug(); 54 ui.debug(); 55 56 player.hp_minus(); 57 player.debug(); 58 ui.debug(); 59 60 while (System::Update()) 61 { 62 63 } 64}
出力
player.HP
4
UI.playerPtr->HP
4
player.HP
3
UI.playerPtr->HP
4
補足情報
Visual Studio 2017
OpenSiv3D

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/25 18:04 編集
2018/07/25 19:11
2018/07/28 16:09