ここにはありません。私はPlayer
オブジェクトmainCharacter
を複数のクラスにわたって変更しようとしています。私は現在、下記のように宣言されたPlayer
オブジェクトを持っています。 Player
は様々な世界にテレポートしてモンスターと戦うことができます。C++複数のクラス間で同じオブジェクトに変更を加える方法は?
すべてのコードが動作します。 1つの世界の敵が敗北すると、彼らは敗北し続ける。私の問題は、彼が別の世界にテレポートするとき、Player
の統計はすべてデフォルト値にリセットされていることです。彼は前の世界の敵からのダメージを受けた後でさえ、完全なライフポイントを再び持つ。
複数のクラスまたはワールドにわたって同じPlayer
オブジェクトを変更するにはどうすればよいですか?私は宣言に問題があると思っていますが、わかりません。私は入力を感謝します。ありがとう!
mainCharacter
オブジェクトが宣言されている
:Player.hpp
の
class SpaceList
{
protected:
class SpaceNode
{
friend class SpaceList;
Player mainCharacter;
Space* thisSpace;
SpaceNode* next;
SpaceNode(int m, SpaceNode* next1 = NULL)
{
if(m == 0)
{
thisSpace = new EntranceHall(&mainCharacter);
}
else if(m == 1)
{
thisSpace = new WaterSpace(&mainCharacter);
}
パート:Player.cpp
の
class Player: public Interactable
{
protected:
Backpack myBackpack;
public:
Player();
virtual interactableType getInteractableType();
virtual int interact();
virtual int attack();
virtual void defend(int);
をパート:
mainCharacter
はEntrance
でオフを開始する(Entrance.cpp
):
EntranceHall::EntranceHall(Interactable* mainCharacter)
{
interactableGrid[6][3] = mainCharacter;
interactableGrid[0][3] = new Portal(0);//entrance portal
interactableGrid[3][3] = new InterestPoint(0);//stone mural
}
mainCharacter
は後でウォーターワールドへテレポートする
は、デフォルト値がリセットさ (Waterspace.cpp
):
WaterSpace::WaterSpace(Interactable* mainCharacter)
{
interactableGrid[3][0] = mainCharacter;
interactableGrid[3][3] = new Boss(this->getSpaceType());
「mainCharacter」はどこに作成されていますか?それは、あなたが新鮮な 'Player 'インスタンスを与えるたびに新たに作成されたように聞こえます。代わりに、1人のプレイヤーを作成してそのインスタンスを使いたいと思うようです。 –
@SteveFranciscoそれはまさに私がやりたいことです。私はspacelist.hppで作成しました。EntranceHallとWaterSpaceなどに同じPlayerを送信していたと思います。EntranceHallのPlayerに変更が加えられた場合、WaterSpaceに反映されますが、そうではありません。 – anna
以下の答えは正しいアイデアを持っています。スペースノードのmainCharacterは、スペースノードが作成されるたびにデフォルトでインスタンス化されます。 Playerオブジェクトを一度作成し、SpaceNodeメソッドまたはコンストラクターの引数として個々のスペースに渡したいと思うかもしれません。 – DaveyLaser