PDA

Voir la version complète : Problèmes de déplacements ...


CSoldier
25/08/2005, 15h54
Bonjour,

je travail en ce moment sur un ptit moteur 2D à but de perfectionnement sur la SDL mais aussi pour plus tard créer un CivLike. Bon, en ce moment je travail sur le déplacement de la carte dans la zone de jeu mais le problème, c'est que lorsque je descend la souris, la carte devrait remonter donc passer en mosition Y négative mais ca ne veut pas le faire, ca repasse directement en position Y = 0 !

Je ne vois pas comment résoudre se problème. Voici mon code mais je doute que le problème vienne de mon code car j'ai beau tout tester y'a rien a faire:


void CS2DENGINE_MoveMap (SDL_MouseMotionEvent *p_event,
Map_s *p_map,
SDL_Surface *p_screen)
{
signed short mouse_x, mouse_y;


/* Si aucun evennement n'est gere, on sort de la fonction */
if (!p_event) return;


if (p_event->type == SDL_MOUSEMOTION)
{
if (p_event->state & SDL_BUTTON (SDL_BUTTON_LEFT))
{
/* Stockage de la position courante de la souris pour
la comparer avec les anciennes coordonnees */
mouse_x = p_event->x;
mouse_y = p_event->y;


/* Gestion du deplacement horizontal */
if (mouse_x > old_mouse_x)
{
p_map->map_rect.x -= DEF_TILE_WIDTH / 2;
}
else if (mouse_x < old_mouse_x)
{
p_map->map_rect.x += DEF_TILE_WIDTH / 2;
}

/* Gestion du deplacement vertical */
if (mouse_y > old_mouse_y)
{
p_map->map_rect.y -= DEF_TILE_HEIGHT / 2;
}
else if (mouse_y < old_mouse_y)
{
p_map->map_rect.y += DEF_TILE_HEIGHT / 2;

if (p_map->map_rect.y > 0)
{
p_map->map_rect.y = 0;
}
}
}
}


/* Stockage des anciennes coordonnees de la souris */
old_mouse_x = mouse_x;
old_mouse_y = mouse_y;
}


Merci d'avance pour vos illuminations :00000014:

deathangel
25/08/2005, 16h06
c'est qu'une petite idée, mais vérifie l'orientation de ton axe des Y, à première vue ca ne peut être que ca, et c'est souvent source d'erreur

ffomnislas
25/08/2005, 16h14
j'ai l'impression que tu a une erreur ici:
p_map->map_rect.y -= DEF_TILE_HEIGHT / 2;
c'est
p_map->map_rect.y += DEF_TILE_HEIGHT / 2;
et dans l'autre cas c'est -.

C'est d'ailleurs ce que deathangel souligne je crois.

CSoldier
25/08/2005, 17h51
Non cela ne change en rien mon problème, je savais que ca ne venais pas de là et l'odre que vous voyez est voulu en plus. Le but de cet ordre est de faire monter la carte (découvrir ce qui se trouve plus bas) en faisant descendre la souris, idem pour l'axe des X.

CSoldier
25/08/2005, 18h07
c'est qu'une petite idée, mais vérifie l'orientation de ton axe des Y, à première vue ca ne peut être que ca, et c'est souvent source d'erreur
Qu'est-ce que tu entend par "orientation de l'axe Y" ?

tof
25/08/2005, 18h12
Que +1 pixel dans l'axe Y peut vouloir signifier 1 pixel vers le haut ou 1 vers le bas suivant la bibliothèque.

CSoldier
25/08/2005, 18h15
Que +1 pixel dans l'axe Y peut vouloir signifier 1 pixel vers le haut ou 1 vers le bas suivant la bibliothèque.
Ok ! Mais là en fait, j'ai les mouvements souhaités en fait, sauf que dès que je passe en négatif, il les recales automatiquement à la valeur 0, ce que je ne veut pas !

ganlhi
25/08/2005, 19h14
comment ça en négatif ? il n'y a pas de Y négatif : ça commence à 0 en haut de l'écran !

deathangel
25/08/2005, 19h15
justement, dans ton code tu as un joli


if (p_map->map_rect.y > 0)
{
p_map->map_rect.y = 0;
}


ce qui fait que si tes axes y sont inversés, il se peut que tous tes calculs le soient aussi et donc que ce soit cette fonction qui soit effectivement appelée

CSoldier
25/08/2005, 19h25
comment ça en négatif ? il n'y a pas de Y négatif : ça commence à 0 en haut de l'écran !
Certes mais si je fait monter la carte, ca passe en negatif obligatoirement car si je la fait descendre bas on additionne pour definir la nouvelle position

CSoldier
25/08/2005, 19h27
justement, dans ton code tu as un joli


if (p_map->map_rect.y > 0)
{
p_map->map_rect.y = 0;
}


ce qui fait que si tes axes y sont inversés, il se peut que tous tes calculs le soient aussi et donc que ce soit cette fonction qui soit effectivement appelée
Non, non et non ... ca c'est pour eviter que la carte ne descende plus bas, pour imiter un peu le pole nord et pole sud ... vous avez jamais joué a Civilization ? Dans ce cas là je peut pas vous expliqué plus, tout est là a part peut etre vous faire des schemas

CSoldier
25/08/2005, 20h14
http://www.planete-c.com/captures/schema_001.jpg

J'espere qu'avec ca ca ira mieux ... de ce fait, je peut expliquer que dans le sene inverse, si la carte descend plus bas que Y = 0 donc forcement supérieur à 0 hé bien on recale à 0 ... dans ce cas c'est le pole nord donc on peut pas voir plus haut ! Ceci est un mouvement de carte digne d'un Civilization 1 !

Donc, en voyant cette image, vous pouvez vous douter que lorsque la souris descend, si la carte doit monter elle passe obligatoirement en nombre negatifs dans l'axe Y, c'est là qu'est le problème ... sans meme rien faire dans le code pour que ca fasse cet effet, bah ca le fait, ca recale automatiquement Y à 0 si je monte la carte plus haut !

ganlhi
25/08/2005, 20h31
C'est ce que je dis : SDL ne fonctionne qu'avec des nombres positifs. Donc il doit y avoir un systeme de vérification des coordonnées...

CSoldier
25/08/2005, 20h36
C'est ce que je dis : SDL ne fonctionne qu'avec des nombres positifs. Donc il doit y avoir un systeme de vérification des coordonnées...
Hé bien en fait c'est ce que j'ai pu remarqué mais viens de me donner une petite astuce qui consiste a transferer les coordonnées de mon SDL_Rect vers un SDL_Rect temporaire juste pour le blit et ca a l'air de fonctionner. Sinon a part dessiner la carte au fur et a mesure des deplacements ... mais là je sais pas si c'est pas un peu lourd comme methode en fait.