IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

[C] Comment faire un scrolling ? {SDL}


Sujet :

SDL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 106
    Points : 57
    Points
    57
    Par défaut [C] Comment faire un scrolling ? {SDL}
    Bonjour, j'aimerais pouvoir faire sur mon mini-jeux, un scrolling en SDL. Mais, je ne sais pas comment faire.
    Pouvez me donnez la marche à suivre ?

    Sinon.... (autant en profiter)

    J'ai quelque soucis avec mon jeux. Quand je déplace Mario, il se déplace lentement. Pourtant, j'ai bien mis le SDL_EnableKeyRepeat à (10,10).... comme sur les tutoriels, mais il se déplace comme un vieux lol


    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
     
    #include "constant.h"
     
     
    int main(int argc, char *argv[])
    { 
    	SDL_Surface *ecran = NULL, *image_de_fond = NULL, *Sol = NULL;
        SDL_Surface *mario[4] = {NULL}; // 4 surfaces pour chacune des directions de Mario
        SDL_Surface *marioActuel = NULL;
       SDL_Rect positionFond, positionMario, positionSol;
     
      /*Pour le fond du jeu */
     
    positionFond.x = 0;
    positionFond.y = 0;
     
     /* Position de Mario sur la carte */
     
    positionMario.x = 1;
    positionMario.y = 410;
     
    /* Position du sol sur la carte*/
     
    positionSol.x = 1;
    positionSol.y = 442;
     
    SDL_Event event;
    int continuer = 1;
     
        SDL_Init(SDL_INIT_VIDEO);
     
        ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE);
        SDL_WM_SetCaption("Deplacer Mario sur un ecran blanc !", NULL);
     
        /* Chargement des images */
        mario[BAS] = IMG_Load("mario_bas.gif");
        mario[GAUCHE] = IMG_Load("mario_gauche.gif");
        mario[HAUT] = IMG_Load("mario_haut.gif");
        mario[DROITE] = IMG_Load("mario_droite.gif");
        marioActuel = mario[DROITE]; // Mario sera dirigé vers la droite au départ
     
    SDL_EnableKeyRepeat(10, 10);
     
        while (continuer)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
                    break;
                case SDL_KEYDOWN:
                    switch(event.key.keysym.sym)
                    {
                        case SDLK_UP: // Flèche haut (sauter)
                            marioActuel = mario[HAUT];
     
                            break;
                        case SDLK_RIGHT: // Flèche droite (avancer vers la droite)
                            marioActuel = mario[DROITE];
                            positionMario.x++;
                            break;
                        case SDLK_LEFT: // Flèche gauche (avancer vers la gauche)
                            marioActuel = mario[GAUCHE];
                            positionMario.x--;
                            break;
                    }
                    break;
            }
     
            SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 128, 128, 128)); /* On efface l'écran */
     
             /* Mise en place du fond */
       image_de_fond = IMG_Load("fond.png");
       SDL_BlitSurface(image_de_fond, NULL, ecran, &positionFond);
     
            SDL_BlitSurface(marioActuel, NULL, ecran, &positionMario); /* On place Mario à sa nouvelle position */
     
            Sol = IMG_Load("mur_sol.png");
        SDL_BlitSurface(Sol, NULL, ecran, &positionSol);
     
            SDL_Flip(ecran); /* On met à jour l'affichage */
        }
     
        SDL_FreeSurface(marioActuel);
        SDL_FreeSurface(mario[HAUT]);
        SDL_FreeSurface(mario[BAS]);
        SDL_FreeSurface(mario[DROITE]);
        SDL_FreeSurface(mario[GAUCHE]);
        SDL_Quit();
    }


    Est aussi quand, on reste appuyé sur la touche, Mario s'arrête puis repars, s'arrête puis repars,etc. Pouvez m'aider à corriger ces erreurs ?
    Je pense que c'est un problème de mémoire, mais comment y remédier ?

    Merci.

  2. #2
    Rédacteur

    Avatar de loka
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    2 672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 672
    Points : 5 509
    Points
    5 509

  3. #3
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 076
    Points : 2 327
    Points
    2 327
    Par défaut
    Je n'aurais pas mieux dit ...

    L'un des gros désavantage au début, c'est qu'ils sont rédigé en C++ et cela désoriente au début. Néanmoins, il est logique qu'il soit rédigé ainsi car la pratique courante est plus au C++ qu'au C.
    Mais il suffit de persévérer pour s'apercevoir qu'en réalité, on peut tout a fais comprendre.
    Je te conseil plus que vivement de lire ces tutos ainsi que tout les autres tutoriels C++ malgré le fait qu'ils peuvent etre "repoussant" pour ceux qui ne sont pas habituer au C++.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 106
    Points : 57
    Points
    57
    Par défaut
    Merci, mais cela fait plusieurs jours que j'essaie de comprendre le tutoriel.
    Il n' y aurait pas un tutoriel sur les scrolling ?

  5. #5
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 076
    Points : 2 327
    Points
    2 327
    Par défaut
    Salut,

    Effectivement, les tutos de développez sont plutôt difficile... si tu veux faire un scrolling, tu dois d'abord maitriser le concept de camera et en réaliser une.
    Si tu ne sais pas comment faire, regarde le tuto de développez (je sais que je suis chiant avec ces tuto mais honnêtement, c'est le meilleur moyen car ils sont tout de même moins difficile que la doc de la SDL qui se révélera plus indispensable pour toi plus tard. Alors autant plonger une bonne fois pour toute dans la difficulté y'a que comme ça qu'on progresse.
    Sinon, regarde aussi ce lien qui devrait t'éclairer un peu sur SDL_BlitSurface :
    http://www.gnurou.org/files/images/S...g4.preview.png

    voila, donne moi ton niveau afin que je puisse te donner des information plus juste.
    Sinon, rien ne t'empêche de te pencher toi même sur le probleme plutôt que de demander quelque chose de tout fait si tu maitrise bien SDL_BlitSurface et la camera.

    Ne vois aucune agression de ma part s'il te plait, ce n'est pas mon intention.

    Bonne chance

  6. #6
    Rédacteur

    Avatar de loka
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    2 672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 672
    Points : 5 509
    Points
    5 509
    Par défaut
    Citation Envoyé par Moxostoma Voir le message
    Merci, mais cela fait plusieurs jours que j'essaie de comprendre le tutoriel.
    Il n' y aurait pas un tutoriel sur les scrolling ?
    Qu'est ce que tu ne comprends pas ? As tu suivi les tutoriels depuis le début ?
    Ces tutoriels sont destinés aux débutants et donc sont accéssibles normalement à tous... s'il y a donc quelque chose que tu ne comprends pas, je suis intéressé afin de les améliorer.

    Je t'ai donné un lien vers un tutoriel sur les scrolling aussi...

  7. #7
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 352
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 352
    Points : 20 359
    Points
    20 359
    Par défaut
    euuh je veux bien mais il y a des gens qui se donnent la peine de faire des tutoriels sur Developpez.

    Ces tutoriels sont là pour la base à titre d'apprentissage pour les débutants après c'est à toi de faire l'effort de réfléchir, d'avoir l'esprit logique pour faire ton jeu.

    Les tutoriels SDL de Loka par exemple sont là pour donner des bases.

    Quand j'ai commencé à programmer des jeux j'ai tout appris par moi-même, les tutoriels sur Internet il y en avait pas.

    Quand j'ai commencé,à l'époque Microsoft avait sorti son SDK Games l'ancêtre de Direct X puis c'était DirectDraw 2 ou quelque chose comme cela et évidemment SDL n'existait pas..
    Et si tu voulais programmer le SDK Games et les premières versions de DirectDraw ( sur quoi s'appuie SDL sous Windows ) tu aurais pleuré tellement c'était compliqué et atroce à programmer..
    Mais ceci est une autre histoire

  8. #8
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 352
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 352
    Points : 20 359
    Points
    20 359
    Par défaut
    Citation Envoyé par Moxostoma Voir le message
    \Je pense que c'est un problème de mémoire, mais comment y remédier ?
    Ce n'est pas du tout un problème mémoire c'est que ton programme est mal conçu.
    1-grosse erreur: dans le while(continuer) tu recharges à chaque fois les bitmaps de décor mur_sol.png et fond.png.
    Imagines un jeu complet qui fait plusieurs megaoctets de ressources en images si tu fais cela et que tu recharges toutes tes bitmaps dans une boucle infinie je ne te dis pas la baisse significative des performances..
    l'accès au disque dur c'est parmi les choses les plus lentes dans un système informatique..
    donc les bitmaps du jeu il faut les charger au début pas pendant l'exécution.

    2-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SDL_BlitSurface(image_de_fond, NULL, ecran, &positionFond);
    positionFond avec le code donné semble rester statique et n'évolue pas.
    Comment veux-tu faire un scrolling ?

    Selon ta résolution d'écran ( en plein écran ) ou bien les dimensions de ta fenêtre ( donc ici 640*480) il faut que tu fasses évoluer la surface visible du jeu ( viewport en anglais ).
    Donc par exemple si tu appuies sur la touche flêche droite du clavier , il faut calculer positionFond de type SDL_Rect en fonction de la zone visible.
    En anglais on appelle cela un clipping

Discussions similaires

  1. Comment faire un scroll depuis n'importe ou
    Par epiouf dans le forum Windows Mobile
    Réponses: 1
    Dernier message: 30/07/2010, 11h47
  2. Comment faire un scrolling?
    Par bogoss91 dans le forum SDL
    Réponses: 7
    Dernier message: 02/08/2007, 15h39
  3. [openGL/SDL] InputBox, comment faire?
    Par Naelhem dans le forum OpenGL
    Réponses: 4
    Dernier message: 22/10/2006, 01h01
  4. Comment faire un scroll de texte...
    Par pointer dans le forum Langage
    Réponses: 17
    Dernier message: 17/02/2006, 12h19
  5. Comment faire fonctionner une scroll bar ???
    Par toto4650 dans le forum MFC
    Réponses: 10
    Dernier message: 18/07/2005, 17h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo