簡體   English   中英

C ++游戲訪問單獨的類變量

[英]C++ Game Accessing separate classes variables

我一直在嘗試使用SDL 2.0圖形庫使用C ++進行游戲,但遇到了問題。

我有兩個類的用戶和敵人。 這是兩者的簡化版本,問一下,我將整個內容粘貼

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};
};

函數Enemy :: Movement找出子畫面的位置,然后進行相應的移動,但是它無法獲取Spritepos的當前值,只能獲取其初始化值,在這種情況下為10。這是函數Enemy: :運動的代碼。 我要如何解決這個問題,請記住這些功能正在循環運行。

void Enemy::Movement()
{
    User Player;


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

    }else if (Wizard1Pos.x > Player.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  --;
    }
}

User Player; 在堆棧上創建類型為User的新對象,然后從中讀取。 Movement()函數的末尾,將刪除堆棧變量Player Player永遠不會寫入。

在一個位置創建一個名為Player的變量,然后在另一個位置創建另一個名為Player變量,無論如何都不會將2鏈接起來(例外:全局變量)。 變量名稱對代碼的行為沒有影響。

如果要讓Movement引用一個已經存在的User ,則需要告訴Movement()方法所引用的User實例。 您可以通過向該方法添加一個參數來做到這一點,如下所示:

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  --;
    }
}

&指示程序不進行復制。 const告訴程序不允許在Movement方法中更改player任何內容。 const除了防止愚蠢的錯誤外沒有任何價值,正如您將學到的那樣,這是極其有益的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM