23-05-2008, 04:10 PM
Eureka!!!
J'ai trouvé, à force de comparer mes images...
Alors, première étape: savoir si le perso est sur une case paire ou impaire (axe X):
$mod=$perso['x']%2; (pair=0 / impair=1)
dans la boucle d'affichage:
Si impaire, modification de position des tuiles
if($mod)
{
if($j%2==1){$i-=1;}
$i+=1;
}
en traduit:
SI le perso est sur un X impair
{
SI X de la case en cours est impaire => l'indice Y est diminué (la case "remonte" d'un cran
[si je me limite à ca, la position du perso n'est pas centré au meme endroit à chaque déplacement... il faut donc corriger toute la position Y de la carte] => Y +1
}
Notez que je manipule i et j au lieu de x et y, simplement pour éviter un positionnement posX= 2500px, posY=3521px
enfin, bref, mon code, si ca peut aider quelqu'un:
J'ai trouvé, à force de comparer mes images...
Alors, première étape: savoir si le perso est sur une case paire ou impaire (axe X):
$mod=$perso['x']%2; (pair=0 / impair=1)
dans la boucle d'affichage:
Si impaire, modification de position des tuiles
if($mod)
{
if($j%2==1){$i-=1;}
$i+=1;
}
en traduit:
SI le perso est sur un X impair
{
SI X de la case en cours est impaire => l'indice Y est diminué (la case "remonte" d'un cran
[si je me limite à ca, la position du perso n'est pas centré au meme endroit à chaque déplacement... il faut donc corriger toute la position Y de la carte] => Y +1
}
Notez que je manipule i et j au lieu de x et y, simplement pour éviter un positionnement posX= 2500px, posY=3521px
enfin, bref, mon code, si ca peut aider quelqu'un:
Code PHP :
<?php
//Infos sur la carte
$n = 28; //taille d'un coté en pas iso
require('config.php');
//position du perso
$perso=array("x"=> 150, "y"=>90,"vision"=>5); //ca, c debuggage
if(isset($_GET["x"])){$perso["x"]=htmlentities($_GET["x"]);}
if(isset($_GET["y"])){$perso["y"]=htmlentities($_GET["y"]);}
// On définit le tableau en fonction de la vision
$x_min = $perso['x']-$perso['vision'];
$x_max = $perso['x']+$perso['vision'];
$y_min = $perso['y']-$perso['vision'];
$y_max= $perso['y']+$perso['vision'];
$nbLignes=$y_max-$y_min;
$mod=$perso['x']%2;
//récupération des données du terrain
$req="SELECT * FROM carte WHERE x BETWEEN '".$x_min."' AND '".$x_max."' AND y BETWEEN '".$y_min."' AND '".$y_max."' ORDER BY y,x";
//echo '<p>'.$req.'</p>';
$query = mysql_query($req,$base_id) or die('erreur : '.mysql_error());
while($d=mysql_fetch_assoc($query))
{
//correction position en pixel à l'affichage
$j=$d["x"]-$x_min;
$i=$d["y"]-$y_min;
//alignement correct de la case
if($mod)
{
if($j%2==1){$i-=1;}
$i+=1;
}
$posX = $j*(sin(deg2rad(75))
+ sin(deg2rad(45)))*$n
- ($i+ceil($j/2))*(sin(deg2rad(15))
+ sin(deg2rad(75)))*$n
+ ($nbLignes-1)*(sin(deg2rad(15))
+ sin(deg2rad(75)))*$n;
$posY = ($i+ceil($j/2))*(sin(deg2rad(75))
+ sin(deg2rad(15)))*$n/2
+ $j*sin(deg2rad(13.5))*$n;
// affichage de la case
$var_carte .= '<div class="case" style="top:'.$posY.'px;left:'.$posX.'px;';
if($d["x"]==$perso["x"] && $d["y"]==$perso["y"])
{
$var_carte .= 'background-image: url(\'images/tile_hexa_iso_0.png\');"></div>';
}
else
{
$var_carte .= 'background-image: url(\'images/tile_hexa_iso_'.$d["id_terrain"].'.png\');">'.$d["x"].'/'.$d["y"].'</div>';
}
}
echo $var_carte;
?>