Hébergement du site en PHP et Mysql par WDMédia-hébergement
Vous aussi adpotez les éléPHPants de Vincent Pontier !  


Rechercher dans le forum

Mots-clés :

Trouver :
un de ces termes tous les termes

Depuis :
7 j 15 j 30 j


Retour à l'index du forum

Création d'une map, solution la plus efficace ?

Message original de tweak

Le : 06/05/2009 à 06:17:22

Dejà lu 8691 fois avant vous

Bonjour.

Je suis en train de réaliser une sorte de carte pour un jeux.

Voila comment fonctionne mon code :

Il y à un tableau HTML qui fais 23 colonnes et 17 lignes.
Vous pouvez voir ce tableau ici :
http://burgerkill.fr/temp/edit-map-small.htm

Le centre de cette carte correspond à la position d'un personnage. Par exemple, si ce personnage à dans la base de donnée x5,y5 alors l'image charger au milieux du tableau sera celle qui, dans la base de donnée, à pour x=5 et y=5.
C'est pourquoi on peut voir la variable $p0p0 au centre, qui signifie x plus 0 et y plus 0.

On comprends donc que la case juste au dessus, $p0m1 signifie x plus 0 et y moins 1. Si vous m'avez compris jusque là, passons au chose sérieuse.

Vous comprenez que mon script va devoir charger 23x17 images en fonction de la position initial du personnage. Sois 391 images :s

J'ai pensé à deux méthode et je voudrais savoir laquelle serais la plus légère et surtout si il n'y en à pas une plus efficace ?

/!\ Les codes sont la à titre d'exemples pour illustrer le fonctionnement, je sais qu'ils ne sont pas exacte. /!\

Voici donc la première :

- Un listing de toute la table " map " avec au total 391 if, par exemple :

Code :

if (($x=$x-1) and ($y=$y-1)) { $m1m1=$img; }
if (($x=$x-1) and ($y=$y-2)) { $m1m2=$img; }
if (($x=$x-1) and ($y=$y-3)) { $m1m3=$img; }
etc ...

Le problème avec cette méthode c'est qu'il va faire listing de toute la table, même des entré correspondante à une position x,y qui n'est pas dans le tableau.

La deuxième méthode :

- Un listing colonne par colonne, ce qui veut dire que je ferais plusieurs listing. Par exemple :

Code :

$listing = mysql_query("SELECT img FROM map WHERE x=$x-1");
$listing = mysql_query("SELECT img FROM map WHERE x=$x-2");
$listing = mysql_query("SELECT img FROM map WHERE x=$x-3");

et pour chaque listing de la table, je ferais une série de IF vérifiant la valeur de y, par exemple :

Code :

if ($y=$y-1) { $m1m1=$img; }
if ($y=$y-2) { $m1m2=$img; }
if ($y=$y-3) { $m1m3=$img; }

Donc pour résumé, dans la première méthode j'ai un listing total de la table (donc si la table map contient 1500 entrée, il va toute les vérifier juste pour en sortir 391 !

Avec la deuxième méthode il va faire 23 requettes différente au lieux d'une seul, car il y à 23 colonne, en contre partie il ne va fouiller que les entrée dont le champ x correspond à ceux du tableau html.

Laquelle de ces méthode serais la plus légère et surtout, quelqu'un aurais une idée moins rébarbatif ?

Re: Création d'une map, solution la plus efficace ?

Réponse de Maljuna Kris

Le : 06/05/2009 à 08:30:57

Saluton,
Il me semble que lors d'un clic sur une image, notamment dans le cas d'un map et d'un jeu d'area, on récupère les coordonnées x,y du point cliqué sur la map (à vérifier et préciser).
D'autre part, j'ai vu pas mal de solutions en CSS avec changement de l'image de fond [background] par déplacement de la zone affichée et n'utilisant donc qu'une seule image et surtout pas de tableau pour la mise en page.
http://openweb.eu.org/articles/problemes_tableaux
Là aussi il faudrait approfondir la recherche et préciser les notions.
Ce qui remet totalement en cause la solution sur laquelle tu sembles t'engager, j'en suis conscient, mais il vaut mieux que cela intervienne maintenant qu'une fois ton projet plus abouti.

Demander, par requête MySQL, l'url d'une image à chaque fois que de besoin ne me semble pas une méthode à recommander.
Au passage, j'espère que c'est bien l'url de l'image qui est dans la table de base de données et non pas l'image elle-même sous format BLOB.

Re: Création d'une map, solution la plus efficace ?

Réponse de tweak

Le : 06/05/2009 à 10:50:18

En faite la méthode que j'utilise est très intéressante car elle permet de créer des map sans limite de taille et surtout de les modifier grâce à un éditeur de map que je suis en train de mettre en place.

En utilisant des petit bloc d'image que je place à tel ou tel position, je peut créer et éditer des map à la voler en quelques clic de souris.

Alors j'avais pensé à n'utiliser qu'une seul image pour chaque map mais ça m'embête un peu.

Je ne sais pas trop quel sont les capacité d'un bon serveur aujourd'hui mais effectivement quand le joueur va cliquer sur une case, il pourras déplacer son personnage sur celle-ci et donc la carte va se re-charger en fonction des nouvelles coordonnée x,y du joueur.

Re: Création d'une map, solution la plus efficace ?

Réponse de Maljuna Kris

Le : 06/05/2009 à 16:57:09

Tu devrais tout de même regarder du côté de background-posItion en CSS qui permet de simuler avec une <div> une fenêtre se déplaçant sur un fond (en déplaçant la position du fond de la <div>).
Imagine une image transparente de la taille de la div déclarée comme <map> avec d'éventuelles <area> et une image de fond qui représente l'ensemble de la carte du jeu, de dimensions bien plus grandes que l'image transparente.
Tu dois pouvoir déplacer le fond sous la div en fonction des survols ou des clics sur les areas ou la div.
Tu vois le principe ?

Re: Création d'une map, solution la plus efficace ?

Réponse de tweak

Le : 06/05/2009 à 17:44:37

Je comprends bien mais ça voudrais dire que je dois faire une seul image par map, donc la carte du monde qui est relativement grande serais une image qui ferais + de 3000x3000 pixel :s

Re: Création d'une map, solution la plus efficace ?

Réponse de Maljuna Kris

Le : 06/05/2009 à 18:54:51

Probablement mais on ne la charge qu'une fois, après elle reste dans le cache du navigateur et on ne fait plus que la déplacer en arrière plan
Retour à l'index du forum


Ajouter une réponse

Nom :

Email :

Titre :

Message :

Combien font 3 + 4 ?

Mise en forme : gras = [b]...[/b], italic = [i]...[/i], souligné = [u]...[/u], citation = [quote]...[/quote], lien = [url]liens_externe[/url] ou [url nom=texte]liens_externe[/url], code source : [code]...[/code]

Recevoir les réponses par mail :
Oui Non

Mémoriser mon nom et mon email :
Oui Non

 

Charte des forums PHPDébutant

Bienvenue à vous,

Vous voici donc prêt à poster sur les forums de PHPDébutant. Avant toute chose, merci de prendre le temps de lire les quelques lignes qui suivent.

Attention, à partir du moment ou vous postez dans les forums, vous acceptez la présente charte. Si votre message est modéré ou supprimé, vous ne pourrez pas dire que vous n'étiez pas au courant des règles !

Pourquoi une charte

Le but de cette charte est simple : que ces forums restent cordiaux et que les personnes aidant les autres ne se sentent pas lésées, insultées, critiquées. Pour que ces forums fonctionnent, il faut des personnes qui répondent aux questions. Pour que celles ci restent sur le forum, il faut les traiter avec respect, et ne pas les confondre avec des bonnes poires, esclaves, etc...

Mesures de régulation

  • Un nouveau message ne disant pas bonjour, ou insultant, dont le titre est tout en majuscules, pourra être supprimé sans justification (raisons non limitatives).
  • Prenez le temps de vérifier que la question que vous allez poser n'a pas déjà été posée, à l'aide du formulaire de recherche.
  • Prenez également le temps de vérifier que la réponse à votre question ne se trouve pas dans les tutoriaux. Nous ne pouvons pas répeter pour chaque visiteur tous les cours, il sont écrits, profitez-en (dans l'ordre tant qu'à faire) !
  • Nous ne faisons pas de scripts tout prêts. Nous aidons et vous guidons pour que vous puissiez trouver vous même la réponse, ce qui est beaucoup plus formateur.
  • Si vous comptez poster un message publicitaire, abstenez-vous. Au mieux le message sera supprimé, au pire les habitués descendront votre service en flamme.
  • Pour tout message de recrutement, précisez bien votre demande. Inutile de poster pour trouver un développeur pour faire gratuitement votre site de webmastering qui vous rapportera plein de sous. Les seuls coups de mains donnés en développement sont pour des associations ou des sujets passionnant un développeur.
  • Toute personne tenant des propos racistes ou illicites sera bannie et pourra faire l'objet de poursuites.
  • L'humour étant très présent sur ces forums, ne réagissez pas violemment à des propos qui pourraient être à prendre au second degré et avec de l'humour.
  • Attention aux trolls ! Leur multiplication peut entraîner la mort des forums, et sans forum, plus d'aide !
  • Respectez les thèmes des forums. Pensez aussi à vérifier que votre message n'a pas été déplacé si vous le croyez effacé.

Conseils

  • N'oubliez pas que les personnes à qui vous vous adressez sont des bénévoles qui donnent de leur temps pour vous. Si vous êtes méchants avec eux, il n'aideront plus et vous n'aurez plus d'aide !
  • Ne soyez pas pressé. Nous avons une vie aussi, et nous ne sommes par forcément tout le temps disponibles.
  • N'oubliez pas que les smileys sont la pour faire comprendre l'humeur dans laquelle vous rédigez un message. Il est indispensable de mettre des smileys quand vous faites de l'humour, sinon le message pourrait être mal perçu (ca serait quand même idiot de plomber l'ambiance en faisant de l'humour !).
  • Surveillez votre orthographe, nous ne vous demandons pas d'être littéraire, mais que votre message soit au moins compréhensible. Evitez à tout prix le style SMS.
  • Expliquez clairement le problème, ce n'est pas toujours facile, mais mieux vaut essayer de le faire le plus possible.
  • Ne postez pas de questions trop vagues du genre "comment faire un forum". Cela ne sert à rien, cela ne s'explique pas sur un coin de forum.
  • Mettez un titre clair, correspondant au sujet que vous allez poster. A l'aide, au secours, etc... ne sont pas d'une grande utilité pour ceux qui vont vous aider. Parfois nous passons en coup de vent, et si nous ne savons pas ce que va contenir le message, nous ne le regarderons même pas.
  • Ne mettez par [URGENT] ou autre joyeuseté du genre dans vos titres de messages. Cela irrite les gens (il y'a plus urgent dans la vie, pensez aux gens qui meurent de faim ou ayant besoin des pompiers, ça c'est urgent), et vous n'aurez pas votre réponse plus vite pour autant.
  • Si vous connaissez déjà à quel domaine votre question d'adresse (par exemple mysql, html, php, javascript), n'hésitez pas à le marquer au début de votre message, avec un [html] par exemple (notez les minuscules).
  • Ne dites pas "ça marche pas". Il y a toujours des raisons. Je vous invite à consulter le tutorial "ça marche pas" qui vous aidera à mieux expliquer votre problème.
  • Ne postez pas 36000 lignes de code. Sur le forum, le code apparaît non coloré et sans indentation, ce qui est illisible. Au dessus de 5 lignes, plus personne ne lit et vous n'aurez pas de réponse. Utilisez le wall
  • En règle générale restez courtois et clair, n'oubliez pas que la politesse fait partie de la vie courante. Il est de bon ton de dire bonjour même pour une réponse, même plusieurs fois dans la journée (ceux qui vous lisent n'ont pas forcément lu vos autres messsages)

La Fin

Avec tout ces conseils vous augmenterez les chances de réponse, leur pertinence et leur rapidité

Voilà, ça sera tout, bonne écriture :)

Fermer les règles et poster un message


www.phpdebutant.org © 2024 - L'équipe de phpDebutant - Hébergement : WDMédia-hébergement