begin process at 2012 02 10 13:11:28
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

Autre

 > 

probleme vitesse scrolling


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

probleme vitesse scrolling

dimanche 29 octobre 2006 à 11:54:52 | probleme vitesse scrolling

gusdark

bonjour ,

j'ai lu pas mal de topics sur le scrolling dans le forum, ce qui m'a permis de comprendre le principe.Mais j'ai cependant un problème que je ne me rapelle pas avoir vu chez les autres. voilà mon perso commence au milieu de la map.
si il se déplace vers la gauche au début , la map ne bouge pas , et le perso avance plutot lentement. mais s'il va a droite et qu'il dépasse le centre de l'écran , il va a toute allure , et la map commence a bouger avec lui , mais pas assez rapidement , si bien qu'au bout de 5 secondes le perso a dépassé l'ecran et on voit plus que la map défiler.
je vous montre mon code pour que vous me disiez ce qui va pas.j'ai essayé plusieurs trucs , comme SDL_Delay , mais rien a faire même si le perso va moins vite , la map va encore moins vite.

PS : j'ai aussi un probleme avec l'animation de mon perso (j'ai lu tout les topics dessus), et je l'ai implémenté dans mon code , mais des que je remplace pingoui[DEBUT] par pingouiActuel , il ne m'affiche plus le perso.Je comprend pas pourquoi... :(
merci d'avance.


#include <stdlib.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#define LARGEUR_ECRAN 800
#define HAUTEUR_ECRAN 400

int main(int argc, char *argv[])
{
    enum{DEBUT, DWALK1, DWALK2, DWALK3, DWALK4};
    int tempsPrecedent = 0, tempsActuel = 0;
    SDL_Surface *pingoui[5] = {NULL} , *map = NULL , *pingouiActuel = NULL;
    pingouiActuel = pingoui[DEBUT];
    SDL_Surface *ecran = NULL;
    SDL_Rect positionPingoui;
    SDL_Rect positionMap;
    SDL_Rect morceauMap;
    positionMap.x = 0;
    positionMap.y = 0;
    positionPingoui.x = 400;
    positionPingoui.y = 344;
    SDL_Event event;
    morceauMap.x = 0;
    morceauMap.y = 0;
    morceauMap.w = LARGEUR_ECRAN;
    morceauMap.h = HAUTEUR_ECRAN;
     int continuer = 1;

    map = IMG_Load("map.gif");
    //definition des images de l'animation
    pingoui[DEBUT] = IMG_Load("stop.png");
    pingoui[DWALK1] = IMG_Load("droite1.png");
    pingoui[DWALK2] = IMG_Load("droite2.png");
    pingoui[DWALK3] = IMG_Load("droite3.png");
    pingoui[DWALK4] = IMG_Load("droite4.png");

    SDL_Init(SDL_INIT_VIDEO);
    ecran = SDL_SetVideoMode(800,400,32,SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_FULLSCREEN);
    SDL_WM_SetCaption("Test Pingoui",NULL);

    SDL_BlitSurface(map, &morceauMap, ecran, &positionMap);//On blitte le fond
    SDL_BlitSurface(pingouiActuel, NULL, ecran, &positionPingoui);//On blitte le perso actuel
    SDL_Flip(ecran);
    SDL_EnableKeyRepeat(10,10);
    while(continuer)
    {
        SDL_PollEvent(&event);
        switch(event.type)
        {
            case SDL_QUIT:
            continuer = 0;
            break;

            case SDL_KEYDOWN:
            switch(event.key.keysym.sym)
            {
                    case SDLK_ESCAPE:
                    continuer  = 0;
                    break;

                    case SDLK_RIGHT:
                    if(positionPingoui.x < map->w)//pingoui va lentement quand il est dans la partie gauche de l'ecran au debut (0<x<map->w) et la map ne bouge pas normal.
                    {
                        //pingoui va a toute allure des qu'il a passé le centre de l'ecran et la map se deplace.
                        positionPingoui.x++;
                    }
                    if(morceauMap.x < map->w - LARGEUR_ECRAN && positionPingoui.x > 400)
                    //mais la map ne suit pas elle va beaucoup moins vite que pingoui :(
                    morceauMap.x++;
                    break;

                    case SDLK_LEFT:
                    if(positionPingoui.x > 0)
                    {
                        positionPingoui.x--;
                    }
                    if(morceauMap.x > 0)
                    morceauMap.x--;

            }
        }
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
        SDL_BlitSurface(map, &morceauMap, ecran, &positionMap);
        //si je remplace pingoui[DEBUT] par pingouiActuel , il ne m'affiche plus rien...
        SDL_BlitSurface(pingoui[DEBUT], NULL, ecran, &positionPingoui);
        SDL_Flip(ecran);
    }
}



gusdark [:)]
dimanche 29 octobre 2006 à 18:55:39 | Re : probleme vitesse scrolling

Kleidp

PingouiActuel doit etre égal à pinguoi ou &pinguoi[0]
Pour le switch ça devient vite illisible si tu inclus trop d'instructions donc utilise plutot des if
switch(var)
{
    case 0: uneInstruction; break
    case 1: uneInstruction; break
    ....

Pour le scrolling il doit y avoir surement plusieurs methodes, en voici une:

Tu mets ta map dans un buffer (bien plus grand que l'écran donc)
Ton personnage avance dans le buffer
Tu affiches une partie du buffer dans l'écran
lundi 30 octobre 2006 à 17:48:41 | Re : probleme vitesse scrolling

gusdark

merci
en fait il fallait faire ca :
SDL_Rect rel_pos;
rel_pos.x=positionPingoui.x-morceauMap.x;
rel_pos.y=positionPingoui.y-morceauMap.y;
et puis :
SDL_BlitSurface(pingouiActuel, NULL, ecran, &rel_pos);


par contre j'ai toujours un probleme avec l'animation du perso
quand je met pingouiActuel il ne m'affiche pas le perso , je comprend pas pourquoi.
pourtant je crois avoir fait tout comme il faut... :(
gusdark [:)]


Cette discussion est classée dans : ecran, map, sdl, pingoui, morceaumap


Répondre à ce message

Sujets en rapport avec ce message

SDL : comment rafraichir l'ecran? [ par smilandfly ] Bonsoir'je viens de mettre sous sdl (que je viens de decouvrir) mon awale programmé en C++ en mode texte.J'ai 2 problemes qui ne sont sans doute pas t (SDL) Affichage d'une map = plantage [ par MRick571 ] Bonjour j'essai de coder un petit moteur 2d pour afficher une map RPG mon code est constituer comme cela :CObjet||----CTile||----CSpriteJ'initialise u [SDL] Defilement de l'ecran [ par hoxid ] Ben voila je voulais savoir comment faire defiler l'ecran, avec SDL.J'y arrive, mais quand le perso arrive au milieu, il bloque. De plus, quand il va SDL et MFC [ par milhandril ] Je suis sur un projet de "rpgmaker", et l'une des sous taches consiste a créer un éditeur de map. Le début de mon prog fonctionne avec les MFC mais j' Lecture fichier impossible avec SDL [ par CCJ ] Hello.j'utilise SDL pour me faire un petit jeu 2D. Seulement je recontre actuellement un petit probleme. Il semblerait en effet qu'il bloque l'utilisa SDL [ par lushkah ] bjr, j'ai un pb avec la SDL  en C, je débutes et j'ai passer la nuit a essayer de faire une disparition en fondu, j'essayes de programmer un jeu de da Arguments et pointeur. [ par moumouteb ] Bonjours. Voici le bout de code qui pose problème:int Jeu (*ecran) {     ecran = SDL_SetVideoMode(Fenetre.x, Fenetre.y, 32, SDL_HWSURFACE | SDL_DOUBLE Probleme en prog SDL.h [ par sieuzac ] Salut a tous.Je voudrez savoir pourquoi mon va plus vite au TEMP 2 qu'au TEMP 1#include #include #include #include /* surface qui sert à l'affich SDL porbleme [ par fahdovski ] IL Y'A EXECUTION MAIS LE PC PLANTE IL DEVIENT TRES LENT, MAIS POURQUOI??????jE TRAVAILLE SUR CODE::BLOCKS SOUS LINUXAVANT CA MARCHAIS IMPEC QUESQUI C'


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,437 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales