CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Rotation en SDL

Darkshoot
Darkshoot
Niveau 10
14 mars 2010 à 13:39:33

Salut a tous !
Je suis en train de créer un GTA like en SDL !
Qui dit SDL, dit jeu 2D !
Qui dit GTA like 2D dit voiture
et qui dit voiture 2D dit rotation pour la piloter !
Donc voilà, je code en C avec la SDL, déjà, il me faudrait une fonction pour les rotation ou une lib, mais pas SDL_gfx, elle marche pas avec Code::Blocks !
Mais j'ai un autre petit prob, en fait, pour les event, j'utilise un SDL_PollEvent, et non pas un WaitEvent !
Enfin, c'est compliqué a expliquer ...
Voici mon code :

  1. include <stdlib.h>
  2. include <stdio.h>
  3. include <SDL/SDL.h>

typedef struct
{
char key[SDLK_LAST];
}Input;

void UpdateEvent(Input *in)
{
SDL_Event event;

while(SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_KEYDOWN:
in->key[event.key.keysym.sym] = SDL_FALSE;
break;

case SDL_KEYUP:
in->key[event.key.keysym.sym] = SDL_TRUE;
break;

default:
break;
}
}
}

int main (int argc, char** argv)
{
int continuer = 1, speed = 1;
Input in;

SDL_Surface *ecran = NULL, *fond = NULL, *car1 = NULL, *rotation = NULL;
SDL_Rect posFond, posCar1, posCar2, posCar3;
posFond.x = 0;
posFond.y = 0;
posCar1.x = 250;
posCar1.y = 250;

SDL_Init(SDL_INIT_VIDEO);
ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
SDL_WM_SetCaption("Small Theft Auto", NULL);
fond = SDL_LoadBMP("fond.bmp");
car1 = SDL_LoadBMP("car1.bmp");
SDL_SetColorKey(car1, SDL_SRCCOLORKEY, SDL_MapRGB(car1->format, 255, 255 , 255));

SDL_BlitSurface(fond, NULL, ecran, &posFond);

SDL_BlitSurface(car1, NULL, ecran, &posCar1);

SDL_Flip(ecran);

memset(&in,0,sizeof(in));

while(!in.key[SDLK_ESCAPE])
{
UpdateEvent(&in);
if(in.key[SDLK_UP])
{
posCar1.y++;
}
UpdateEvent(&in);
if(in.key[SDLK_DOWN])
{
posCar1.y--;
}
UpdateEvent(&in);
if(in.key[SDLK_RIGHT])
{
posCar1.x--;
}
UpdateEvent(&in);
if(in.key[SDLK_LEFT])
{
posCar1.x++;
}
UpdateEvent(&in);

SDL_BlitSurface(fond, NULL, ecran, &posFond);
SDL_BlitSurface(car1, NULL, ecran, &posCar1);
SDL_Flip(ecran);
}

SDL_FreeSurface(fond);
SDL_FreeSurface(car1);
SDL_Quit();

return 0;
}

En fait, vous allez me dire, olalala, t'as inversé les axes Y et X, mais justement c'est ça le problème, quand on appuie sur les touches, on voit que les axes sont inversé, mais en appuyant un peu n'importe comment, sa inverse les axes, et donc je peut piloter ma voiture normalement...
Seulement au début, j'appuie sur bas, droite ou gauche une fois, il avance tout seul, alors qu'une fois les axes inversé, tout est comme je veut, notamment les axes inversé et aussi le fait que pour avancer, je doit maintenire enfoncer haut, pour aller a droite, droite...

Merci de vos réponses ;) !

Darkshoot
Darkshoot
Niveau 10
14 mars 2010 à 13:42:44

Dsl du double post, mais voici la version indenté, pour plus de lisibilité http://pastebin.com/8A0AU3Tp (avec les couleurs!)

Lapintade
Lapintade
Niveau 30
14 mars 2010 à 16:24:56

C'est en effet un peu compliqué ton histoire.

Pour les rotations, il faut bien séparer la gestion et l'affichage.

Pour le déplacement d'un véhicule, tu peux utiliser un angle, et ensuite calculer un vecteur direction.

Pour l'affichager, il faut regarder ce que SDL utilise pour faire la rotation des images (un angle aussi surement).

Pour tes touches, c'est assez etranges, que Y soit vers le haut. Mais en même temps, je ne connais pas le systeme de coordonnées de la SDL ( le 0,0 est dans quel coin de l'écran ?)

Darkshoot
Darkshoot
Niveau 10
14 mars 2010 à 16:29:32

Normalement, o,0 est en haut a gauche !
Mais tu me parle de vecteur et tou, mais je suis en 4ème ...
Tu sais comment faire des rotations?

final-hearts
final-hearts
Niveau 10
14 mars 2010 à 16:54:36

ce n'est pas sdl_gfx qui ne marche pas sous code::blocks mais plutot que t'as foiré l'installation de la lib en question.
j'ai fait des jeux sous SDL utilisant des rotations et j'utilisais code::blocks

Darkshoot
Darkshoot
Niveau 10
14 mars 2010 à 17:16:50

Avec SDL_gfx ??
Apparemment, il faut recompiler pour Code:Block, et je n'ai pas foiré l'installation, j'ai suivis un tuto !
Tu avait fait comment pour l'installer?

Darkshoot
Darkshoot
Niveau 10
14 mars 2010 à 21:00:51

up :o

final-hearts
final-hearts
Niveau 10
14 mars 2010 à 21:38:29

Y a pas 36 milles méthodes d'installer une librairie, je l'ai fait à partir du tutoriel du site du zéro dessus.

http://www.siteduzero.com/tutoriel-3-36757-faire-des-rotations-avec-sdl_gfx.html

Lapintade
Lapintade
Niveau 30
15 mars 2010 à 13:53:34

Pas de up svp.

"Normalement, o,0 est en haut a gauche !"

Ben soit tu sais, sois tu sais pas.
"Normalement" ca veut dire que tu doute. Donc commence déjà par apprendre les bases (afficher un point ou un carré et maitriser l'endroit ou il s'affiche).

Darkshoot
Darkshoot
Niveau 10
15 mars 2010 à 16:56:54

Ok désolé pour le up, sa ne se reproduira plus !
Quand je disait normalement, je voulais dire qu'il disait que c'est bien en haut a gauche mais d'après mon "début" de jeu, eh ben c'est complètement l'inverse !
final-hearts, justement j'ai appris a coder sur le SdZ, a installer cette lib aussi sur le SdZ, j'ai poster un message, on m'as dit que c'était incompatible avec code:block...

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment