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 :

Erreur il rentre dans le if hors qu'il ne devrait pas


Sujet :

C++

  1. #1
    Invité
    Invité(e)
    Par défaut Erreur il rentre dans le if hors qu'il ne devrait pas
    Salut, j'ai le problème suivant :

    -Le serveur envoie l'état du personnage. (mort)
    -Le client remet à jour l'état du personnage. (en vie)
    -Le client envoie l'état du personnage. (en vie)
    -Le client reçois le message du serveur et remet à jour l'état du personnage. (mort)
    Donc là déjà il ré-entre dans le else hors qu'il ne devrait pas :
    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    if (caracter->isAlive() {
    } else if (caracter == hero) {
                    setEventContextActivated(false);
                    wResuHero->setVisible(true);
                    float time = hero->getTimeBeforeLastRespawn().asSeconds() - hero->getTimeSinceLastRespawn().asSeconds();
                    if (time < 0) {
                        time = 0;
                    }
                    label->setText(conversionIntString(time));
                    if (time <= 0) {
                        std::cout<<"can respawn"<<std::endl;
                        button->setEventContextActivated(true);
                    }
                }
    Mais le pire c'est après :
    -Le serveur reçois l'état du personnage. (en vie)
    -Le serveur envoie le message au client. (en vie)
    -Le client reçois le message du serveur. (en vie)
    Mais comme il n'est plus mort du coup il ne rentre plus dans le else, de ce fait, time ne vaut jamais 0 et la fenêtre de résurrection du personnage reste bloquée, l'application se bloque.
    Pour régler ce problème j'ai décidé de faire ceci :
    -Le serveur envoie l'état du personnage (mort) et le temps du client. (Je fais une synchronisation du temps)
    -Le client remet à jour l'état du personnage (en vie) et stocke le temps dans une variable.
    -Le client reçois le message du serveur mais comme le serveur à envoyé le message avant que le client ne remette à jour l'état du personnage, je ne fais pas de mise à jour donc l'état du personnage devrait rester en vie cependant, même en comparent les deux temps. (En milliseconds)
    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (last_cli_time >= caracter->getAttribute("isAlive").getValue<sf::Int64>()) {
        if (caracter->isAlive() != isAlive && caracter->getType() == "E_HERO")
            std::cout<<"life and time : "<<caracter->isAlive()<<" "<<last_cli_time<<" "<<getClock("TimeClock").getElapsedTime().asMicroseconds()<<std::endl;
            caracter->setAlive(isAlive);
    }
    Il rentre quand même dans le if malgré que last_cli_time (le temps ou le serveur envoie l'état du personnage) est plus petit que caracter->getAttribute("isAlive").getValue<sf::Int64>() (le temps ou le client met à jour l'état du personnage.

    J'ai imprimé les valeurs et last_cli_time vaut 202630566 et l'autre temps 202818486.
    Pourtant 202630566 est bien plus petit que 202818486 mais malgré ça il rentre quand même dans le if vu qu'il m'affiche les temps ...

  2. #2
    Invité
    Invité(e)
    Par défaut
    PS : une autre solution serait de ne pas remettre l'était du personnage à jour quand il meurt côté client mais de simplement envoyé un message au serveur pour qu'il remette à jour l'état du personnage et ensuite attendre que le client reçoive le message suivant du serveur pour remettre à jour l'état du personnage côté client.

    Mais je n'aime pas cette solution, c'est plus lent et il faut envoyer plus de messages.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bon au final j'ai utilisé la second solution, c'est plus simple.

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

Discussions similaires

  1. erreur d'ecriture dans un fichier
    Par fjp dans le forum C++Builder
    Réponses: 4
    Dernier message: 03/07/2005, 11h31
  2. Erreur compilation DLL dans Eelphi 6
    Par jakouz dans le forum Langage
    Réponses: 2
    Dernier message: 25/05/2005, 16h38
  3. [JSP]Erreur de syntaxe dans un tag <option select
    Par logica dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 03/05/2005, 14h33
  4. Erreur type interdit dans __property
    Par Neilos dans le forum C++Builder
    Réponses: 4
    Dernier message: 11/01/2005, 21h45
  5. [Servlet][Compilation] Erreur de compil dans code servlet
    Par gandalf_le_blanc dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 13/05/2004, 10h17

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