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 :

SDL + Gestion de temps


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 30
    Par défaut SDL + Gestion de temps
    Bonsoir tout le monde,

    Je travaille sur un petit projet Bomberman, j'utilise la SDL pour la gestion de mon onterface graphique, et là je bloque sur comment faire exploser les bombes.
    Mon bomberman il se deplace, quand j'appuie sur espace il pause une bombe, ce que j'essaye de faire là c de faire exploser la bombe 4 ou 5 seconde apres qu'elle soit posée, et detruire les murs destructibles autour. sachat que durant ces 4 secondes d'attendes tout doit continuer a fonctionner, le deplacement des ennemis, du bonhomme, donc pas de sleep(). Si vous pouvez m'aider ça serai tres sympa, et si vous avais besoin de plus de detail, je suis là.

    Mercii

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 472
    Par défaut
    Bonjour,

    Citation Envoyé par autregalaxie Voir le message
    ce que j'essaye de faire là c de faire exploser la bombe 4 ou 5 seconde apres qu'elle soit posée, et detruire les murs destructibles autour. sachat que durant ces 4 secondes d'attendes tout doit continuer a fonctionner, le deplacement des ennemis, du bonhomme, donc pas de sleep().
    Il faut faire une game loop. En gros, tu procèdes comme avec les rounds d'un jeu de rôle. Tu fais une boucle dont chaque itération démarre à intervalle fixe et qui compte ses tours. Cela peut être tous les dixièmes de seconde, par exemple, mais généralement, cela se fait à chaque VBL, c'est-à-dire au moment ou le canon à électron d'un moniteur à tube cathodique revient en haut de l'écran, ou plus généralement quand la carte graphique s'apprête à redessiner un nouveau frame. Je crois que la SDL effectue automatiquement cette synchro si c'est possible et si tu utilises un double-buffering (à vérifier). Bon, aujourd'hui, on se base plutôt sur un timer car, d'une part, les machines sont devenues suffisamment rapides pour utiliser des timers haute fréquence de façon fiable (au moins un) et parce que, d'autre part, les fréquences de rafraîchissement de l'écran sont devenues trop variables et trop rapides.

    A chaque passe, tu testes les mouvements de l'utilisateur, tu agis sur le personnage en conséquence, et tu fais les choses à faire si elles ont été planifiées (comme faire exploser une bombe), et tu attends le tour suivant.

    Ensuite, lorsque le joueur a posé une bombe, tu calcules le numéro du tour auquel l'explosion doit avoir lieu, et tu la planifies en mettant ça dans une file avec les autres événements à venir.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 30
    Par défaut
    Merci, j'ai utilisé time.h, ce que je fais c'est qu'une fois que je pose la bombe je prend la date courante, ensuite, je reprend la date et je fais la difference des deux, si c'est superieur a 3 seconde je fais exploser la bombe. Mercii pour votre reponse.

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 472
    Par défaut
    Citation Envoyé par autregalaxie Voir le message
    Merci, j'ai utilisé time.h, ce que je fais c'est qu'une fois que je pose la bombe je prend la date courante, ensuite, je reprend la date et je fais la difference des deux, si c'est superieur a 3 seconde je fais exploser la bombe. Mercii pour votre reponse.
    Tu peux optimiser cela en créant une structure dont tu attribuerait une instance à chaque objet « dynamique » de ton jeu et qui contiendrait la date à laquelle doit se passer quelque chose, date qui aurait été calculée dès le départ. Ainsi, tu peux fixer des durées variables pour chaque objet.

    Tu peux aussi y caser un pointeur de fonction vers la routine chargée de traiter l'objet une fois le délai écoulé.

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

Discussions similaires

  1. [SDL-jeux]problème gestion de temps
    Par men1n2 dans le forum SDL
    Réponses: 33
    Dernier message: 13/11/2007, 18h06
  2. [MFC] Gestion du temps
    Par Kevgeii dans le forum MFC
    Réponses: 7
    Dernier message: 02/07/2005, 14h21
  3. Aide pour l'analyse d'un problème de gestion de temps
    Par PAINCO dans le forum Décisions SGBD
    Réponses: 8
    Dernier message: 03/06/2005, 15h49
  4. [VB.NET] Gestion en temps réel d'une bdd access
    Par qwiskas dans le forum Windows Forms
    Réponses: 6
    Dernier message: 12/02/2005, 19h37
  5. fonction de gestion du temps
    Par fati dans le forum C
    Réponses: 5
    Dernier message: 26/12/2002, 16h32

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