簡體   English   中英

無限數量的子彈

[英]Unlimited number of bullets

我嘗試使用SFML.NET在C#上進行射擊游戲,但是我無法想象如何使自己能夠射擊多於一顆子彈,因為現在我只有一個空子彈類的空對象,並且當玩家按下Space時鍵,此對象將鏈接到新項目符號。

所以,我有子彈類,空對象

public static Bullet bullet = null;

和條件

if (Keyboard.IsKeyPressed(Keyboard.Key.Space)) 
{
   if(bullet == null) 
    bullet = new Bullet(t, p.rect.Left, p.rect.Top, p.reverse);
}

當子彈到達牆壁或敵人的子彈對象等於空時。 問題在於在此子彈到達牆壁或敵人(並消失)之前使其能夠發射更多子彈。 我認為這不是為每個可能的小母雞制作空對象的好方法,因為那時我們可能的子彈數量有限。

我不建議創建項目符號列表,而是創建一系列項目符號。

按下鍵時,您可以向陣列添加另一個項目符號,並對陣列中的所有項目符號運行更新邏輯。

這也使您可以循環回到開始重新使用內存,而不是無限地增加列表。

例如,在您的keyPressedEvent中:

If space on keyboard is pressed
    Increment bulletCounter
    if(bulletCounter > length of bullets array)
        set bulletCounter = 0;
    Set bullets[bulletCounter] = new Bullet(parameters)

您應該研究游戲編程的基礎知識。 對於這種情況,您將使用一個包含N個項目符號的數組。

Bullet僅等於null一次,這里也不需要使用static ...刪除if(bullet == null)並替換為public static Bullet bullet = null; 帶有列表項目符號; 這樣的事情應該起作用:

    List<Bullet> bullets = new List<Bullet>();

KeyPressed事件

    if(Keyboard.IsKeyPressed(Keyboard.Key.Space))
    {
        bullets.Add(new Bullet(t, p.rect.Left, p.rect.Top, p.reverse));
    }

不要將子彈碰到牆壁時將其設置為null,而要擺脫/處理它,也許是bullets.Remove()。 保持正確無意義? 希望這能使您到達需要的地方。

編輯:通過創建數組而不是另一個人提到的列表來限制允許創建的項目符號數量實際上很聰明。 如果空格鍵被卡住怎么辦?

Bullet[] bullets = new Bullet[1000];

也許像那樣...

暫無
暫無

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

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