首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不限数量的子弹

不限数量的子弹
EN

Stack Overflow用户
提问于 2015-05-09 02:27:37
回答 3查看 291关注 0票数 1

我试着用SFML.NET在C#上制作射击游戏,但是我不能想象怎样才能射出超过一颗子弹,因为现在我只有一个空对象-- bullet类的对象,当玩家按下空格键时,这个对象就会链接到新的子弹上。

因此,我有了Bullet-class,null-object

代码语言:javascript
复制
public static Bullet bullet = null;

and条件

代码语言:javascript
复制
if (Keyboard.IsKeyPressed(Keyboard.Key.Space)) 
{
   if(bullet == null) 
    bullet = new Bullet(t, p.rect.Left, p.rect.Top, p.reverse);
}

当子弹到达墙壁或敌人的子弹对象被等同为空。问题是如何在子弹到达墙壁或敌人(然后消失)之前发射更多的子弹。我认为这不是一个好的解决方案来为每个可能的not创建null-object,因为这样我们就有了有限数量的可能的子弹头。

EN

回答 3

Stack Overflow用户

发布于 2015-05-09 02:31:12

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

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

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

例如,在您的keyPressedEvent中:

代码语言:javascript
复制
If space on keyboard is pressed
    Increment bulletCounter
    if(bulletCounter > length of bullets array)
        set bulletCounter = 0;
    Set bullets[bulletCounter] = new Bullet(parameters)
票数 5
EN

Stack Overflow用户

发布于 2015-05-09 02:30:14

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

票数 3
EN

Stack Overflow用户

发布于 2015-05-11 22:54:08

Bullet只等于null一次,这里也是静态的,不需要使用if(bullet == null),并用列表项目符号替换公共静态Bullet bullet = null;这样的代码应该可以工作:

代码语言:javascript
复制
    List<Bullet> bullets = new List<Bullet>();

KeyPressed事件

代码语言:javascript
复制
    if(Keyboard.IsKeyPressed(Keyboard.Key.Space))
    {
        bullets.Add(new Bullet(t, p.rect.Left, p.rect.Top, p.reverse));
    }

不要在子弹打到墙上时将其设置为空,而是处理掉它,也许是bullets.Remove()。保持正确没有意义吗?希望这能带你去你想去的地方。

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

代码语言:javascript
复制
Bullet[] bullets = new Bullet[1000];

也许是这样的..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30130528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档