19-04-2012, 12:05 PM
Yop J'ai une problème syntaxique à vous soumettre en Javascript.
Rapidement, je dois m'adapter à l'API d'une classe de pathfinding nommée Graph, fournie par un programmeur meilleur en algo que moi iffle:
Deux différences avec mon implémentation :
- Mes obstacles sont référencés dans un tableau en 2 dimensions X et Y avec une valeur > 0
Or pour construire son algo, la classe Graph utilise des 0 et 1.
Bref c'est pas très compliqué, je fais le remplacement en mappant les deux tableaux, en fonction des collisions joueurs & décors et en excluant le joueur principal.
Le plus problématique, c'est que le tableau de la classe Graph est de la forme [X, Y], et le mien [Y, X] (j'ai toujours fait comme ça, suis-je "normal" ? ^^). De ce fait il faut que j'inverse les lignes et les colonnes de tableau.
Bien sûr, il suffirait de créer un nouveau tableau, de boucler, de tout replacer dedans. Mais je me demandais si quelqu'un avait rencontré le problème, et une solution plus élégante/propre à proposer
Quelques précisions :
- isBlocked() vaut vrai s'il y a une collision avec le décors
- isCollide() vaut vrai s'il y a une collision avec un Personnage
Rapidement, je dois m'adapter à l'API d'une classe de pathfinding nommée Graph, fournie par un programmeur meilleur en algo que moi iffle:
Deux différences avec mon implémentation :
- Mes obstacles sont référencés dans un tableau en 2 dimensions X et Y avec une valeur > 0
Or pour construire son algo, la classe Graph utilise des 0 et 1.
Bref c'est pas très compliqué, je fais le remplacement en mappant les deux tableaux, en fonction des collisions joueurs & décors et en excluant le joueur principal.
Le plus problématique, c'est que le tableau de la classe Graph est de la forme [X, Y], et le mien [Y, X] (j'ai toujours fait comme ça, suis-je "normal" ? ^^). De ce fait il faut que j'inverse les lignes et les colonnes de tableau.
Bien sûr, il suffirait de créer un nouveau tableau, de boucler, de tout replacer dedans. Mais je me demandais si quelqu'un avait rencontré le problème, et une solution plus élégante/propre à proposer
/*
* On parcoure le calque des passages selon les Y
*/
var preGraph = map.passages.map(function (line, y) {
/*
* On parcoure la ligne du calque des passages selon les X
*/
return (
line.map(function (row, x) {
/*
* On vérifie s'il y'a une collision avec un obstacle ou un Personnage différent du joueur
* Si c'est le cas on assigne la valeur 1, sinon 0
*/
return (map.isBlocked(x, y) || (map.isCollide(x, y) && joueur.x !== x && joueur.y !== y)) ? 1 : 0;
})
);
});
Quelques précisions :
- isBlocked() vaut vrai s'il y a une collision avec le décors
- isCollide() vaut vrai s'il y a une collision avec un Personnage