Неограниченное количество пуль

Я пытаюсь сделать шутер на C# с SFML.NET, но я не представляю, как сделать возможность стрелять более чем из одной пули, потому что теперь у меня есть только один нулевой объект класса пули, и когда игрок нажимает пробел ключ этот объект получает ссылку на новый маркер.

Итак, у меня есть Bullet-класс, нуль-объект

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

Когда пуля достигает стены или объект пули противника приравнивается к нулю. Проблема заключается в том, чтобы заставить стрелять больше пуль, прежде чем эта пуля достигнет стены или врага (и исчезнет). Я думаю, что это не очень хорошее решение для создания нулевых объектов для каждой возможной пули, потому что тогда у нас ограниченное количество возможных пуль.

3 ответа

Я бы не предложил создавать список пуль, а скорее массив патронов.

Когда клавиша нажата, вы можете добавить еще одну пулю в массив и запустить логику обновления для всех пуль в массиве.

Это также позволит вам вернуться к началу, чтобы повторно использовать память вместо бесконечного увеличения списка.

Так, например, в вашем 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 равняется нулю только один раз, и здесь не нужно использовать статические значения... удалите 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));
    }

Вместо установки пули в ноль, когда она попадает в стену, избавьтесь от / избавьтесь от нее, возможно, от пуль. Удалите (). Нет смысла держать это правильно? Надеюсь, это приведет вас туда, куда вам нужно.

Изменить: на самом деле может быть разумно ограничить количество пуль, которые могут быть созданы путем создания массива вместо списка, как упомянул другой человек. Что делать, если клавиша пробела застряла?

Bullet[] bullets = new Bullet[1000];

Может быть, что-то подобное...

Другие вопросы по тегам