deplacement personnage en C

a marqué ce sujet comme résolu.

Bonjour les chefs. Je suis entrain de realiser un jeu avec le language C je suis ici pour demander de l’aide en fait je cherche a savoir comment arreter un personnage pour ne pas depasser ma fenetre En plus je cherche a savoir comment faire le saut d’un personnage

Bonjour,

Pour que la communauté puissent t’aider, on va avoir besoin de plus d’informations.

Quels lib utilisent tu pour l’interface homme machine ? SDL, autre ?

Qu’a tu fait jusqu’a présent ? Peut-tu nous montrer le code que tu as fait ?





#include <stdio.h>
#include <stdlib.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>

SDL_bool Collision(SDL_Rect rect1, SDL_Rect rect2);
int deplacer(SDL_Renderer *rendu);
int main(int argc, char *argv[])
{

    SDL_Window *window = NULL;
    SDL_Renderer *rendu = NULL;
    SDL_Texture *texture1 = NULL;
    SDL_Texture *texture2 = NULL;
    SDL_Surface *surface1 = NULL;
    SDL_Surface *surface2 = NULL;
    surface1 = IMG_Load("mario_droite.gif");


    SDL_Event event;
    SDL_bool run = SDL_TRUE;


    SDL_Init(SDL_INIT_VIDEO);

    window = SDL_CreateWindow("My jeu", 400, 200, 600, 400, SDL_WINDOW_SHOWN);
    rendu = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
    SDL_SetRenderDrawColor(rendu, 255, 255, 255, 255);
    SDL_RenderClear(rendu);
    SDL_RenderPresent(rendu);

    texture1 = SDL_CreateTextureFromSurface(rendu, surface1);

    SDL_Rect rect;
    rect.x = 100;
    rect.y = 200;
    rect.w = 50;
    rect.h = 50;

    SDL_RenderCopy(rendu, texture1, NULL, &rect);

    SDL_RenderPresent(rendu);

    while(run)
    {

        SDL_WaitEvent(&event);
        if(event.type == SDL_QUIT)
        {
            run = SDL_FALSE;
        }

        if(event.type == SDL_KEYDOWN)
        {
            if(event.key.keysym.sym == SDLK_RIGHT)
            {
                rect.x++;
            }

             if(event.key.keysym.sym == SDLK_LEFT)
            {
                rect.x--;
            }

             if(event.key.keysym.sym == SDLK_UP)
            {
                rect.y--;
            }

             if(event.key.keysym.sym == SDLK_DOWN)
            {
                rect.y++;
            }
        }

        SDL_RenderClear(rendu);

         SDL_RenderCopy(rendu, texture1, NULL, &rect);

    SDL_RenderPresent(rendu);


    }


    SDL_Delay(0);


    SDL_FreeSurface(surface2);
    SDL_FreeSurface(surface1);
    SDL_DestroyTexture(texture2);
    SDL_DestroyTexture(texture1);
    SDL_DestroyRenderer(rendu);
    SDL_DestroyWindow(window);
    SDL_Quit();
    return 0;
}


Voila mon code

+0 -0

Salut,

Pour le premier problème, il te faut regarder les valeurs de rect.x et de rect.y. Par exemple, si rect.x est égal à 0, il ne faut pas le diminuer (ou le remettre à 0 ensuite). Ça empeĉhe le personnage de dépasser à gauche de la fenêtre. Pour la droite, il faut également prendre en compte la largeur du personnage, donc il ne faut pas dépasser WIDTH - rect.w.

Pour les sauts, tu trouveras des tutoriels sur Internet pour effectuer des sauts plus ou moins réalistes (en fonction de ce que tu recherches).

Sinon, tu peux améliorer des choses dans ton code. J’ai pas le temps de tout lister, mais voici déjà deux choses.

  • Vérifie le retour des fonctions à risques.
  • Donne une valeur correcte à tes variables dès le départ si c’est possible (par exemple, plutôt que de mettre window à NULL puis d’appeler SDL_CreateWindow, initialise directement window en utilisant SDL_CreateWindow).

PS : je mets le lien vers le sujet ouvert sur OC, pour que les gens ne répètent pas juste les même choses.

+0 -0

Salut,

Pour le premier problème, il te faut regarder les valeurs de rect.x et de rect.y. Par exemple, si rect.x est égal à 0, il ne faut pas le diminuer (ou le remettre à 0 ensuite). Ça empeĉhe le personnage de dépasser à gauche de la fenêtre. Pour la droite, il faut également prendre en compte la largeur du personnage, donc il ne faut pas dépasser WIDTH - rect.w.

Pour les sauts, tu trouveras des tutoriels sur Internet pour effectuer des sauts plus ou moins réalistes (en fonction de ce que tu recherches).

Sinon, tu peux améliorer des choses dans ton code. J’ai pas le temps de tout lister, mais voici déjà deux choses.

  • Vérifie le retour des fonctions à risques.
  • Donne une valeur correcte à tes variables dès le départ si c’est possible (par exemple, plutôt que de mettre window à NULL puis d’appeler SDL_CreateWindow, initialise directement window en utilisant SDL_CreateWindow).

PS : je mets le lien vers le sujet ouvert sur OC, pour que les gens ne répètent pas juste les même choses.

Karnaj

Merci beaucoup chef j’ai essayee ta methode et ca a marcher. Merci beaucoup infiniment

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte