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

Développement 2D, 3D et Jeux Discussion :

affichage depuis une classe en utilisant sdl


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 5
    Points : 3
    Points
    3
    Par défaut affichage depuis une classe en utilisant sdl
    bonjour tout le monde voilà mon soucis : je créé les persos d'un jeu (en utilisant la librairie sdl), chaque perso a une classe qui heritent toutes de la classe personnage ; dans la fonction main j'ai une boucle qui recupere les evenements coté joueur ; on demande la mise à jour de la surface ecran à chaque passage dans la boucle ; j'ai une instance de la classe héritée de la classe personnage dont une methode est afficher() et qui doit blitter a chaque passage la posture correspondant à l'événement coté joueur ; à la compilation je n'ai pas d'erreur coté compilateur mais la fenetre ne s'affiche qu'un instant, sans l'image que je suis supposé avoir... bref comme un exemple vaut mieux que la pire des explications (dont je viens de donner un exemple...) voici mon code :

    ClasseJim *raph = new ClasseJim;

    Personnage:ersonnage(int vie, int x, int y, int anim, int sequence, bool droite)
    {
    this->droite = droite; // orientation du perso au depart
    this->vie = vie;
    this->x = x;
    this->y = y;
    tempx = 0;
    tempy = 0;
    image = SDL_LoadBMP("spriteJimpx.bmp");
    int cptanim = anim; // choix de la posture de départ du personnage
    this->sequence = new bool[sequence]; // pied poing arme touché ko mort saisissant marche saut
    for(int i = 0; i < sequence; i++) this->sequence[i] = false;
    }

    void Personnage::afficher(SDL_Surface *ecran)
    {
    SDL_SetColorKey(image, SDL_SRCCOLORKEY, SDL_MapRGB(ecran->format, 255, 0, 222));
    apply_surface(this->x, this->y, image, ecran, &clip[cptanim]);
    }
    /* la fonction apply_surface() piquée sur le tuto sdl de developpez.com prend en parametre l'absisse et les coordonnées de la partie de l'image à afficher, image est une variable de type SDL_Surface qui pointe sur l'image à afficher, ecran est la surface sur laquelle on blitte l'image, &clip[] correspond à la partie de l'image à afficher */

    la main a cette forme :



    while(continuer)
    {
    SDL_PollEvent(&event);
    switch(event.type)
    {
    case SDL_QUIT :
    continuer = false;
    break;

    case SDL_KEYDOWN :
    keystates = SDL_GetKeyState(NULL);

    if( keystates[SDLK_ESCAPE]) continuer = false;
    else
    raph->evenement(NULL, keystates, event);

    break;
    default :
    break;

    }// fin recupération evenement

    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
    apply_surface(0, 0, decors, ecran, NULL);
    raph->afficher(ecran);
    SDL_Flip(ecran); // mise à jour de l'écran

    }// fin boucle continuer

  2. #2
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 379
    Points
    20 379
    Par défaut
    -> while(continuer)

    "continuer" : ou est initialisée cette variable ?
    Et puis sais-tu que les balises [ code ] existent ?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    -> while(continuer)

    "continuer" : ou est initialisée cette variable ?
    Et puis sais-tu que les balises [ code ] existent ?
    désolé je suis nouveau sur le forum c'est vrai que ça fait plutot fourre tout mon message... continuer est initialisé plus haut dans la fonction main ; en fait mon soucis vient essentiellement de ma methode afficher() puisque tout se passe bien lorsque je vire la ligne [ code ] raph->afficher(ecran); [code ]

    precision : le statut exit après execution est 3

  4. #4
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 021
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 021
    Points : 2 278
    Points
    2 278
    Par défaut
    Salut,
    on peut voir d'où vient &clip dans afficher(), c'est une globale ?
    Sinon je pense que tu devrais sortir le chargement des images de ta classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    image = SDL_LoadBMP("spriteJimpx.bmp");
    Faire tous les chargements au début, puis passer image dans ton constructeur par exemple. L'intérêt étant premièrement de pouvoir partager tes ressources entre les différents sprites et deuxièmement de pouvoir créer des sprites à la volée. Là tu charges un fichier à chaque création de sprite, déjà c'est inutile mais en plus t'auras des problèmes de perfs.
    Vive les roues en pierre

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 5
    Points : 3
    Points
    3
    Par défaut resolution pbm...
    merci pour vos conseils je vais regarder ça... sinon j'ai trouvé la solution : l'attribut cptanim pas initialisé car j'avais inteligement remplacé this->cptanim par int cptanim -> comment perdre un après midi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/08/2014, 11h16
  2. Utiliser un Windows.Form depuis une Classe
    Par johann77 dans le forum VB.NET
    Réponses: 1
    Dernier message: 11/07/2012, 16h25
  3. SDL depuis une classe : Réguler les FPS
    Par Froyok dans le forum SDL
    Réponses: 5
    Dernier message: 07/06/2009, 16h18
  4. problème d'affichage du résultat dans une classe qui utilise SNMP
    Par ramzouni dans le forum Débuter avec Java
    Réponses: 0
    Dernier message: 22/05/2009, 01h26
  5. Référence à un objet existant depuis une classe
    Par Adrenalys dans le forum ASP
    Réponses: 2
    Dernier message: 21/07/2005, 00h44

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