Partage
  • Partager sur Facebook
  • Partager sur Twitter

SDL_Image

    9 juillet 2019 à 1:23:43

    Bonjour,

    je n'arrive pas à afficher mon image "image4.png"

    Voici Game.cpp

    #include "Game.h"
    #include <SDL.h>
    #include <iostream>
    #include <SDL_image.h>
    
    Game::Game()
    {
    
    }
    
    bool Game::init(const char* windowTitle, int xpos, int ypos, int width, int height, bool fullscreen)
    {
        if(SDL_Init(SDL_INIT_EVERYTHING)==0)
        {
    
            int flags = 0;
            if(fullscreen)
            {
            flags = SDL_WINDOW_FULLSCREEN;
            }
    
            std::cout<<"SDL initialisee avec succes";
            window = SDL_CreateWindow(windowTitle, xpos, ypos, width, height, flags);
            if(window!=0)
            {
                renderer=SDL_CreateRenderer(window, -1, 0);
    
                if(renderer!=0)
                {
                    SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
                }
                else
                {
                    std::cout<<"could not create renderer";
                    return false;
                }
            }
            else
            {
                std::cout<<"could not create window";
                return false;
            }
        }
        else
        {
            std::cout<<"could not initialise SDL subsystems";
            return false;
        }
        m_bRunning = true;
    
        SDL_Surface* pTempSurface = IMG_Load("assets/image4.png");
            m_pTexture = SDL_CreateTextureFromSurface(renderer, pTempSurface);
            SDL_FreeSurface(pTempSurface);
            m_sourceRectangle.w = 400;
            m_sourceRectangle.h = 400;
            m_destinationRectangle.x = m_sourceRectangle.x = 0;
            m_destinationRectangle.y = m_sourceRectangle.y = 0;
            m_destinationRectangle.w = m_sourceRectangle.w;
            m_destinationRectangle.h = m_sourceRectangle.h;
    
    
    
        return true;
    }
    
    void Game::render()
    {
    SDL_RenderClear(renderer); // clear the renderer to
    SDL_RenderCopy(renderer, m_pTexture, 0, 0);
    SDL_RenderPresent(renderer); // draw to the screen
    
    }
    
    void Game::clean()
    {
    std::cout << "cleaning game\n";
    SDL_DestroyWindow(window);
    SDL_DestroyRenderer(renderer);
    SDL_Quit();
    }
    
    void Game::update()
    {
    
    }
    
    void Game::handleEvents()
    {
        SDL_Event event;
        if(SDL_PollEvent(&event))
        {
        switch (event.type)
        {
        case SDL_QUIT:
        m_bRunning = false;
        break;
        default:
        break;
        }
        }
    }

    Game.h

    #ifndef __Game__
    #define __Game__
    
    #include <SDL.h>
    #include <SDL_image.h>
    
    class Game
    {
        public:
        Game();
        ~Game();
        // simply set the running variable to true
        bool init(const char* windowTitle, int xpos, int ypos, int width, int height, bool fullscreen);
        void render();
        void update();
        void handleEvents();
        void clean();
        // a function to access the private running variable
        bool running() { return m_bRunning; }
    
        private:
    
        SDL_Window* window;
        SDL_Renderer* renderer;
        bool m_bRunning;
        SDL_Texture* m_pTexture;
        SDL_Rect m_sourceRectangle;
        SDL_Rect m_destinationRectangle;
    };
    
    #endif
    

    main.cpp

    #include <SDL.h>
    #include "Game.h"
    #include <SDL_image.h>
    
    Game* game = 0;
    
    int main(int argc, char* argv[])
    {
    
       game = new Game();
       game->init("Chapter 1", 0, 0, 640, 480, false);
       while(game->running())
       {
       game->handleEvents();
       game->update();
       game->render();
       }
       game->clean();
       return 0;
    
    }
    

    l'image est chargée via la fonction IMG_Load dans Game.cpp



    • Partager sur Facebook
    • Partager sur Twitter
      9 juillet 2019 à 12:02:20

      Salut,

      Tu ne fais aucune vérification, le chargement n'est peut-être pas réussi, la création de la texture a peut-être échoué (note d'ailleurs l'existence de IMG_LoadTexture).

      De plus, pour bien utiliser la SDL en C++, il te faut créer un wrapper pour tes ressources pour être conforme au RAII. Tu trouveras certainement certains exemples sur Github. Renseigne toi sur les pointeurs intelligents et tout ce qui va avec. Ligne 5 de ton main, pourquoi utiliser 0 ?

      • Partager sur Facebook
      • Partager sur Twitter
      Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs

      SDL_Image

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown