繁体   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