Partage
  • Partager sur Facebook
  • Partager sur Twitter

[AJAX]Déplacement d'un joueur qui foire de temps en temps...

Et l'ancienne position du joueur se remplit d'un joli NaN.

Sujet résolu
    29 juillet 2009 à 15:32:48

    Bonjour.
    Je suis en train de créer un jeu(on le saura) et j'en suis au point de déplacer le joueur sans recharger la page, j'ai donc appris l'AJAX mais mon foire quelques fois, c'est-à-dire que des fois, le joueur se déplace bien, mais, quelques fois, son ancienne position ne se vide pas, donc le joueur se duplique...

    jeu.php(juste une partie):
    <?php 
        echo '<a href="#header" onclick="move_perso('.$i.', '.$j.', \''.$_SESSION['classe'].'\', \''.$_SESSION['sexe'].'\', \''.$_SESSION['pseudo'].'\');request('.$i.', '.$j.', '.$_SESSION['id'].');" class="case" id="id-'.$carte[$i][$j].'" ><img src="images/persos/'.$_SESSION['classe'].'_'.$_SESSION['sexe'].'_Face.png" width="20px" height="38px" style="position:absolute;" alt="I" id="'.$_SESSION['pseudo'].'"/></a>';
    ?>
    


    defaut.js
    function move_perso(x, y, classe, sexe, pseudo)
    {
    	gEBI(pseudo).parentNode.removeChild(pseudo);
    			
    	gEBI('id-'+x+', '+y).innerHTML = '<img src="images/persos/'+classe+'_'+sexe+'_Face.png" id="'+pseudo+'" width="20px" height="38px" style="position:absolute;" alt="I" />';
    			
    	gEBI('load').style.display="none";
    }
    
    function request(x, y, id) 
    {
    	var xhr = getXMLHttpRequest();
    	x 	    = encodeURIComponent(x);
    	y 	    = encodeURIComponent(y);
    	id  	= encodeURIComponent(id);
    	
    	
    	xhr.onreadystatechange = function() 
    	{
    		if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) 
    		{
    			return xhr.responseText;
    		}
    	};
    
    	xhr.open("GET", "cible.php?x="+x+"&y="+y+"&id="+id, true);
    	xhr.send(null);
    }
    


    cible.php
    <?php 
    header("Content-Type: text/plain");
    
    include('connexion_bdd.php');
    
    $x 	= mysql_real_escape_string($_GET['x']);
    $y 	= mysql_real_escape_string($_GET['y']);
    $id = intval($_GET['id']);
    
    $requete = mysql_query("UPDATE membres SET posx='$x', posy='$y' WHERE ID='$id'");
    
    if($requete)
    {
    	echo "OK";
    }
    else
    {
    	echo "FAIL";
    }
    ?>
    


    Pour voir ce qu'il se passe, c'est ici: http://jeu.myaxs.fr/ , il faut vous connecter avec le membre essai dont le mot de passe est azerty et aller sur la page de jeu.
    Merci, au revoir!

    Édit: j'ai mis à jour les sources et maintenant, le perso ne se déplace plus, mais le système est grandement allégé, merci Golmote et les autres :D !
    • Partager sur Facebook
    • Partager sur Twitter

    L'important n'est pas de savoir maîtriser une technologie à la perfection, mais d'avoir une belle capacité d'adaptation.

      29 juillet 2009 à 23:12:19

      Salut, voilà, je n'ai aucune idée pour ce que tu demande (je suis dépassé :D) mais j'ai une petite question (désolé d'empiéter sur ton topic :S).
      Voilà, pourquoi mets-tu des intval() autour des variables ? Il n'y a pas de distinctions en PHP il me semble non ?
      • Partager sur Facebook
      • Partager sur Twitter
        29 juillet 2009 à 23:14:14

        Je voulais les mettre pour être sûr, puis je me suis rendu compte que de toute façon, ces variables me servent pour des id de balises, donc ça revient à du texte, donc ça sert bel et bien à rien, merci :p .
        • Partager sur Facebook
        • Partager sur Twitter

        L'important n'est pas de savoir maîtriser une technologie à la perfection, mais d'avoir une belle capacité d'adaptation.

          30 juillet 2009 à 12:32:50

          UP s'il vous plaît :( ...
          • Partager sur Facebook
          • Partager sur Twitter

          L'important n'est pas de savoir maîtriser une technologie à la perfection, mais d'avoir une belle capacité d'adaptation.

            30 juillet 2009 à 12:36:53

            Ton -= de la ligne 13 il fonctionne ? o_O

            Ca me paraît bien étrange, parce que tu sais bien sûr que l'opérateur "-" ne s'utilise pas avec des chaînes de caractères.

            Là dans ton cas, ça essaie de convertir des deux chaînes en nombre. Je ne sais pas ce que contient le innerHTML, mais en tous cas, je sais que la chaîne qui est après, elle donne NaN en conversion.

            Et un -= avec NaN, ça fait NaN...
            • Partager sur Facebook
            • Partager sur Twitter
              30 juillet 2009 à 12:42:02

              En fait, il marche, mais ça met le NaN, donc il ne marche qu'à moitié, mais je n'ai pas trouvé d'autres solutions...

              Citation

              Ça me paraît bien étrange, parce que tu sais bien sûr que l'opérateur "-" ne s'utilise pas avec des chaînes de caractères.


              Euh... Si, bien sûr que je sais, tu me prends pour qui :euh: ...
              Bon, ok, je savais pas :-° .

              Édit: Si, remarque, je peux rajouter une requête qui contera le nombre de joueurs sur cette case, et si ce nombre est égal à 1, c'est que je suis seul, donc je peux la vider, sinon, je la laisse remplie...
              • Partager sur Facebook
              • Partager sur Twitter

              L'important n'est pas de savoir maîtriser une technologie à la perfection, mais d'avoir une belle capacité d'adaptation.

                30 juillet 2009 à 13:07:27

                Bah en fait, je vois pas bien ce que tu veux faire avec ton -= en fait... supprimer un morceau de l'innerHTML ? o_O
                • Partager sur Facebook
                • Partager sur Twitter
                  30 juillet 2009 à 13:24:37

                  Oui, car imagines qu'il y ait plusieurs joueurs sur la même case, il y aura plusieurs images, donc je ne voulais en supprimer qu'une seule...
                  • Partager sur Facebook
                  • Partager sur Twitter

                  L'important n'est pas de savoir maîtriser une technologie à la perfection, mais d'avoir une belle capacité d'adaptation.

                    30 juillet 2009 à 15:08:14

                    Pour supprimer un élément, tu le récupères grâce à getElementById ou getElementsByTagName.

                    Et ensuite, tu fais
                    element.parentNode.removeChild(element)


                    Ca enlèvera l'image sans caler un NaN ... :-°
                    • Partager sur Facebook
                    • Partager sur Twitter
                      30 juillet 2009 à 18:20:28

                      Merci de ton aide Golmote, maintenant, tout marche sauf la fonction move_perso() mais elle a été vraiment allégée grâce à toi, mais la console me sort une erreur bizarre:
                      uncaught exception: [Exception... "Could not convert JavaScript argument arg 0"  nsresult: "0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)"  location: "JS frame :: http://myaxs.fr/kym/Mini-Jeu/script/defaut.js :: move_perso :: line 289"  data: no]
                      
                      Line 0


                      Merci de m'aider, j'ai mis à jour les sources :) .
                      Au revoir!
                      • Partager sur Facebook
                      • Partager sur Twitter

                      L'important n'est pas de savoir maîtriser une technologie à la perfection, mais d'avoir une belle capacité d'adaptation.

                        30 juillet 2009 à 19:03:34

                        Je peux voir le HTML généré de l'appel de la fonction move_perso() ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          30 juillet 2009 à 19:10:08

                          Je ne suis pas sûr, mais tu parles bien de ça:
                          <a style="border: 1px solid rgb(175, 175, 175); margin: 0pt;" href="#header" onclick="move_perso(8, 13, 1, 'Humain', 'Homme', 'Young');request(8, 13, 1);" class="case" id="id-8, 13"><img src="images/persos/Humain_Homme_Face.png" style="position: absolute;" alt="I" id="Young" height="38px" width="20px"></a>
                          ?
                          • Partager sur Facebook
                          • Partager sur Twitter

                          L'important n'est pas de savoir maîtriser une technologie à la perfection, mais d'avoir une belle capacité d'adaptation.

                            30 juillet 2009 à 19:35:04

                            Remplace cette ligne :

                            gEBI(pseudo).parentNode.removeChild(pseudo);
                            


                            par

                            var div = gEBI(pseudo);
                            div.parentNode.removeChild(div);
                            


                            ;)
                            • Partager sur Facebook
                            • Partager sur Twitter
                              30 juillet 2009 à 19:47:33

                              Ah merci, mais j'ai pas fait exactement pareil, tu m'as encore inspiré une autre façon :p !
                              gEBI(pseudo).parentNode.removeChild(gEBI(pseudo));
                              Résolu :D !
                              • Partager sur Facebook
                              • Partager sur Twitter

                              L'important n'est pas de savoir maîtriser une technologie à la perfection, mais d'avoir une belle capacité d'adaptation.

                              [AJAX]Déplacement d'un joueur qui foire de temps en temps...

                              × 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.
                              • Editeur
                              • Markdown