Bonjour,

Edit j'ai trouvé la solution pour les déplacements seul mon problème de class que je n'arrive pas à enlever persiste

Je suis en train de faire un jeu de plateau en JS. Pour la partie mouvement des joueurs jaimerais utiliser jQuery. J'essai depuis plusieurs jours mais je ne trouve pas la solution. C'est la partie jQuery qui me pose problème, pour l'instant je ne m'occupe pas de la position du sprite je gererais les positions des differentes images aprés. Je conserve la m^me position pour mes déplacements pour l'instant.

Ce que je fais

Tout fonctionne bien jusqu'au comm. : " /***déplacement" ou débute jQuery.

Je n'arrive pas à enlever la class "joueur1" quand mon sprite monte ou vas à droite par exemple toutes les cases conservent cette class. Je dois mal utiliser jQuery, j'ai plusieurs problèmes notament je ne peux pas revenir sur une position car le background est vide il faut absolument que la class joueur 1 s'enlève quand le joueur part, le toogleClass agit dans un sens seulement car il met bien la class mais il ne l'enlève pas
Mes div ont des id "board-0" à "board-99" d'ou l'utilisation de substr() pour récuperer les chiffres que je passe ensuite dans parseInt().

var Personnage = {
    initPerso: function (nom, sante, player1, player2) {
        this.nom = nom;
        this.sante = sante;
        this.player1 = "url('../images/monstre.png') 0% 0% /400% 400% rgba(165, 150, 116, 0.61)";
        this.player2 = "url('../images/demon.png') 0% 0%/400% 400% rgba(165, 150, 116, 0.61)";

    },
    afficher: function () {
        var mesDiv = document.getElementsByClassName('accesOn');
        //Personnage 1
        console.log(mesDiv);
        var pos1 = Math.round(Math.random() * mesDiv.length);
        var maDivPos1 = mesDiv[pos1];
        maDivPos1.style.background = this.player1;
        maDivPos1.classList.add('joueur1');

        //Recuperation ID de maDivPos1
        var maDivId = maDivPos1.id;

        //trasformation JS vers Jquery
        var $player1 = this.player1;
        var $posDiv = maDivPos1;

        //personnage 2
        var pos2 = Math.round(Math.random() * mesDiv.length);
        var maDivPos2 = mesDiv[pos2];
        maDivPos2.style.background = this.player2;

        maDivPos2.classList.add('joueur2');

        //************************** deplacement
        function main() {
            var $nombreId = maDivId.substr(6);
            var $posDiv1 = parseInt($nombreId);

            var $largeur = ($('#contenu').width());
            var $hauteur = ($('#contenu').height());
            //  var $posPlay1X = parseInt($($posDiv1).css('left'));
            // var $posPlay1Y = parseInt($($posDiv1).css('top'));
            $(window).on('keydown', function (e) {
                var touche = e.which;
                switch (touche) {
                //haut (les déplacements fonctionne bien)
                    case 38:

                        var $newPosH = $posDiv1 -= 10;
                       var $newPos = $("#board-" + $newPosH);

                        $($newPos).css('background', $player1);
                        $('.joueur1').css('background', "");
                        $($newPos).toggleClass('joueur1'); // Ajoute la class mais ne l'enleve pas
                        $($posDiv).removeClass('joueur1'); // PAS BON retire la class sur la first position sert a rien!!!

                        break;
                        //Droite  ( j'ai trouvé la solution pour les déplacements)
                    case 39: 

                        break;
                        //bas
                    case 40:

                        break;
                        //Gauche
                    case 37:

                        break;
                    default:
                        break;
                }

            });

        }
        $(document).ready(main);
    };

Merci d'avance à ceux qui prendront le temps de m'aider
si je suis pas clair ou si j'explique mal dites moi.

8 réponses


Flo.S
Réponse acceptée

Hello, idéalement, au lieu de faire un toggleClass(), tu peut faire un addClass(), et juste après, tu met une condition dans laquelle tu vérifie avec hasClass() si ton élément à la classe que tu recherche, sa te permettra de l'enlever. Essaie déjà une fois avec ça, et tiens nous au courant :D

Flo.S
Réponse acceptée

Pour ton soucis, effectivement, c'est soit du JS qui pose problème, ou tout simplement une histoire de CSS :D Mais sinon c'est rien de très compliquer maintenant ^^ Tiens nous au courant :)

Pour les images :

![Image of Yaktocat](https://octodex.github.com/images/yaktocat.png)

Rendu :

Source : https://guides.github.com/features/mastering-markdown/

Parad0xJ
Auteur

Merci beaucoup de ta réponse je vais tester ça tout de suite. Je reviens dire aprés.

Parad0xJ
Auteur

Alors ça ne rends pas exactement l'effet voulu mais je pense qu'on est pas loin il suffit peut être juste d'un réglage
ça enléve bien la class mais pas sur la première position( ça je peux regler sans problème) par contre aprés ça enleve bien. Mais le soucis c'est que le background ne s'enlève pas donc l'image reste affiché partout ou je passe sauf la première position.

C'est peut être juste un réglage à affectuer. Quoi que en réalité si ça a reglé quand même ce que je cherchais à faire, c'est juste que ça a posé un autre problème. Je vais tenter de regler ça

Ps : Quelqu'un peut me montrer un tuto pour poster une image sur mes posts ici avec markdown, une image sur mon PC par exemple ? J'ai cherché bien sûr mais j'ai pas trouvé

Merci beaucoup

Parad0xJ
Auteur

Donc ça veut dire, pour poster une image ici, que tu es toujours obligé d'heberger sur un service externe. Je comprends pas bien l'interet !? Mais bon peu importe. Merci pour tout en tous cas je reviendrais dire si jamais j'arrive à résoudre le tout
Un grand merci pour ton aide

Effectivement, hébergement externe obligatoire (ça évite de surcharger le serveur de Grafikart je pense).
Bonne continuation à toi ! :D

Parad0xJ
Auteur

Ah oui effectivement tu as raison j'ai pas pensé à ça vu le nombre de personne au bout d'un moment c'est vrai que ça peut allourdir considerablement. Je comprends mieux.

Parad0xJ
Auteur

Bon Finalement je me casse la tête depuis ce matin, le problème que ça créé est encore plus embetant que le fait que la class ne s'enlêve pas. le background reste partout ou je passe c'est pire comme le background c'est mon sprite, si j'essai de l'enlever on ne voit plus rien. Je recherche toujours une solution pour supprimer cette maudite class joueur1.
Peut être une piste avec la condition si la class est ! joueur1 ( ce qui veut dire que je suis partie de la case), alors background === " " ? je vais tester
Merci à vous

Edit 00:34 J'ai trouvé !! sans la condition, il suffisait de chainer les methodes je sais pas si c'est tres clean !!? mais ça marche parfaitement. Tu ma quand même mis sur la bonne voie avec la condition.

$('.joueur1').css('background', "").removeClass('joueur1');
                        $($newPos).addClass('joueur1');