J'avoue n'avoir strictement rien comprit a ce code, je dois pas avoir le niveau en trigo :respect:
En tout cas, sa marche, je suis en train d'analyser et de modifier ce que je peux pour l'implanter dans la vallée des larmes.
Quand j'aurais fini (si je fini) je posterais la fonction, sa pourra servir a d'autre . Grand merci à toi.
(Vont faire une drôle de tête mes joueurs :good
[edit]
Il doit y avoir un problème quelques part, parce qu'il arrive a me trouver des cases qui n'existe pas...
[Edit 2]: c'est en bidouillant qu'on reproduit les bug. Ton code semble foirer en largeur, en déplacent le personnage on a un joli bug:
En tout cas, sa marche, je suis en train d'analyser et de modifier ce que je peux pour l'implanter dans la vallée des larmes.
Quand j'aurais fini (si je fini) je posterais la fonction, sa pourra servir a d'autre . Grand merci à toi.
(Vont faire une drôle de tête mes joueurs :good
[edit]
Il doit y avoir un problème quelques part, parce qu'il arrive a me trouver des cases qui n'existe pas...
[Edit 2]: c'est en bidouillant qu'on reproduit les bug. Ton code semble foirer en largeur, en déplacent le personnage on a un joli bug:
Code PHP :
<?php
//calcule l'angle en degres (sur 360°)
function angle($x,$y)
{
$module = sqrt($x*$x + $y*$y);
$angleCos = acos($x / $module);
$angleSin = asin($y / $module);
if($angleSin < 0)
if($angleCos > pi()/2)
$angleCos = pi()*2 - $angleCos;
else
$angleCos = pi()*2 + $angleSin;
return 180*$angleCos/pi();
}
//array( ["x,y"] => type de terrain (pour la transparence par exemple (pas gerer ici))
$c_obstacle = array(
'5,6'=>3,
'3,2'=>3,
'5,3'=>3,
'8,8'=>3,
'8,9'=>3,
'13,14'=>3,
'20,5'=>3,
'18,10'=>3,
'16,15'=>3,
'12,14'=>3
);
$angle_obstacle = array();
$jx = 15;
$jy = 15;
//cherche les obstacles, la fourchette de l'angle et leur distance par rapport au joueur
foreach($c_obstacle as $coord=>$type){
list($x,$y) = explode(",", $coord);
$x -= $jx;
$y -= $jy;
/*definit l'anglez de chaque coin de la case
(0.5 => l'obstacle prend toute la case
0.45=> l'obstacle prend 90% de la case)*/
$angle_coin = array(
angle($x+0.45, $y+0.45),
angle($x+0.45, $y-0.45),
angle($x-0.45, $y-0.45),
angle($x-0.45, $y+0.45)
);
$angle_obstacle[] = array(
min($angle_coin), //angle min
max($angle_coin), //angle max
sqrt($x*$x + $y*$y) //distance
);
}
for($y=25;$y>=1;$y--){
for($x=1;$x<=25;$x++){
$cacher = false;
//regarde si la case est cacher par un obstacle
foreach($angle_obstacle as $values){
//zone d'ombre à porter (pas obligatoireent sur la case traiter)
if($values[2] < sqrt(pow($x-$jx, 2) + pow($y-$jy, 2))) {
$angle = angle($x-$jx,$y-$jy);
//verifie si la zone d'ombre est bien sur la case en cours de traitement
if($values[0] <= $angle AND $angle <= $values[1]){
$cacher = true;
//case cacher, pas la peine de continuer à chercher
break;
}
}
}
if(isset($c_obstacle["$x,$y"]))
echo '<span style="color:red">O </span>';
elseif(true === $cacher)
echo '<span style="color:black">A </span>';
elseif($jx == $x AND $jy == $y)
echo '<span style="color:green">P </span>';
else
echo '<span style="color:gray">C </span>';
}
echo '<br />';
}
echo '<pre>';
print_r($angle_obstacle);
?>
C'est dommage car sa semblais fonctionner correctement :'(