JeuWeb - Crée ton jeu par navigateur
Questions - 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 : Questions (/showthread.php?tid=4013)

Pages : 1 2


Questions - Gabriel - 28-05-2009

Bonjour à tous,
Dans mon jeu, je gère l'affichage d'une carte décomposée en cases (environ 400)(une image par case) Pour les afficher toutes j'utilise une boucle. Cependant, si le joueur se déplace sur la carte, toutes les images sont rechargées à nouveau et ça prend pas mal de temps.

Il y a t-il un moyen d'éviter ça ?

Merci d'avance,
Gabriel


RE: optimiser le temps de chargement - Allwise - 28-05-2009

Au lieu de recharger la page, tu envoies les données au serveur en Ajax, et tu ne modifies que les trucs qui sont censés bouger sur ta carte, pour pas recharger toutes les cases ?


RE: optimiser le temps de chargement - Gabriel - 28-05-2009

OK par contre je débute en AJAX donc si qqn connaît un tuto ou c'est bien expliqué je suis preneur (french only par contre ^^)


RE: optimiser le temps de chargement - lcfseth - 29-05-2009

Je ne vais pas te parler du côté ajax, c'est déja traité dans plusieurs sujet.
Je vais parler en general ( une technique qu'en utilisait beaucoup à l'époque de la 2D ):
D'abords, je te conseille de dessiner la map en deux temps ( voir trois ), le terrain -> les batiments + les decorations (arbres, routes...) -> Les persos.
* Pour le terrain, essaye de ne pas utiliser beaucoup trop de tuiles differentes. Si c'est le cas, utilise plutot une grande image, qui sera chargé une fois pour toute pas le navigateur. Tu n'a pas non plus besoin d'une Bitmap 32 bits pour des tuiles 16x16, du 256 couleur fait parfaitement l'affaire.
* Si un élément passe de la case A vers B, tu dessine l'element sur la case B et tu redessine la case A en utilisant le background et eventuellement le batiments.
* En cas de scrolling, tu utilise la methode precedente, mais tu ne redessine que les decorations et les persos decalés d'une case. à noter que si tu utilise une grande image pour le background, celle si est deja stocké sur l'ordinateur client et donc tu peux alors te permettre de la redessiner ( du coup tu n'a plus besoin de dessiner separement les routes et les arbres, puisqu'il peuvent etre integre dans cette image ).

Enfin je pense que pour un deplacement sans scrolling, tu devrais pouvoir faire ca en javascript sans passer pas Ajax. C'est beaucoup plus fluide pour l'utilisateur (Ajax demande tout de meme une connexion au serveur ) et demande moins de ressources serveur. Le seule inconveniant est que c'est plus dur à coder car y'a plus de possibilité à prendre en compte, mais c'est là le prix de l'optimisation.
Bien sur comme toujours avec le JavaScript, il faut veiller à proteger ses scripts car ils sont facilement exploitable.

Ps: Dsl aussi pour l'orthographe. Il est 3h du mat, pas trop envie de me relire Smile


RE: optimiser le temps de chargement - wild-D - 29-05-2009

toutes les images sont rechargées à chaque fois^^

cela veux dire que tu ne gère pas correctement les informations de mise en cache (faut vérifier dans ta conf du serveur que pour les images gif,png, jpeg, etc... tu envoie bien l'en-tête http de mise en cache - si t'as pas accès à la conf de apache parce que serveur mutu - tu peux le faire sinon dans le .htaccess).

si les images sont générée par gd, faut voir ce que tu envoie aussi comme en-tête avec php (la plupart du temps par défaut c'est justement: surtout pas de mise en cache puisque php c'est des pages dynamiques, donc dans ton script faudra t'assurer que pour les images que tu génère si elles sont pas/peu évolutive d'indiquer leur mise en cache)

p.s.
bon après ça va aussi dépendre de la config de ton navigateur; si t'as forcé la non mise en cache -parce que comme tu travaille en dev, tu veux t'assurer de bien recharger les derniers truc que t'as mis sur ton serveur-... là le rechargement étant forcé coté client tu peux plus rien faire coté serveur. C'est coté client (modif ta config, ou ajax) qu'il faut agir.


RE: optimiser le temps de chargement - Gabriel - 30-05-2009

Pour mes images ce ne sont que des terrains donc pas besoin de les dessiner en 3 temps. Par contre je n'utilise pas GD, mais des images déjà "dessinées" avec un logiciel de dessin.
Pour la mise en cache, je n'ai actuellement rien définit


RE: optimiser le temps de chargement - khiguard - 30-05-2009

Gabriel, Tu utilise quel moyen pour afficher ta carte?
Je te conseil vivement de mettre tes images avec des feuilles de style. De les afficher avec des divs gérer par un css.

Perso, j'ai une map avec des centaines de case qui s'affiche par ecran, avec plusieurs couche (6,7) et a part le premier affichage ou il charge les images, c'est très rapide et transparent.

@+


RE: optimiser le temps de chargement - Gabriel - 30-05-2009

j'utilise une boucle.
Mes cases sont numérotées de 1 à 360

while ($numero_case < 360)
{
$image_case = "images/carte/$numero_case.PNG";
print '<img src='image_case' alt= "Case' .$umero_case.'" />';
$numero_case + 1;
}

Voila le système pour résumer


RE: Questions - Gabriel - 02-06-2009

J'ai une autre question :
Dans mon jeu, le joueur peut se soigner en allant à l'hôpital et regagner 5PV. Il clique sur le lien
<a href="page_jeu.php?choix=soin">Se soigner</a>
page_jeu étant la page principale à partir de laquelle la quasi totalité des actions sont effectuées.

Le problème, c'est que même s'il n'est pas à l'hosto où le joueur, peut rentrer cette URL dans ça barre d'adresse et se soigner.
Je sais qu'il y a moyen de vérifier si le joueur est bien à l'hôpital avant de le soigner mais n'y à t-il pas une façon pour "cacher" la transmission de variable via l'URL ?

Merci d'avance !


RE: Questions - Argorate - 02-06-2009

Non hélas, tu dois toujours tout revérifier coté serveur (php), et surtout pas te fier aux données de l'URL.

Je ne sais pas comment tu organise ta BDD, mais tu dois stocker quelques part les coordonnées de tes hôpitaux et de celui des joueurs, donc pour vérifier c'est simple, tu regardes si le joueurs se trouve au même x et y qu'un hôpital...