cs_jeremy0189
Messages postés4Date d'inscriptionjeudi 21 février 2008StatutMembreDernière intervention24 février 2008
-
22 févr. 2008 à 15:09
SnOOpss
Messages postés570Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 5 décembre 2013
-
25 févr. 2008 à 17:11
Bjr tout le monde,je doit rendre ma pPTI pour mercredi prochain mais je suis un debutant en sdl et j'ai donc un probleme, voici mn code que le main.cpp(ci-dessous), je voudrais faire deplacer ma voiture avec rotation grace aux fleches du clavier mais je n'y arrive pas, le code ou sa bloke est en rouge je c il doit manquer 5 à 10 ligne mais impossible à trouver j'ai tout essayer mais la voiture fait n'importe quoi ...Quelqu'un pourrait t-il maider en me donnant le code necessaire ? Je vous en remercie d'avance..
<hr />
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_rotozoom.h>
#include "Implementation.h"#define TEMPS 15 // Le temps qu'il y a entre chaque augmentation de l'angle.
int main(int argc, char *argv[])
{
SDL_Surface *ecran = NULL;
// circuit devant l'ecran noir
SDL_BlitSurface(background,NULL,ecran,&positfond);
//Afficher Personnage et enleve les couleur contour
SDL_BlitSurface(perso,NULL,ecran,&persofond);
SDL_SetColorKey(perso,SDL_SRCCOLORKEY,SDL_MapRGB(perso->format,94,66,41));
//On affiche la rotation de la surface image.
SDL_SetColorKey(tabvoit[0],SDL_SRCCOLORKEY,SDL_MapRGB(tabvoit[0]->format,94,66,41));
rotation = rotozoomSurface(tabvoit[0], angle, 1.0, 1);
SDL_SetColorKey(rotation,SDL_SRCCOLORKEY,SDL_MapRGB(rotation->format,0,0,0));
SDL_BlitSurface(rotation , NULL, ecran, &voitfond);
SnOOpss
Messages postés570Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 5 décembre 2013 22 févr. 2008 à 17:13
Deja il a des trucs bizarres et inutiles, pourquoi tu definis 2 variable qui ont pour nom "angle" ? Y'a forcement un moment ou l'une "prend le dessus" sur l'autre.
Essaye plutot
double angle2=angle*(3.1415/180.0);
dpointx+=10*cos(angle2);
dpointy+=10*sin(angle2);
Si dpointx et dpointy sont les coordonnées de ton perso a quoi servent pointx et pointy surtout que d'apres ce que je voit seul voitfond.x et voitfond.y servent.
cs_jeremy0189
Messages postés4Date d'inscriptionjeudi 21 février 2008StatutMembreDernière intervention24 février 2008 22 févr. 2008 à 17:54
Merci pour ton aide, voila donc se que j'ai fais mais sa ne marche toujours pas. la direction se fait bien en bas, a gauche, a droite mais pas en haut et aucune rotation n'est effectué dans n'importe quel sens la voiture reste droite... Est ce que la partie en jaune est encore utile ? Et que dois-je donc faire pour que cela fonctionne..... Merci pour tn aide...
<hr />
// touche pour deplacer la voiture
case SDLK_UP:
double angle2=angle*(3.1415/180.0);
dpointx+=10*cos(angle2);
dpointy+=10*sin(angle2);
break; case SDLK_DOWN:
voitfond.y = voitfond.y+14;
break;
case SDLK_LEFT:
voitfond.x= voitfond.x-14;
break;
case SDLK_RIGHT:
voitfond.x = voitfond.x+14;
break;
//permet la conversion d'un double en int
/* pointx=(int)dpointx;
pointy=(int)dpointy;
voitfond.x=pointx;
voitfond.y=pointy;
break;
*/
SnOOpss
Messages postés570Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 5 décembre 2013 23 févr. 2008 à 16:19
Ben en fait je comprend pas trop ton programme SDLK_LEFT, SDLK_RIGHT ne servent pas a faire tourner ton vehicule justement ? Tu ne veut pas faire tourner ton vehicule avec droite et gauche ? et avancer avec SDLK_UP ?
Pourquoi fait tu bouger le fond quand la personne appuis sur droite et gauche ?
Sinon voitfond.y = (int)dpointy; dponitc doit rester en double car les valeurs sont a virgule.
cs_jeremy0189
Messages postés4Date d'inscriptionjeudi 21 février 2008StatutMembreDernière intervention24 février 2008 24 févr. 2008 à 13:08
Bin normalement SDLK_LEFT et RIGHT servent à tourner et UP a avancer.. Mais sinon je fait pas tourner le fond "voitfond" c l'image de la voiture au dessus du fond est je voudrais donc la faire tourner avc rotation "fonction rotozoom" par rapport a un angle " la trigonometrie" je pence que sa s'appelle comme sa mais je n'y arrive pas moi j'ai mis la formule dans SDLK_UP mais elle ne s'applique pas et je sais pas si cela est bon..
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_jeremy0189
Messages postés4Date d'inscriptionjeudi 21 février 2008StatutMembreDernière intervention24 février 2008 24 févr. 2008 à 13:27
Sinn regarde il y a un exemple sur ce lien :
http://defaut.developpez.com/tutoriel/flash/mouvVoiture/ La c'est sur Flash Mx mais Je voudrais pouvoir faire le meme deplacement avc ma voiture sur mon programme seulement cela et sa serait genial ! ! lol
Merci pour tes coups de mains...
SnOOpss
Messages postés570Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 5 décembre 2013 25 févr. 2008 à 17:11
C'est normal quelle reste fixe, a quel endroit dans ton prog tu fais varier l'angle de ta voiture ?
Quand on appuis sur avancer, on ne modifit pas l'angle mais on augmente la valeur x et y en fonction de l'angle.
Quand on appuuis sur droite ou gauche ON NE DEPLACE PAS LE VEHICULE (on ne touche pas a x ou y, il suffit de regarder un jeu qui marche avec ce systeme pour s'en apercevoir) mais on incremente ou decremente l'angle.
Apres tu n'as pas besoin de grosses connaissance en math pour faire juste tourner ton vehicule, regarde juste la definition de sinus et cosinus sur un cours de math c'est mieux expliqué que sur ton lien, (et d'ailleur pourquoi travailler en degré alors que tu convertis en radian, travaille directement avec des radians degré 0> 360 radian 0 > 2*Pi avec ca tu pourras meme virer la ligne
Double angle2=angle*(3.1415/180.0);Tu as juste a comprendre pourquoi y sin(angle) et x cos(angle)