[英]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.