Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ça ne blit pas...

Pourtant j'ai bien un SDL_Blit...

Sujet résolu
    18 juin 2006 à 21:18:30

    Bonjour.

    Premièrement: j'ai un problème avec mon code. Il devrais blitter un carré rouge de 10x10 a un certain endroit mais il ne blitte rien...

    Voici le code: (raccourci car il fait 350 lignes :p j'ai mis l'essentiel)
    Main.cpp

    <...>
    //Create snake--------------------------------------------------------------
        Snake snake;
        snake.setdir(-1, 0);
        //Base of program-----------------------------------------------------------
        while(continuer)
        {
            SDL_PollEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = false;
                    break;
                case SDL_KEYDOWN:
                    switch(event.key.keysym.sym)
                    {
                        case SDLK_ESCAPE:
                            continuer = false;
                            break;
                        case SDLK_UP:
                            snake.setdir(-1, 0);
                            break;
                        case SDLK_DOWN:
                            snake.setdir(1, 0);
                            break;
                        case SDLK_RIGHT:
                            snake.setdir(0, 1);
                            break;
                        case SDLK_LEFT:
                            snake.setdir(0, -1);
                            break;
                    }
                    break;
            }

            //Print diagram---------------------------------------------------------
            cerr << "Diagram" << endl;
            posVertical.x = 0;
            posHorizontal.y = 0;
            SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0, 100, 155));
            SDL_FillRect(Vertical_line, NULL, SDL_MapRGB(Vertical_line->format, 0, 0, 0));
            SDL_FillRect(Horizontal_line, NULL, SDL_MapRGB(Horizontal_line->format, 0, 0, 0));
            while(posVertical.x <= 800)
            {
                SDL_BlitSurface(Vertical_line, NULL, screen, &posVertical);

                posVertical.x += CASE;
            }
            while(posHorizontal.y <= 600)
            {
                SDL_BlitSurface(Horizontal_line, NULL, screen, &posHorizontal);

                posHorizontal.y += CASE;
            }

            //Calcul snake----------------------------------------------------------
            cerr << "Appel deplacement"<<endl;
            snake.deplacer(&screen);
            SDL_Flip(screen);
    <...>


    Classe Snake:

    class Snake
    {
    public:

        Snake();

        Snake(Uint32, int, int);

        ~Snake();

        void deplacer(SDL_Surface**);

        void setdir(int x, int y);

    private:
        int rest;
        int life;
        int score;
        SDL_Surface *carre;
        SDL_Rect rectpos;
        position Case;
        Direction dir;
    };


    Et definitioon de de deplacer et setdir:

    void Snake::deplacer(SDL_Surface **screen)
    {
        cerr << "Modif position."<<endl;
        Case.x[0] += dir.delta_x;
        Case.y[0] += dir.delta_y;
        cerr << "Set dasn SDL_Rect" << endl;
        rectpos.x = Case.x[0] * CASE;
        rectpos.y = Case.y[0] * CASE;
        cerr <<"Remplir + blit" << endl;
        SDL_FillRect(carre, NULL, SDL_MapRGB(carre->format, 255, 0, 0));
        SDL_BlitSurface(carre, NULL, (*screen), &rectpos);
    }

    void Snake::setdir(int x, int y)
    {
        dir.delta_x += x;
        dir.delta_y += y;
    }


    P.S. j'ai vérifié avec des "cerr" un peu partout. Il va dans le methode mais il ne blitte rien...
    • Partager sur Facebook
    • Partager sur Twitter
      18 juin 2006 à 21:38:06

      tu as oublier de rafraichir l'ecran je crois ...
      en tout cas je n'ai pas vu de SDL_Flip(screen)
      • Partager sur Facebook
      • Partager sur Twitter
        18 juin 2006 à 21:55:38

        J'ai juste oublié de le mettre dans ce code :p il est juste après snake.deplacer(..)

        Edit: Bon j'ai trouvé... ya une erreur dans mes calculs... X est toujours soit dasns -XX ou XX + 800 donc autrement dit: il est toujours hors écran... j'vais voir pour trouver la raison et jedit :)

        En fait mes vars n'était pas remises a 0... donc plein de valeur différentes.. :p
        • Partager sur Facebook
        • Partager sur Twitter

        Ça ne blit pas...

        × 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