gusdark
Messages postés10Date d'inscriptionmercredi 19 mars 2003StatutMembreDernière intervention12 janvier 2010
-
29 oct. 2006 à 11:54
gusdark
Messages postés10Date d'inscriptionmercredi 19 mars 2003StatutMembreDernière intervention12 janvier 2010
-
30 oct. 2006 à 17:48
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.
<hr />
#include <stdlib.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#define LARGEUR_ECRAN 800
#define HAUTEUR_ECRAN 400
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;
Kleidp
Messages postés124Date d'inscriptionjeudi 5 juin 2003StatutMembreDernière intervention10 février 2008 29 oct. 2006 à 18:55
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
gusdark
Messages postés10Date d'inscriptionmercredi 19 mars 2003StatutMembreDernière intervention12 janvier 2010 30 oct. 2006 à 17:48
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 [:)]