IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Ré-écrire « PV2000 » en SDL


Sujet :

C

  1. #21
    Membre actif

    Homme Profil pro
    autre
    Inscrit en
    Juillet 2015
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Juillet 2015
    Messages : 176
    Points : 202
    Points
    202
    Par défaut
    je suis en train d'étudier le tutoriel de FVIRTMAN sur le tilemapping sur ce site. C'est bien expliqué, et j'ai bien compris le système des collisions.
    J'y arrive bien en sdl1, mais en sdl2, l'affichage est complêtement chamboulé. De plus, la fonction SDL_CreateTextureFromSurface rend, par exemple du bleu à la place du rouge. Je vois bien qu'il s'agit d'une question de masque des couleurs, mais je ne vois pas comment changer cela. Donc pour l'instant, histoire de comprendre comment fonctionne un petit jeu, je vais rester en sdl1.

  2. #22
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Son tutoriel est pas mal , même si certain point me gênait sur son tuto !
    Disons que j'ai abandonné l'idée de faire un tutoriel de ce type , parce qu en 2017 faire un jeu en C et SDL1 était un peu "obsolète"

  3. #23
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Citation Envoyé par piponux Voir le message
    J'y arrive bien en sdl1, mais en sdl2, l'affichage est complêtement chamboulé. De plus, la fonction SDL_CreateTextureFromSurface rend, par exemple du bleu à la place du rouge.
    Ça m'intéresse. Pourrait-on voir les deux versions du code ?

  4. #24
    Membre actif

    Homme Profil pro
    autre
    Inscrit en
    Juillet 2015
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Juillet 2015
    Messages : 176
    Points : 202
    Points
    202
    Par défaut
    oui, c'est un peu ringa...enfin...obsolète (hé hé) d'utiliser sdl1...

    Le format d'image TGA24 que je veux convertir (en Surface pour SDL1, en Texture pour SDL2) est RGBA.

    sinon voici la partie du code de FVIRTMAN que j'ai un peu changé pour chager des images TGA24 et non des images bmp:
    En SDL1 : ce code donne ce que je veux, c'est à dire par exemple affiche une image rouge alors que j'ai programmé une image rouge:
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    SDL_Surface* LoadImage32(char* fichier_image)
    {
    	SDL_Surface* image_result;
    	image I = image_load_TGA24 (fichier_image);
    	SDL_Surface* image_ram = SDL_CreateRGBSurfaceFrom(I->pixel,
                                                          I->w,
                                                          I->h,
                                                          32,
                                                          I->w * sizeof(Uint32),
                                                          0xff000000,
                                                          0x00ff0000,
                                                          0x0000ff00,
                                                          0x000000ff);
     
     
    	/*SDL_LoadBMP(fichier_image);	// charge l'image dans image_ram en RAM*/
    	if (image_ram==NULL)
    	{
    		printf("Image %s introuvable !! \n",fichier_image);
    		SDL_Quit();
     
    		exit(-1);
    	}
    	image_result = SDL_DisplayFormat(image_ram);
    	SDL_FreeSurface(image_ram);
     
    	return image_result;
    }




    et voici le code SDL2 qui affiche une image bleue alors que j'ai demandé une image rouge:
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    SDL_Texture* transforme_image_TGA_24_en_texture_SDL (image I, GLOBAL G)
    {
     Uint32 rmask, gmask, bmask, amask;
     
     #if SDL_BYTEORDER == SDL_BIG_ENDIAN
        rmask = 0xff000000;
        gmask = 0x00ff0000;
        bmask = 0x0000ff00;
        amask = 0x000000ff;
    #else
        rmask = 0x000000ff;
        gmask = 0x0000ff00;
        bmask = 0x00ff0000;
        amask = 0xff000000;
    #endif
     
     
     SDL_Surface* S = SDL_CreateRGBSurfaceFrom ((void*) I->pixel,
                                                I->w,
                                                I->h,
                                                32,
                                                I->w * sizeof(Uint32),
                                                rmask,
                                                gmask,
                                                bmask,
                                                amask);
     
     SDL_Texture* T = SDL_CreateTextureFromSurface(G->R, S); 
     return T;
    }
     
    void copie_une_texture_sur_un_renderer (GLOBAL G, image I, SDL_Texture* T, int src_x, int src_y, int src_w, int src_h,
    					int dst_x, int dst_y, int dst_w, int dst_h )
    {
     
     SDL_UpdateTexture(T, NULL, (void*) I->pixel, I->w * sizeof (Uint32));
     
     /*SDL_Rect src = {src_x, src_y, src_w, src_h};    */
     SDL_Rect dst = {dst_x, dst_y, dst_w, dst_h};
     SDL_RenderCopy (G->R, T, /*&src*/NULL, &dst);
     
    }
     
    void affiche_a_l_ecran (GLOBAL G)
    {
     SDL_RenderPresent(G->R);
    }

  5. #25
    Membre actif

    Homme Profil pro
    autre
    Inscrit en
    Juillet 2015
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Juillet 2015
    Messages : 176
    Points : 202
    Points
    202
    Par défaut
    En fait en SDL2 si je veux avoir une image rouge, je dois créer une Texture avec SDL_CreateTexture, au format RGBA888:
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
      SDL_Texture* T = SDL_CreateTexture(G->R, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_STREAMING, IMAGE_W, IMAGE_H);

    puis aller cherche mon image TGA avec :
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    SDL_UpdateTexture(T, NULL, (void*) G->I->pixel, G->I->w * sizeof (Uint32));

    et là j'ai bien l'image que je veux à l'écran.
    C'est la fonction SDL_CreateTextureFromSuface que je ne sais pas utiliser correctement.

  6. #26
    Membre actif

    Homme Profil pro
    autre
    Inscrit en
    Juillet 2015
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Juillet 2015
    Messages : 176
    Points : 202
    Points
    202
    Par défaut
    Au passage, la SDL2 me rend une image bleue, même si je charge une image TGA rouge créée et enregistrée sous The Gimp.

  7. #27
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    C'est que tu as inversé les couleurs quelque part.
    Vérifie l'ordre des composantes en chargement ou au dessin (en OpenGL, du temps ou j'en faisais, il y avait des chargement d'image en RGBA, en ARGB, en BGRA, etc)

    Tu peux vérifier cette hypothèse avec une image verte (qui doit rester verte) ou une bleu (qui doit devenir rouge)
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  8. #28
    Membre actif

    Homme Profil pro
    autre
    Inscrit en
    Juillet 2015
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Juillet 2015
    Messages : 176
    Points : 202
    Points
    202
    Par défaut
    Bonsoir.
    Effectivement, j'ai dû inverser les couleurs. Pour l'instant, je n'ai pas trouvé la solution, alors j'ai commencé à programmer le jeu "PV 2000" avec SDL 1.2, en suivant le tutoriel du tile maping sur ce site, et en utilisant les modules game_event de Jacques Olivier Lapeyre.
    Voici, en guise de test de cette file de priorité d'événements, un lien vers la vidéo du tout début du squelette du jeu PV2000 que j'aimerais pouvoir programmer :

    La vidéo est saccadée, mais sur le pc, ç'est hyper fluide (si si je le jure)

    https://www.youtube.com/watch?v=VCgG...ature=youtu.be

  9. #29
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Citation Envoyé par piponux Voir le message
    Bonsoir.
    Effectivement, j'ai dû inverser les couleurs. Pour l'instant, je n'ai pas trouvé la solution, alors j'ai commencé à programmer le jeu "PV 2000" avec SDL 1.2, en suivant le tutoriel du tile maping sur ce site, et en utilisant les modules game_event de Jacques Olivier Lapeyre.
    Voici, en guise de test de cette file de priorité d'événements, un lien vers la vidéo du tout début du squelette du jeu PV2000 que j'aimerais pouvoir programmer :
    Magnifique !

    Par contre, effectivement, pour le moment, il n'y a aucune voiture à verbaliser, ce qui laisse libre la moitié de la route. Dans le jeu original, leur présence empêche le contractuel d'éviter le chauffard.

  10. #30
    Membre actif

    Homme Profil pro
    autre
    Inscrit en
    Juillet 2015
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Juillet 2015
    Messages : 176
    Points : 202
    Points
    202
    Par défaut
    Merci beaucoup pour ta réaction, Obsidian, ça m'encourage vraiment à continuer!

    Voici une seconde video. Les "voitures" jaunes sont ajoutées, leur vitesse est aléatoire entre 1 et 5.

    Il n'y a encore aucun test de collision entre le contractuel et les voitures, de même que les voitures stationnées n'ont pas été écrites.
    Je n'ai pas corrigé certains warnings du compilateur, je le ferai plus tard.

    La fluidité de la vidéo ne rend pas du tout la fluidité sur pc.

    https://youtu.be/6TeywHr9S2A

  11. #31
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Citation Envoyé par piponux Voir le message
    La fluidité de la vidéo ne rend pas du tout la fluidité sur pc.
    Non, mais habitué des synchros VBL pour l'avoir fait sur les machines qui faisaient fonctionner PV 2000 à l'époque, j'imagine très bien ce que cela doit rendre. C'est remarquable d'être arrivé jusque là en si peu de temps et il ne te manque pas grand chose pour finir le jeu en entier.

  12. #32
    Membre actif

    Homme Profil pro
    autre
    Inscrit en
    Juillet 2015
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Juillet 2015
    Messages : 176
    Points : 202
    Points
    202
    Par défaut
    Encore merci pour les encouragements.

    Je posterai des videos sur youtube au fur et à mesure des nouvelles choses que j'écrirai.
    Je posterai ici lorsque l'avancée du jeu sera assez aboutie.

    Il y a encore plein de choses à faire pour que celà ressemble au jeu original : les voitures ne démarrent que si le policier traverse la route dans l'axe de la voiture, faire diminuer la vie du policier, créer les voitures à verbaliser, les afficher, les verbaliser, changer leur couleur lorsqu'elles sont verbalisées, changer de niveau etc.

    c'est quand même le pied pour moi! même avec le tout début du squelette du jeu, je m'éclate à y jouer!!

  13. #33
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Citation Envoyé par piponux Voir le message
    c'est quand même le pied pour moi! même avec le tout début du squelette du jeu, je m'éclate à y jouer!!
    Je ne vais pas te pousser à courir plusieurs lièvres à la fois, surtout si tu débutes, mais tu devrais d'emblée utiliser un logiciel de versioning/DVCS/SCM (comme git) pour jalonner la progression de ton travail et pour pouvoir ensuite, éventuellement, le partager en ligne.

  14. #34
    Membre actif

    Homme Profil pro
    autre
    Inscrit en
    Juillet 2015
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Juillet 2015
    Messages : 176
    Points : 202
    Points
    202
    Par défaut
    logiciel de versioning? what is it? je vais voir.

    sinon, petit problème de collisions, mais au final, ça peut être marrant à garder :


  15. #35
    Membre actif

    Homme Profil pro
    autre
    Inscrit en
    Juillet 2015
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Juillet 2015
    Messages : 176
    Points : 202
    Points
    202
    Par défaut
    suite de mon avancée : ajouts de trois voitures à verbaliser, qui changent de couleur lorsqu'elles sont verbalisées.

    https://youtu.be/rW68F43Oeuo

  16. #36
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Ca avance super bien, ton projet.

    Pour ton information, un logiciel de gestion de code source, tel que git, permet de conserver l'historique du code.
    En gros:
    1. on code un peu,
    2. on compile,
    3. on teste,
    4. on commit: c'est à dire on sauvegarde dans le "dépot" l'état actuel du code source

    L'avantage, c'est qu'on peut récupérer une ancienne version du code, comparer, etc.
    Et mieux encore, ca permet aussi de travailler à plusieurs proprement
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  17. #37
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Citation Envoyé par ternel Voir le message
    L'avantage, c'est qu'on peut récupérer une ancienne version du code, comparer, etc.
    Et mieux encore, ca permet aussi de travailler à plusieurs proprement
    Et en plus, on peut forker ! Donc, on peut lancer une branche secondaire pour faire des essais et profiter de tous les services (historique des modifications successives), sans polluer le projet principal ! Et tout cela au sein d'un même dépôt.

  18. #38
    Membre actif

    Homme Profil pro
    autre
    Inscrit en
    Juillet 2015
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Juillet 2015
    Messages : 176
    Points : 202
    Points
    202
    Par défaut
    a ouais c'est génial ça.
    je vais l'utiliser. c'est galère de se planter à un endroit et de devoir effacer une bonne partie du code.
    merci pour l'info!

    https://youtu.be/KRZvcB87UqA

  19. #39
    Membre actif

    Homme Profil pro
    autre
    Inscrit en
    Juillet 2015
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Juillet 2015
    Messages : 176
    Points : 202
    Points
    202
    Par défaut Sources du squelette de PV2000
    Je poste ici le dossier des sources de mon squelette de PV2000.

    Ce n'est pas encore un jeu, juste une démo qui illustre le tile maping et les collisions entre tiles/SDL_Rect et SDL_Rect/SDL_Rect.

    Je pense que cela ne fonctionne que sous linux.
    il faut décompresser, puis aller dans le dossier et taper dans une console:

    make clean && make && ./EXECUTABLE

    Il n'y a aucun problème de droits car Jacques Olivier Lapeyre a autorisé à utiliser ses modules dans une de ses toutes premières vidéos. Ces modules sont téléchargeables sur son site.
    Fichiers attachés Fichiers attachés

  20. #40
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Citation Envoyé par piponux Voir le message
    Il n'y a aucun problème de droits car Jacques Olivier Lapeyre a autorisé à utiliser ses modules dans une de ses toutes premières vidéos. Ces modules sont téléchargeables sur son site
    Je n'en doute pas , il traîne sur le forum en plus

Discussions similaires

  1. [OS] Lire et écrire sur disquette
    Par trax44 dans le forum Programmation d'OS
    Réponses: 17
    Dernier message: 22/02/2004, 20h45
  2. [Debutant] Sdl & OpenGl link ne marche pas
    Par Riko dans le forum OpenGL
    Réponses: 9
    Dernier message: 18/02/2004, 16h13
  3. [opengl et sdl]
    Par Gonath dans le forum OpenGL
    Réponses: 6
    Dernier message: 08/12/2003, 09h49
  4. Autorun comment l'écrire
    Par Speed41 dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 25/04/2003, 14h55
  5. Un langage pour lire, traiter et écrire de gros fichiers
    Par March' dans le forum Langages de programmation
    Réponses: 19
    Dernier message: 07/04/2003, 15h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo