es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Vectores C++ no funcionando con C++ SDL_Surface

#include
#include
#include

#include
#include

const int WIDTH = 800;
const int HEIGHT = 640;

int main()
{
std::vector<sdl_surface*> *devImages = {};
SDL_Surface *windowSurface = NULL;
SDL_Event windowEvent;

SDL_Init(SDL_INIT_EVERYTHING);

SDL_Window *window = SDL_CreateWindow("Hello SDL World", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, WIDTH, HEIGHT, SDL_WINDOW_ALLOW_HIGHDPI);
windowSurface = SDL_GetWindowSurface(window);

if(window == NULL){
    std::cout<<"Could not create window: "<<sdl_geterror()<< std::endl;="" return="" 1;="" }="" if(!(img_init(img_init_png)="" &&="" img_init_png)){="" std::cout<<"could="" not="" create="" window:=""></sdl_geterror()<<><img_geterror()<< std::endl;="" return="" 1;="" }="" sdl_surface="" *img1="IMG_Load(&quot;Test.png&quot;);" sdl_surface="" *test="IMG_Load(&quot;Hi.png&quot;);" sdl_surface="" *f="IMG_Load(&quot;F.png&quot;);" auto="" it="*devImages-">insert(devImages->begin(), 3);
devImages->insert(it, 2);

//      devImages->emplace_back(test);
//      devImages->emplace_back(f);

while(true)
{
    if(SDL_PollEvent(&windowEvent) && SDL_QUIT == windowEvent.type)
        break;

    //SDL_BlitSurface(imageSurface, NULL, windowSurface, NULL);
    for(auto item: *devImages){
        SDL_BlitSurface(&item, NULL, windowSurface, NULL);
    }
    SDL_UpdateWindowSurface(window);
}

//SDL_FreeSurface(imageSurface);
//dimageSurface = NULL;
windowSurface = NULL;

SDL_DestroyWindow(window);
SDL_Quit();

return EXIT_SUCCESS;

}</img_geterror()<<></sdl_surface*>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema con el código actual es que está intentando iterar a través de un puntero a un vector, el cual no está inicializado correctamente. Para iterar a través del vector, es mejor inicializarlo como un vector normal en lugar de un puntero, y utilizar push_back() para añadir las imágenes al vector.

    Entonces, el código actualizado para inicializar e iterar a través del vector sería:

    std::vector<sdl_surface*> devImages;
    devImages.push_back(img1);
    devImages.push_back(test);
    devImages.push_back(f);
    
    while(true)
    {
        if(SDL_PollEvent(&windowEvent) && SDL_QUIT == windowEvent.type)
            break;
    
        for(auto item: devImages){
            SDL_BlitSurface(item, NULL, windowSurface, NULL);
        }
        SDL_UpdateWindowSurface(window);
    }
    

    Aquí, el vector se declara como std::vector<sdl_surface*> devImages, que es un vector normal de punteros a objetos SDL_Surface. Luego, las imágenes se añaden al vector utilizando push_back(). Finalmente, en el bucle de renderizado, se itera a través del vector utilizando un bucle de rango, y se renderizan las imágenes utilizando SDL_BlitSurface().</sdl_surface></sdl_surface>

Comments are closed.