C++;访问独立类变量的游戏 我一直在尝试用C++图形库SDL 2做游戏,但是我遇到了一个问题。

C++;访问独立类变量的游戏 我一直在尝试用C++图形库SDL 2做游戏,但是我遇到了一个问题。,c++,class,sdl,C++,Class,Sdl,我有两个类用户和敌人。这里是这两个版本的精简版,只要问一下,我就会把整个内容粘贴上去 class User { public: //Friends: friend class Enemy; protected: private: //The sprite position SDL_Rect SpritePos = {10, 100}; }; class Enemy { public:

我有两个类用户和敌人。这里是这两个版本的精简版,只要问一下,我就会把整个内容粘贴上去

class User
{
    public:
       //Friends:
       friend class Enemy;


    protected:
    private:
        //The sprite position
        SDL_Rect SpritePos = {10, 100};
};



class Enemy
{
   public:
        //Friends:
        friend class User;

        Enemy();
       int CheckEnemy(SDL_Surface* &ScreenSurface);
       //Loads enemy images
       bool LoadEnemyMedia();

    protected:
    private:
        //Controls the AI movement
        void Movement();

        //Wizard 1's location on screen
        SDL_Rect Wizard1Pos = {50, 70};
};
函数敌方::Movement找出精灵的位置,然后相应地移动自身,但是它无法获得精灵的当前值,只有它初始化时使用的值,在本例中为10。这是函数敌人::运动的代码。我如何解决这个问题,请记住这些函数是在循环中运行的

void Enemy::Movement()
{
    User Player;


    if (Wizard1Pos.x < Player.SpritePos.x)
    {
        Wizard1Pos.x ++;

    }else if (Wizard1Pos.x > Player.SpritePos.x)
    {
        Wizard1Pos.x  --;
    }
}
void敌人::移动()
{
用户播放器;
if(Wizard1Pos.xPlayer.SpritePos.x)
{
Wizard1Pos.x--;
}
}

Player.SpritePos.x
将返回变量
Player
的成员
SpritePos
的成员
x

如果只获取初始化值而不是更新值,则可能是从不同的副本读取而不是写入。在有更多关于数据写入方式和位置的信息之前,我建议您查看“引用”和“指针”

编辑:我看到您的实际代码看起来与示例相同,我假设示例已简化:

void Enemy::Movement()
{
    User Player;
    printf("%u\n", Player.RefTest.x);

    if (Wizard1Pos.x < Player.RefTest.x)
    {
        Wizard1Pos.x ++;
    }else if (Wizard1Pos.x > Player.RefTest.x )
    {
        Wizard1Pos.x  --;
    }
}

&
告诉程序不要复制。
const
告诉程序,不允许在
Movement
方法中更改
player
中的任何内容。
const
除了防止愚蠢的错误之外,没有任何附加值,正如您将了解到的那样,这是非常有益的。

我已经研究过使用引用变量,但是当我从单独的类打印它时,它仍然读取不同的值。如何确保它读取的是正确的副本。我需要查看更多代码。一个公共dropbox/gdrive/skydrive文件夹怎么样?谢谢这真的很有帮助,但我还有两个问题。如何传递正确的User实例(作为参数传递什么),当使用“void Movement(const User&Player)”时,我会得到错误“User没有名称类型”,我如何修复这个错误?我猜你在header.h中写到了这一点。标头还不知道用户可能是什么。你需要在教科书(或谷歌)中查找“转发声明”。关于将什么作为参数传递,你需要决定你希望
用户
实例(你称之为“玩家”)在哪里生存,以及如何控制它的生存期。您尝试的项目从C++开始有点太多了。我建议花几天时间学习教程,内容包括由多个文件组成的程序。
void Enemy::Movement(const User & someCompletelyArbitraryVariableName)
{
    printf("%u\n", someCompletelyArbitraryVariableName.RefTest.x);

    if (Wizard1Pos.x < someCompletelyArbitraryVariableName.RefTest.x)
    {
        Wizard1Pos.x ++;
    }else if (Wizard1Pos.x > someCompletelyArbitraryVariableName.RefTest.x )
    {
        Wizard1Pos.x  --;
    }
}