JeuWeb - Crée ton jeu par navigateur
pouvoir placer des objets et surtout memoriser leur emplacement - 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 : pouvoir placer des objets et surtout memoriser leur emplacement (/showthread.php?tid=3804)



pouvoir placer des objets et surtout memoriser leur emplacement - Clover18 - 12-03-2009

Bonjour à tous!

Bon le titre est ptet pas très explicite mais en même temps je ne savais pas trop comment expliquer plus simplement ^^

En fait je suis dans le cas ou j'aimerais faire qqchose mais je ne vois pas comment et je ne sais pas quel nom ça porte :lol:

Je m'explique:
je voudrais pouvoir laisser au joueur la liberté de placer des objets comme il le veut dans une div (drag and drop jusque là tout va bien) mais aussi mémoriser la place de ces objets!
et c'est là que je ne vois pas comment faire^^

j'ai beau essayer de chercher une aide qqpart sur le net je ne trouve pas vraiment.
Et ma seule idée serait de récupérer la position de chaque objet (x et y) et de mémoriser cela dans ma base... mais ça me parait quand même énorme à mémoriser...

je me demande donc s'il n'existe pas de solutions plus simple à mettre en place.

Merci d'avance pour vos réponses!


RE: pouvoir placer des objets et surtout memoriser leur emplacement - Ter Rowan - 12-03-2009

je pars de l'hypothèse que tu utilises javascript ou flash ou... enfin autre chose que de l'html


dans ce sens je ferais :

la page à un comportement par défaut, les objets sont placés (par toi) à un certain endroit

le joueur déplace un objet, tu captes sa nouvelle position (comme il y a mouvement de souris tu connais l'endroit où a été placé l'objet)

tu stockes les positions de cet objet
=> soit cookie si tu te dis c'est sur le poste de l'utilisateur
=> soit bdd
=> soit fichier serveur (je préfère bdd mais bon pourquoi pas)

quand tu affiches une page, tu vérifies quels objets ont une position d'après les cookies/bdd/fichiers et tu les places au bon endroit, les autres se positionnant par défaut

ainsi tu ne stockes qu'un delta (gain de place et de performance)


RE: pouvoir placer des objets et surtout memoriser leur emplacement - wild-D - 12-03-2009

heu; le delta si un objet à une position par défaut dans un angle et que le joueur le place dans l'angle opposé il sera pas tellement économiseur de place; c'est donc kifkif Big Grin

si le placement est totalement libre, a priori je vois pas trop d'autre solution que le x,y des objets déplacés (ceux qui sont à la position initiale à la limite tu peux peut-être en faire l'économie; mais faudrait pour ça que tu stock ça dans une table spécifique pas sûr que tu gagne bcp si personnaliser sa boutique est ce qui fait l'intérêt du jeu tu risque des jointure systématique qui te font plus de mal que de bien).

par contre si y a des contraintes sur les emplacements; là tu peux partir sur une solution plus économique (enfin passer de 2 entier(ou float) x,y à 1 entier emplacement; ça va non plus pas révolutionner la taille de tes enregistrements)


RE: pouvoir placer des objets et surtout memoriser leur emplacement - Ter Rowan - 12-03-2009

quand je parle de delta, je ne parle pas de delta de position mais si sur 50 objets seuls 5 ont bougé par le fait du joueur alors le "delta" représente ces 5 objets


RE: pouvoir placer des objets et surtout memoriser leur emplacement - Hakushi - 12-03-2009

Utilise un cache rapide pour stocker ces infos, genre :

User_Id:Box1 -> x:y
User_Id:Box2 -> x:y

Etc, c'est de l'info brut et utiliser une BDD alourdirait le process enormement. Le but d'un cache rapide, c'est vraiment de recuperer ton infos de maniere simple, genre:
Code PHP :
<?php 
$cache
->getKey(Helpers::buildKey($member->getId(), 'box1'));
Ou alors tu peux generer ton CSS de maniere dynamique mais je ne suis pas sur du gain de performance.


RE: pouvoir placer des objets et surtout memoriser leur emplacement - Hakushi - 12-03-2009

Si ca l'est, quand tu as 20 users c'est rien, mais 10 ou 100 fois plus, et rajouter de la query inutile quand on a à disposition des solutions légères et rapides, c'est pas top.
Ca marche très bien a faible charge, mais ton système tuerait ton serveur MySQL sous lourde charge.

Typiquement le systeme que j'ai mis en place utilise Memcache pour stocker les coordonnés,et un Cron sauve en DB une fois par heure pour prevenir d'un eventuel crash de Memcache (jamais arrivé à date)


RE: pouvoir placer des objets et surtout memoriser leur emplacement - Hakushi - 12-03-2009

Ok Wink

C'est vrai que je perds souvent de vu ce genre de consideration. Mais si tu as access a un serveur Memcache (il peut etre sur le meme serveur, pour beaucoup de gens qui ont un dedie, ils ont de toute facon assez de Ram pour ça, et vu que ca reste bien plus rapide d'acceder a Memcache que MySQL, meme sur le meme serveur ca reste valable), te limiter a un backup des infos de coordonnées une fois par heure offre un allegement bienvenu sur MySQL.

Mais ta solution est parfaite pour une petite structure Smile


RE: pouvoir placer des objets et surtout memoriser leur emplacement - Clover18 - 13-03-2009

merci à tous pour vos réponses Smile

@hakushi: merci mais comme l'a souligné oxman (d'ailleurs j'anticipais de voir derniere reponse de oxman mais en fait il fait son gentil aujourd'hui Smile ) je ne suis qu'une toutttteeee petite structure sur serveur mutualisé ^^

en fait je vais faire un mix de vos réponses je pense Smile
deja oui le langage est du javascript (pas de flash je connais pas heureusement ou malheureusement Tongue ) et le placement totalement libre ou pas je n'ai pas encore décidé Smile (je partirais plutôt vers du totalement libre pour avoir vraiment une personnalisation maximum)

et plutôt que de sauver automatiquement, je mettrais un bouton "sauvegarder les modifications", au moins ça limitera les requêtes, et je ne sauverais que les objets qui ont été bougés Smile