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 [:)]