1

我尝试使用 SFML.NET 在 C# 上制作射击游戏,但我无法想象如何制作超过 1 颗子弹的射击能力,因为现在我只有一个子弹类的空对象,并且当玩家按下空格键时关键此对象获取到新项目符号的链接。

所以,我有子弹类,空对象

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

当子弹到达墙壁或敌人的子弹对象被等同于 null。问题是要在这颗子弹到达墙壁或敌人(并消失)之前射出更多子弹。我认为这不是为每个可能的小鸡制作空对象的好解决方案,因为那样我们可能的子弹数量有限。

4

3 回答 3

5

我不建议创建一个项目符号列表,而是创建一个项目符号数组。

按下该键时,您可以将另一个项目符号添加到数组并在数组中的所有项目符号上运行更新逻辑。

这也将允许您循环回到开头以重用内存,而不是无限增长列表。

因此,例如在您的 keyPressedEvent 中:

If space on keyboard is pressed
    Increment bulletCounter
    if(bulletCounter > length of bullets array)
        set bulletCounter = 0;
    Set bullets[bulletCounter] = new Bullet(parameters)
于 2015-05-08T18:31:11.893 回答
3

您应该研究游戏编程的基础知识。对于这种情况,您将使用一个数组来包含 N 个项目符号。

于 2015-05-08T18:30:14.287 回答
0

Bullet 在这里只等于 null 一次,这里也不需要使用 static...删除 if(bullet == null) 并替换 public static Bullet bullet = null; 带有列表项目符号;像这样的东西应该工作:

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

按键事件

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

当它撞到墙上时,不要将子弹设置为空,而是摆脱/处置它,也许是子弹.Remove()。保持正确没有意义?希望这能让你到达你需要去的地方。

编辑:通过创建一个数组而不是另一个人提到的列表来限制允许创建的项目符号数量实际上可能是明智的。如果空格键卡住了怎么办?

Bullet[] bullets = new Bullet[1000];

也许是这样的...

于 2015-05-11T14:54:08.353 回答