我试着用SFML.NET在C#上制作射击游戏,但是我不能想象怎样才能射出超过一颗子弹,因为现在我只有一个空对象-- bullet类的对象,当玩家按下空格键时,这个对象就会链接到新的子弹上。
因此,我有了Bullet-class,null-object
public static Bullet bullet = null;and条件
if (Keyboard.IsKeyPressed(Keyboard.Key.Space))
{
if(bullet == null)
bullet = new Bullet(t, p.rect.Left, p.rect.Top, p.reverse);
}当子弹到达墙壁或敌人的子弹对象被等同为空。问题是如何在子弹到达墙壁或敌人(然后消失)之前发射更多的子弹。我认为这不是一个好的解决方案来为每个可能的not创建null-object,因为这样我们就有了有限数量的可能的子弹头。
发布于 2015-05-09 02:31:12
我不建议创建一个项目列表,而是一个项目数组。
当按下该键时,您可以向数组中添加另一个项目符号,并对该数组中的所有项目符号运行更新逻辑。
这也将允许您循环回到开始,以重用内存,而不是无限增加列表。
例如,在您的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-09 02:30:14
你应该了解一下游戏编程的基础知识。对于这种情况,您将使用一个数组来包含N个项目符号。
发布于 2015-05-11 22:54:08
Bullet只等于null一次,这里也是静态的,不需要使用if(bullet == null),并用列表项目符号替换公共静态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));
}不要在子弹打到墙上时将其设置为空,而是处理掉它,也许是bullets.Remove()。保持正确没有意义吗?希望这能带你去你想去的地方。
编辑:实际上,通过创建数组而不是另一个人提到的列表来限制允许创建的项目符号的数量可能是明智的。如果空格键卡住了怎么办?
Bullet[] bullets = new Bullet[1000];也许是这样的..。
https://stackoverflow.com/questions/30130528
复制相似问题