Создайте класс для хранения снаряда со всей необходимой информацией, например:
struct Projectile
{
Vector2 position;
Vector2 velocity;
shared_ptr<Image> graphic;
Time time_until_my_destruction;
bool dead;
void update(Time time_delta) {
if(!dead) {
position += velocity * time_delta;
time_until_my_destruction -= time_delta;
if(time_until_my_destruction < 0.0) dead = true;
}
}
void draw(DrawDest & dest) const {
graphic->draw(dest, position);
}
bool checkCollision(const GameObject & object) const {
return object.area().contains(position);
}
};
Этот класс, очевидно, не завершен, вы, вероятно, захотите внести коррективы в уровни доступа и написать некоторые конструкторы и другие вещи, но он должен дать вам основную идею.
Сделать контейнер из них. Когда корабль выстрелит, положите один в контейнер. Каждый кадр, вызывать обновление, рисовать, проверять, мертв ли снаряд и проверять наличие столкновений с игровыми объектами. Если происходит столкновение, нанесите урон или что-то еще. Если объект мертв, выньте его из контейнера.