[SFML] Crear array dinamico de sprites

Thropical

Buenas estoy intentando crear una nube que dispara gotas de lluvia para un juego. Utilizo SFML en Ubuntu.
El caso es que quiero crear un array en el que almacenar los sprites, para manipularlos luego solamente recorriendo el array, pero no se crearlo bien. He estado buscando pero no encuentro nada relacionado con memoria dinamica y sfml.
¿Alguien tendria alguna idea de como declarar el array, e ir introduciendo sprites nuevos al recorrerlo?

Esto es lo que "pretendo hacer" pero estoy fallando con la sintaxis

std::vector<sf::Sprite> shots(sf::Sprite(tex));

if(/*It has to rain*/){

    shots.push_back(new sf::Sprite(tex));
    sprite.setOrigin(15/2,20/2);

}
for(i=0;i<shots.size;i++){
       window.draw(shots.at(i))
}

Gracias de antemano :)

codek0rZ

Si no me equivoco, a la hora de introducir los Sprites al vector no deberías hacer new, ya que en C++ el operador new se utiliza para memoria dinámica (punteros) y lo que estas almacenando no son punteros si no objetos Sprites. Esto es sin conocer SFML de nada, más que de oidas.

Un saludo

1 respuesta
KeTo
std::vector<sf::Sprite*> shots;  // los vectores se inicializan sin el paréntesis de detrás

if(/*It has to rain*/){

    shots.push_back(new sf::Sprite(tex));
    sprite.setOrigin(15/2,20/2); // ¿esta variable de dónde sale? si quieres hacer esto tendrás que crear antes esta variable, meterla en el array y cambiar el origin

}
for(i=0;i<shots.size;i++){
       window.draw(shots.[i]); // puedes tratar los vectores como si fueran arrays a la hora de acceder a sus elementos
}

Lo que comenta #2 creo que puedes dejarlo como está ahora, pero si la función draw de sfml no acepta el puntero, sino que necesita el valor, lo único que tienes que cambiar es shots[*i] dentro de ese draw.

1

Usuarios habituales

  • KeTo
  • codek0rZ
  • Thropical

Tags