我尝试使用sfml.net在C#上制作射击游戏,但是我无法想象如何使射击能力超过1个子弹,因为现在我只有一个无效 - 子级对象,当玩家按Space键时,此对象将链接到新子弹。
所以,我有子级,null-object
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);
}
当子弹到达墙壁或敌方子弹时,物体将等同于空。问题是要在此子弹到达墙壁或敌人(并消失)之前提高射击更多子弹的能力。我认为这不是为每种可能的毛发制作无效目标的好解决方案,因为那样的是我们可能的子弹量有限。
我不建议创建子弹列表,而是一系列子弹。
按下键时,您可以在数组中添加另一个子弹并在数组中的所有子弹上运行更新逻辑。
这还可以使您循环回到开始重复使用内存,而不是无限地生长列表。
因此,在您的KePressedevent中:
If space on keyboard is pressed
Increment bulletCounter
if(bulletCounter > length of bullets array)
set bulletCounter = 0;
Set bullets[bulletCounter] = new Bullet(parameters)
您应该研究游戏编程的基础知识。对于这种情况,您将使用数组包含n个子弹数。
子弹仅等于null一次,此处也不需要在此处使用静态...删除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));
}
,而不是将子弹撞到墙壁时将子弹设置为无效,而是删除/处置它,也许是子弹。保持正确的意义吗?希望这能把您带到您需要去的地方。
编辑:实际上,限制通过创建数组而不是作为另一个人提到的列表创建的子弹数的数量实际上很聪明。如果太空栏钥匙卡住了怎么办?
Bullet[] bullets = new Bullet[1000];
也许是这样...