2012-09-20 43 views
0
if(GetKeyState(VK_SPACE) && Player1.canFire == true) 
{ 
    Player1.canFire = false; 
    Player1.hasFired = true; 
    Bullet Bullet1((Player1.Xpos + (Player1.Skin->GetWidth()/2)), 
        Player1.Ypos - ProjectileSkin->GetHeight()); 
} 
if(Player1.hasFired = true) 
{ 
    Bullet1.Projectile->CopyTo(m_Screen, Bullet1.m_xPos, Bullet1.m_yPos); 
    Bullet1.m_yPos -= 5; 
} 

在那裏我說Bullet1.Projectile->CopyTo,我得到的錯誤Bullet1沒有被定義,但我已經在上面的if塊中實例化它。我究竟做錯了什麼?嘗試訪問對象的成員數據 - 即使在啓動後也未定義,出了什麼問題?

+1

不,我們不這樣做,Bulltet1是不是在第二塊範圍。 –

回答

2

您的Bullet1在到達第9行時已超出範圍。您需要將Bullet1變量聲明移到if語句之外。

但是,如果您需要將Bullet1初始化,我完全沒有看到將第二個if聲明放在第一位。所以,

if(GetKeyState(VK_SPACE) && Player1.canFire == true) 
{ 
    Player1.canFire = false; 
    Player1.hasFired = true; 
    Bullet Bullet1((Player1.Xpos + (Player1.Skin->GetWidth()/2)), 
       Player1.Ypos - ProjectileSkin->GetHeight()); 
    Bullet1.Projectile->CopyTo(m_Screen, Bullet1.m_xPos, Bullet1.m_yPos); 
    Bullet1.m_yPos -= 5; 
} 
+0

好吧,但我只希望它在某些事情是真的時候初始化,因爲xPos只應當按下按鈕來觸發時纔會設置爲player1的位置,這樣我就可以在沒有子彈移動的情況下移動玩家本身如果你知道我的意思,那麼它在X軸上飛行。 – user1686825

+0

聲明'Bullet1'作爲指針,然後初始化它'NULL'。這樣,你可以檢查第二個'if'語句'Bullet1'是否已經初始化。 – JosephH

+0

把'Bullet * Bullet1 = NULL'放在'if'語句之外,然後把Bullet1 = new Bullet((Player1.Xpos +(Player1.Skin-> GetWidth()/ 2)),Player1.Ypos - ProjectileSkin-> GetHeight());'在第一個作用域中,然後在第二個作用域中,用另一個'if'語句'if(Bullet1){...}'圍繞代碼。不要忘了通過調用'if(Bullet1)delete Bullet1'來清除它;' – JosephH

0
Bullet Bullet1((Player1.Xpos + (Player1.Skin->GetWidth()/2)), 
        Player1.Ypos - ProjectileSkin->GetHeight()); 

你的子彈是一個局部變量。它將以}結束。可能的解決方案是不在本地創建。或者將它作爲參數發送給它們。

也有一個嚴重的錯誤在這裏:

如果

應該==

+0

噢,我沒有注意到,但是,謝謝你:) – user1686825

0

Bullet1的範圍只在IF塊(Player1.hasFired = TRUE)。如果你想在其他IF塊使用它,以及,如下外面定義它:

Bullet Bullet1((Player1.Xpos + (Player1.Skin->GetWidth()/2)), 
       Player1.Ypos - ProjectileSkin->GetHeight()); 
if(GetKeyState(VK_SPACE) && Player1.canFire == true) 
{ 
    Player1.canFire = false; 
    Player1.hasFired = true; 
} 
if(Player1.hasFired = true) 
{ 
    Bullet1.Projectile->CopyTo(m_Screen, Bullet1.m_xPos, Bullet1.m_yPos); 
    Bullet1.m_yPos -= 5; 
} 
相關問題