03-01-2008, 01:56 PM
je suis entrain de dévellper un jeu en ligne aussi et j'ai aussi eu des problèmes pour les ressources, moi j'ai procédé comme ça (je simplifie en retirant le morceaux qui calcule combien doit gagner le joueur en fonction du niveau de son batiment):
Dans la bdd :
1 champ "timestamp_ancien" qui indique quand la visiteur a actualisé la page pour la dernière fois
1 champ "metaux_ancien" qui indique combien il avait de métal a ce moment
1 champ "production" qui indique combien il produit (par heure dans mon cas)
calcul :
$metaux = ((($timestamp-$timestamp_ancien)/3600)*$production)+$metaux_ancien;
Le problème est que quand la prod est faible, les ressources n'augmentent pas si l'utilisateur actualise tout le temps (exemple si il produit 1 unité toutes les 10 secs et qu'il actualise toutes les 5 secs, le champ timestamp_ancien s'actualise vu que la page a été chargée, mais pas metaux_ancien vu qu'il n'augmente pas.
La solution que j'ai choisie, c'est de mettre le champ "metaux_ancien" en float pour avoir un nombre a virgule très précis, et de créer une variable $metaux_affichés = floor($metaux);
Il doit aussi avoir une solutio en faisant quelquechose du style :
si les ressources n'augmentent pas, n'actualise pas les timestamp_ancien, mais je préfère le solution du float (ce n'est qu'un avis personel)
Voila, en éspérant que j'ai pas répondu a coté^^
Dans la bdd :
1 champ "timestamp_ancien" qui indique quand la visiteur a actualisé la page pour la dernière fois
1 champ "metaux_ancien" qui indique combien il avait de métal a ce moment
1 champ "production" qui indique combien il produit (par heure dans mon cas)
calcul :
$metaux = ((($timestamp-$timestamp_ancien)/3600)*$production)+$metaux_ancien;
Le problème est que quand la prod est faible, les ressources n'augmentent pas si l'utilisateur actualise tout le temps (exemple si il produit 1 unité toutes les 10 secs et qu'il actualise toutes les 5 secs, le champ timestamp_ancien s'actualise vu que la page a été chargée, mais pas metaux_ancien vu qu'il n'augmente pas.
La solution que j'ai choisie, c'est de mettre le champ "metaux_ancien" en float pour avoir un nombre a virgule très précis, et de créer une variable $metaux_affichés = floor($metaux);
Il doit aussi avoir une solutio en faisant quelquechose du style :
si les ressources n'augmentent pas, n'actualise pas les timestamp_ancien, mais je préfère le solution du float (ce n'est qu'un avis personel)
Voila, en éspérant que j'ai pas répondu a coté^^