J'essaie d'apprendre la SDL2 et j'ai vue que le cour de c propose un tp de sokoban avec des sprite tout fait j"essais donc de le réaliser sans regarder la solution mais je me trouve face a un problème je n'arrive pas a afficher une texture via une fonctionpouvez vous m'aider s'il vous plait
main
#include<stdlib.h>
#include<stdio.h>
#include<SDL.h>
#include<SDL_image.h>
#include"toolBase.h"
#include"constant.h"
#include"level.h"
#include"perso.h"
#include"jeu.h"
#define WINDOW_WIDTH 800
#define WINDOW_HEIGHT 600
int main(int argc, char *argv[])
{
//Window
SDL_Window *window = NULL;
SDL_Renderer *renderer = NULL;
SDL_bool windowIsOpen = SDL_TRUE;
SDL_Texture *playerTexture = NULL;
SDL_Rect positionPlayer;
int startPositionX = 30, startPositionY = 30;
if(SDL_Init(SDL_INIT_VIDEO) != 0)
clearRessources("Imposible d'initialiser la SDL", NULL, NULL, NULL);
if(SDL_CreateWindowAndRenderer(WINDOW_WIDTH,WINDOW_HEIGHT, 0, &window, &renderer))
clearRessources("Imposible d'initialiser la fenetre et le rendu ", window, renderer, NULL);
if(SDL_SetRenderDrawColor(renderer, 255,255, 255, SDL_ALPHA_OPAQUE) != 0)
clearRessources("Impossible de changer la couleur du renderer", window, renderer, NULL);
//Init Player
playerTexture = initPlayer(window, renderer, DOWN);
positionPlayer = initPlayerPosition(window, renderer, startPositionX, startPositionY);
while(windowIsOpen)
{
SDL_Event event;
while(SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_QUIT:
windowIsOpen = SDL_FALSE;
break;
default:
break;
}
}
if(SDL_RenderClear(renderer) != 0)
clearRessources("Impossible de cleaur le rendu", window, renderer,playerTexture);
//Afichage du joueur
displayPlayer(window,renderer, DOWN, playerTexture, positionPlayer);
SDL_RenderPresent(renderer);
}
clearRessources(NULL, window, renderer, NULL);
return EXIT_SUCCESS;
}
jeux.c
#include<SDL.h>
#include<SDL_image.h>
#include<stdio.h>
#include<stdlib.h>
#include"perso.h"
#include"toolBase.h"
#include"constant.h"
#include"jeu.h"
void displayPlayer(SDL_Window *window,SDL_Renderer *renderer, int player, SDL_Texture *texturePlayer, SDL_Rect playerPosition)
{
if(player == DOWN)
{
if(SDL_QueryTexture(texturePlayer, NULL, NULL, &playerPosition.w, &playerPosition.h) != 0)
clearRessources("Impossible de charger la texture sur le rendu", window, renderer, texturePlayer);
if(SDL_RenderCopy(renderer, texturePlayer, NULL, &playerPosition) != 0)
clearRessources("Impossible d'afficher la texture sur le rendu", window, renderer, texturePlayer);
}
}
clearRessources() termine-t-il ton programme ? Car si ce n'est pas le cas, clearRessources() affiche un message, mais ton programme continue malgré l'erreur....
Code de clearRessources() ?
- Edité par edgarjacobs 24 octobre 2021 à 19:44:06
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
@KevinGL: dans initPlayer(), si l'image n'est pas chargée, on sort du programme avec la fonction cleaRessources()
Edit: je n'ai jamais essayé de créer une texture à partir d'un gif.
- Edité par edgarjacobs il y a environ 1 heure
En tout cas j'ai bien le message "Invalid texture" si le chemin est erroné. À voir également s'il s'agit d'un GIF animé, je suis pas sûr que ce soit pris en charge par SDL
Si j'en reste à mes derniers essais, pour un gif animé, SDL_Image n'extrait que la première image de l'animation avec des bug potentiels sur les transparence et le mode entrelacé. Pour du sprite, je m'abstiens à du png, je n'utilise du gif que pour faire de vraies animations, à chacun son truc.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Bonhomme !! | Jeu de plateforme : Prototype.