JeuWeb - Crée ton jeu par navigateur
Probleme infobulle et boucle [REGLE] - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Probleme infobulle et boucle [REGLE] (/showthread.php?tid=1943)

Pages : 1 2


Probleme infobulle et boucle [REGLE] - Kassak - 31-10-2007

Bonsoir, alors je vous explique mon probleme, lors de l'affichage de ma map, avec les joueurs, les monstres et tout ce qui traine par la, j'ia souhaité faire une infobulle pour que quand le joueur passe la souris sur une case, il voye les pseudos des joueurs sur la case pointée.

Tout ceci se fait dans une boucle for, mais mon probleme, dans l'infobulle, seul un pseudo s'affiche, le 1er joueur sur la map, donc meme s'il y en a 50, un seul sera ecrit et je n'arrive pas tellement a y remedier..

voici mon code, je vais vous donner le tableau entier, en ne gardant que la partie detection des joueurs, j'espere que vous allez comprendre quelque chose ( mon infobulle est faites en CSS ) :

Code PHP :
<?php 
echo '<table background="image/terrain.gif" cellspacing="0" cellpadding="0" class="carte">';
echo
'<tr><td align="center" valign="middle">I</td>';






//on affiche les positions x sur la premiere ligne
for($x=$x_debut;$x<=$x_fin;$x++) echo '<td align="center" valign="middle">'.$x.'</td>'."\n";

//on affiche lignes par lignes la position y, les autres joueurs et les batiments
for ($y=$y_debut;$y<=$y_fin;$y++)
{
echo
'<tr ><td align="center" valign="middle" >'.$y.'</td>'."\n";//affichage de la position

for($x=$x_debut;$x<=$x_fin;$x++) {// pour chaque lignes

if($x==$posx && $y==$posy)//si on est sur la position du joueur

echo '<td align="center" valign="middle"><a class="info" onclick="return false"><img src=image/rond.gif ><span>
Vous êtes ici</span></a>
</td>'
;//on affiche l'avatar de votre perso
else
if(!empty(
$TabMAPjoueur[$x][$y]))//si on tombe sur un autre joueur
echo '<td align="center" valign="middle"><a class="info" onclick="return false"><img src=skin/'.$TabMAPjoueur[$x][$y].'.gif><span>
Il y a '
.$TabMAPjoueur2[$x][$y].' ici</span></a></td>';//on affiche l'avatar du joueur
else
echo
'<td></td>';
}
echo
'</tr>';//on ferme la ligne et on passe a la ligne suivate
}
echo
'</table>';//on ferme la table


La ligne qui m'interesse, la ou il y a l'infobulle est celle la :

Code PHP :
<?php 
echo '<td align="center" valign="middle"><a class="info" onclick="return false"><img src=skin/'.$TabMAPjoueur[$x][$y].'.gif><span>
Il y a '
.$TabMAPjoueur2[$x][$y].' ici</span></a></td>';

La variable $TabMAPjoueur2[$x][$y] contient les pseudos des joueurs.


Merci de votre aide, et si vous pigez pas dites le moi j'essayerais d'être plus clair


RE: Probleme infobulle et boucle - exopi - 31-10-2007

Salut,

Alors deja pour faire ton code proprement, je te conseille de mettre toujours des accolades aprés des for et des if .
En particulier ici ca peu faire des choses assez compliqué a comprendre Wink donc source de bug
Code :
else
         if(!empty($TabMAPjoueur[$x][$y]))//si on tombe sur un autre joueur
        echo '<td align="center" valign="middle"><a class="info" onclick="return false"><img src=skin/'.$TabMAPjoueur[$x][$y].'.gif><span>
Il y a '.$TabMAPjoueur2[$x][$y].' ici</span></a></td>';//on affiche l'avatar du joueur
                         else
          echo '<td></td>';

!Aussi faire 50 echo c'est pas bon du tout, ca va ralentir à fond ton programme, le mieux c'est que tu concatène une variable $echo par exemple, et que a la fin de tes boucles du ecrive ; echo $echo;

Sinon à la fin du premier for, tu as oublie un </tr>

Bon je vois pas ce qui va pas dans ton programmeSad, ca vient peu etre du css et des id, si ils sont tous identique, seul le premier fonctionnera...


RE: Probleme infobulle et boucle - V1nc3 - 31-10-2007

essaye avec :
Code PHP :
<?php 
echo '<td title ="Il y a '.$TabMAPjoueur2[$x][$y].' ici" align="center" valign="middle"><a class="info" onclick="return false"><img src=skin/'.$TabMAPjoueur[$x][$y].'.gif></a></td>';



RE: Probleme infobulle et boucle - Kassak - 31-10-2007

V1nc3 je ne vois pas en quoi mettre un title arrangerait mon probleme.

Exopi, je n'ai pas oublié de TR, un seul s'ouvre et un seul se ferme, car cela affiche les joueurs ligne par ligne, pour les accolades, je vais les rajouter, je venais justement en modifiant des trucs, de creer une erreur, qui s'est resoud grace aux accolades.
Pour les echo, je piges pas ce que tu me dis, il n'y a qu'un echo par condition (if echo else echo else echo) et en tout il y en a 4 donc ca va pas ralentir des masses.

Et pour mon probleme alors?^^vous avez compris ce que je souhaite faire au moins?


RE: Probleme infobulle et boucle - Nessper - 31-10-2007

est-ce que les avatars qui s'affichent sont ceux des autres joueurs ou bien c'est aussi toujours celui du joueur ?
Je ne vois pas pourquoi ca ne marche pas. Es-tu sûr que tu variable $TabMAPjoueur2[$x][$y] contient bien ce que tu veux ?


RE: Probleme infobulle et boucle - Kassak - 31-10-2007

En 1er on cherche ou on est nous, et on affiche l'image rond.gif et ensuite on affichage l'image des autres joueurs, mais la pareil, s'il y a 50 persos sur une case, on ne va afficher qu'un seul avatar sur la map, et heureusement, je pense que ca vient de la le probleme, car c'est pareil pour les pseudos en faites on ne va chercher que celui que l'on voit pas tous les autres qu'il y a derriere.

J'avais pensé a faire un select dans la boucle For des pseudos donc x et y correspond a $x et $y générée dans la boucle, et ensuite refaire encor eune autre boucle pour les afficher, et euhh..j'ai du redemarer l'ordi ca a legerement foiré^^

Donc je vois pas du tout...


RE: Probleme infobulle et boucle - Kheldar - 31-10-2007

Je pense de mon coté, qu'il y a bien un problème d'enchainement de <tr> ou de <td> dans ton script.

En effet, (je ne sais pas très bien à quoi correspondent tes variables $x et $y) :
$x_debut = 1;
$x_fin = 3;
$y_debut = 1;
$y_fin = 3;

dans la génération du code HTML , ca va nous donner :

<table background="image/terrain.gif" cellspacing="0" cellpadding="0" class="carte">
<tr><td align="center" valign="middle">I</td>

edit :
Effectivement, il n'y a à priori pas de problème de </tr>, car j'ai un joli carré sur mon écran, avec les positions et autres.
Par contre, sur Firefox, en assignant le tableau $TabMAPjoueur2, j'ai bien untel est ici, untel2 est ici , et ma position (vous êtes ici).

Sur IE, ca a l'air de poser quelques soucis.
<td align="center" valign="middle">1</td><td align="center" valign="middle">2</td><td align="center" valign="middle">3</td>

<tr ><td align="center" valign="middle" >1</td>...</td></tr>
<tr ><td align="center" valign="middle" >2</td>...</td></tr>
<tr ><td align="center" valign="middle" >3</td>...</td></tr>
</table>


je pense qu'il devrait y avoir un </tr> apres la fin de génération des $x. un truc comme ca :

Citation :for($x=$x_debut;$x<=$x_fin;$x++) echo '<td align="center" valign="middle">'.$x.'</td>'."\n";

echo '</tr>';

Edit : effectivement il n'y a pas l'air d'avoir de problème au niveau des </tr>.
la map s'affiche correctement sur firefox.
En assignant le tableau $TabMAPjoueur2, j'ai bien untel est ici, untel2 est ici .... et à ma position, vous êtes ici.

Par contre, sur IE, ca ne marche pas.


RE: Probleme infobulle et boucle - Kassak - 31-10-2007

Je vous assure qu'il n'y a pas de probleme de tr ou td ou ce que vous voulez, l'affichage de la map marche très bien, c'est pas de la que vient le probleme, j'ai essayé de faire les modifications que vous m'avez dites et la ca foire tout


RE: Probleme infobulle et boucle - jo_link_noir - 31-10-2007

p'tite question $TabMAPjoueur et $TabMAPjoueur2 tu les sors d'une BDD ?


RE: Probleme infobulle et boucle - Kassak - 01-11-2007

Voici la requete avant le code plus haut :

Code PHP :
<?$sq2 = 'SELECT pseudo, avatar_joueur, posx, posy, map_id FROM membre WHERE posx between '.$x_debut.' and '.$x_fin.' AND posy between '.$y_debut.' and '.$y_fin.' AND pseudo<>"'.$_SESSION['pseudo'].'" ORDER BY posx DESC,posy DESC';
$req = mysql_query($sq2) or die(mysql_error());
while (
$data = mysql_fetch_array($req)) {
if (empty(
$TabMAPjoueur[$data['posx']][$data['posy']]) && empty($TabMAPjoueur2[$data['posx']][$data['posy']]))
$TabMAPjoueur[$data['posx']][$data['posy']] = $data['avatar_joueur'];
$TabMAPjoueur2[$data['posx']][$data['posy']] = $data['pseudo'];
}
mysql_free_result($req);?>

Et oui elle est baleze:p