16-05-2007, 11:41 PM
ankh a écrit :Salut a tous!
D'abord merci a nemesis_elite pour le script, donc je m'inspire pour mon projet.
J'arrive a faire déplacer le perso sur la map par des boutons "submit", en changeant les coordonées de l'image du perso.
Le changement de map lorsque j'arrive sur un bord se fait très bien aussi(a perfectionner), donc jusqu'ici pas de problèmes.
MAIS, car il y a un mais, je bloque sur les bloquages justement
En clair je n'arrive pas a bloquer le perso pour qu'il ne puisse pas aller sur une case avec un arbre par exemple. J'utilise un attribut "block" en booléen sur chaque case(0=ouvert, 1=bloqué).
Quelqu'un a une piste a m'indiquer pour passer cette "épreuve"?
Merci
Je n'ai pas lu le script mais j'ai une p'tite idée sur le principe, il faut simplement tester ton booléen : si la case est franchissable, on déplace le perso vers la case demandée sinon, on affiche (ou non) un message d'erreur et on laisse notre fier guerrier sur sa tuile.
Dans les faits, tu as deux possibilités : ou bien tu fais ton test en javascript (ce qui fluidifie la navigation) ou bien tu le fais en php. Le mieux est encore d'appliquer les deux méthodes, pour que les joueurs n'ayant pas de javascript d'activé puissent tout de même jouer.
Par contre, je ne comprends pas bien où tu places ton attribut "block" et si c'est bien dans la balise ouvrante div de chaque case, j'ai peur que cette façon de faire ne soit pas valide (du point de vue de la syntaxe xhtml et peut-être même html). Pour contourner ce problème, le mieux est de stocker ces infos dans un tableau à double entrées (arrays imbriqués), que ce soit en javascript ou en php.
En php, ton hittest ressemblerait donc à quelque chose comme ça :
Code PHP :
<?php
//-----------------------------------
// On déclare notre tableau (test pour 5x5 cases)
// qui définit si une case est franchissable
//-----------------------------------
$aCarte = array(
array(0, 1, 0, 0, 0), // Première ligne
array(0, 0, 0, 0, 0), // Deuxième etc.
array(0, 0, 0, 1, 0),
array(0, 0, 0, 0, 0),
array(1, 0, 0, 0, 0)
);
//-------------------------------------
// Récupération des coordonnées de la case de destination
// (il ne faut pas oublier qu'un tableau commence à la valeur 0)
//-------------------------------------
$iX = 3; //4e case ...
$iY = 1; // ... de la 2e ligne
//-------------------------------------
// On fait notre test de collision et on agit en fonction
//-------------------------------------
if($aCarte[$iY][$iX]) { //Si la case est franchissable
// Alors on déplace notre bonhomme.
// On va dire qu'on a un méthode de la classe Aventurier pour ça ;)
$oAventurier->Mouvement($iX, $iY);
}
else { // Si la case n'est pas franchissable
//On ne fait rien et on affiche un message d'erreur...
}
Voilà comment que boutiquerais mon truc. Ce n'est peut-être pas ce qu'il y a de plus optimisé mais je pense que ça fonctionne. Je ne suis pas une bête en javascript donc je ne vais pas te faire le script mais le principe est exactement le même (la structure du script aussi et les tableaux imbriqués fonctionnent de la même façon). Il te suffirait de créer une fonction Franchissement ou un truc dans le genre, avec les coordonnées en paramètres, que tu appellerais grâce à l'événement onclick).
Voilà, j'espère que ça répond à ta question ! @+