[Beta en cours] Crisis of Mana

Postez ici toutes vos demandes d'aide, présentez-nous votre projet...
Répondre
fabseven
Messages : 5
Enregistré le : 15 août 2006, 11:44

[Beta en cours] Crisis of Mana

Message par fabseven »

Voila, j'ai depuis quelques semaines lancer la beta de mon jeu que j'ai malheureusement du créer tout seul (ca fait du boulot) mais j'ai quelques trucs que malheureusement je ne sais pas faire, du moins pour le moment.


1- J'aimerais une fonction PHP Chrono($date) qui permettrais l'affichage dynamique du temps qu'il reste avant un évènement. J'ai lu et relu que c'était genre impossible mais je suis sur qu'il doit bien y avoir une solution quelque part (vu qu'il faut qchose de similaire sur ogame par exemple).
Avec google j'ai trouver des scripts javascript permettant de réaliser cette fonction..c'est bien beau mais javascript n'est pas du php. Voila j'ai donc penser à plusieurs solutions :
- Trouver un moyen de passer des arguments à la fonction javascript qui gènere le chrono. (on lui passe $date)
- Trouver un moyen de le faire en pur php.


2- Je n'ai aucune information quand à l'optimisation sur php, j'ai vu des liens sur le forum mais si vous avez quelques tips vous pouvez me les soumettre.

3- J'ai entendu parler de "templates" , je doute que ca soit pareil qu'en C++ et demande j'aimerais en savoir l'utilité.

4- J'ai un script qui permet de générer une carte dynamique sur une image de fond...mais qui est assez lourd pour le server (vive free) et qui donc parfois ne marche pas ( erreur mysql_timeout) ...peut-être avez vous une solution ? (code ici)


edit : je compte un jour changer d'hebergeur mais pour le moment je sais pas trop si j'ai envi de payer ou pas...je prend aussi des conseils sur l'hebergement donc :D
Avatar du membre
Aquanum
Messages : 187
Enregistré le : 25 juil. 2006, 13:28
Contact :

Message par Aquanum »

Ah je suis également très intéressé par une fonction de style Chrono($date), je vais en avoir besoin et je ne sais pas encore comment m'y prendre...

Tu génères des cartes via la librairie GD ?
C'est pas un peu bourrin? Ca doit bouffer des ressources énormes oO
Pour Simerion, nous avons développé une carte de la galaxie (même si c'est pas le même univers, c'est le même principe) et nous mélangeons le javascript et le css. On joue sur la transparence et sur la superposition des calques. Après il faut faire attention à ne pas trop en mettre et ne pas générer une carte trop grande... Je n'en suis qu'à mes débuts en programmation de jeu PHP, mais une génération de carte via GD ça me semble très très gourmand en ressources... :?
fabseven
Messages : 5
Enregistré le : 15 août 2006, 11:44

Message par fabseven »

Aquanum a écrit :Ah je suis également très intéressé par une fonction de style Chrono($date), je vais en avoir besoin et je ne sais pas encore comment m'y prendre...

Tu génères des cartes via la librairie GD ?
C'est pas un peu bourrin? Ca doit bouffer des ressources énormes oO
Pour Simerion, nous avons développé une carte de la galaxie (même si c'est pas le même univers, c'est le même principe) et nous mélangeons le javascript et le css. On joue sur la transparence et sur la superposition des calques. Après il faut faire attention à ne pas trop en mettre et ne pas générer une carte trop grande... Je n'en suis qu'à mes débuts en programmation de jeu PHP, mais une génération de carte via GD ça me semble très très gourmand en ressources... :?

Ouais via librairie GD,jdoit etre fou. Ben je me suis simplement dit que la map était une image dynamique donc j'ai naturellement utiliser cette librairie...maitenant, s'il y a un meilleur moyen moi je ne suis pas contre :p.
Avatar du membre
Haiken
Président de l'Association
Messages : 666
Enregistré le : 01 avr. 2004, 09:00

Re: [Beta en cours] Crisis of Mana

Message par Haiken »

1- sur la fonction Chrono :
Tu ne pourras pas le faire en PHP pur, c'est impossible ; le PHP implique une requête au serveur pour obtenir un résultat, donc à moins de faire 1 requête par seconde... (imagine le désastre)
Il faut le faire en javascript, tu trouveras ta réponse ici : http://www.tourdejeu.net/forum/index.php?showtopic=1231 (merci Cerb')

2- sur l'optimisation PHP : c'est un vaste sujet, on trouve souvent des choses fausses, donc méfiance !
La bonne stratégie à adopter, c'est de ne pas trop s'y intéresser au début (tant que le jeu n'est pas fonctionnel), et d'optimiser ensuite ce qui est trop lent (=> donc calculer le temps de génération des pages). Dans 90% des cas, c'est le MySQL qui pêche (pas d'index, requêtes mal construites, ...)
Après, c'est l'expérience qui fait le reste et là il faut un peu de patience :)

3- sur les templates : viewtopic.php?p=2060#2060

4- carte dynamique, la meilleure méthode est celle indiquée par Aquanum (utilisée aussi sur nainwak en passant) : 1 calque de fond, 1 calque dynamique avec images transparentes
fabseven
Messages : 5
Enregistré le : 15 août 2006, 11:44

Re: [Beta en cours] Crisis of Mana

Message par fabseven »

Haiken a écrit :1- sur la fonction Chrono :
Tu ne pourras pas le faire en PHP pur, c'est impossible ; le PHP implique une requête au serveur pour obtenir un résultat, donc à moins de faire 1 requête par seconde... (imagine le désastre)
Il faut le faire en javascript, tu trouveras ta réponse ici : http://www.tourdejeu.net/forum/index.php?showtopic=1231 (merci Cerb')

2- sur l'optimisation PHP : c'est un vaste sujet, on trouve souvent des choses fausses, donc méfiance !
La bonne stratégie à adopter, c'est de ne pas trop s'y intéresser au début (tant que le jeu n'est pas fonctionnel), et d'optimiser ensuite ce qui est trop lent (=> donc calculer le temps de génération des pages). Dans 90% des cas, c'est le MySQL qui pêche (pas d'index, requêtes mal construites, ...)
Après, c'est l'expérience qui fait le reste et là il faut un peu de patience :)

3- sur les templates : viewtopic.php?p=2060#2060

4- carte dynamique, la meilleure méthode est celle indiquée par Aquanum (utilisée aussi sur nainwak en passant) : 1 calque de fond, 1 calque dynamique avec images transparentes

wow, merci beaucoup. Jvais voir ca, haha je savais pas qu'on pouvais mettre du php dans le javascript...ctrop puissant 8) .

Par contre pour 4 si je pouvais avoir un exemple ca serai pas trop mal parce que j'ai du mal à me l'imaginer....

ma méthode pour la carte était la suivante :
- une image de fond de taille X*Y
- On part de 0*0
- On fait des pas de 30 pixels sur chaque ligne et pour chacune des "cases" on regarde si c'est un batiment extèrieur ou un village
- On regarde si le joueur à le droit de "voir" la case
- Si le joueur à le droit de voir on place, si c un village on affiche l'embleme du village, si c un batiment extèrieur l'embleme du proprio.
- En passant on rajoute du blabla pour le mapping dans un fichier à part (un fichier par joueur)
- Une fois qu'on a parcouru tout les cases on affiche l'image et on fait include du fichier de mapping pour avoir "les regles de mapping". (le truc qui définie les cases ou il ce passe qchose quoi)

Donc on peut dire ,simplement, que je m'amuse à parcourir mes 50*50 cases et d'afficher ou pas le contenu de celle ci dans le champ de vision du joueur.


Voila donc...qu'est ce que ca veut dire un calque de fond et un calque dynamique ? Moi j'ai prit un calque de fond et j'ai "travailler dessus"....je vois pas trop de différence en fait :s.



ps : un ptit exemple de comment calculer le temps de génération d'une page serais aussi la bienvenue. Enfin jpe toujours demande à google...

ps2: J'ai effectivement trouver et tester et étonnament j'ai des temps en général inférieurs à 0.25 seconde ce qui ma l'air pas mal...par contre pour la génération de la carte j'ai essayer une fois et boom...20 secondes...aie aie aie quoi !

ps3: oula ca varie bien les temps d'éxécution chez free :D (parfois j'arrive a 3secondes pour un truc qui dure même pas 0.1 seconde en général)...
izarie
Secrétaire de l'Association
Messages : 186
Enregistré le : 03 juil. 2005, 17:12

Message par izarie »

hello.

bon, pour ta carte, j'ai un peu regarder ton code, et j'ai trouvé l'erreur que tu as faite.. il va falloir que tu recode toute une partie ;p

EN gros, ce qu'il faut savoir, c'est que les boucle dans les boucles en programation, c'est deja pas tres joli, mais quand tu met un appel mysql en bout de tout ca, tu fout tout en l'air.

Une requete mysql, c'est un temps de connection, un temps de requete, un temps de reponse et un temps de deconnection...

en gros, mieux vaut une grosse requete, que 1000 petites.

Bon courage
Pierre

un exemple de code mauvais : tyler, puis la reponse : DT

viewtopic.php?t=316
fabseven
Messages : 5
Enregistré le : 15 août 2006, 11:44

Message par fabseven »

izarie a écrit :hello.

bon, pour ta carte, j'ai un peu regarder ton code, et j'ai trouvé l'erreur que tu as faite.. il va falloir que tu recode toute une partie ;p.

EN gros, ce qu'il faut savoir, c'est que les boucle dans les boucles en programation, c'est deja pas tres joli, mais quand tu met un appel mysql en bout de tout ca, tu fout tout en l'air.

Une requete mysql, c'est un temps de connection, un temps de requete, un temps de reponse et un temps de deconnection...

en gros, mieux vaut une grosse requete, que 1000 petites.

Bon courage
Pierre

un exemple de code mauvais : tyler, puis la reponse : DT

viewtopic.php?t=316

Code : Tout sélectionner

for($y=0;$y<constant("MAXMAP");$y++)
	{
		for($x=0;$x<constant("MAXMAP");$x++)
		{
			$destination_x= 30*$x;
			$destination_y=	30*$y;
			$largeur_source=30;
			$hauteur_source=30;
			$name="";
			$img = LookPosition($x,$y,$log,$name);
			if($img != -1)
			{
				$source = imagecreatefrompng($img); 
				imagecopymerge($image, $source, $destination_x, $destination_y, 0, 0, $largeur_source, $hauteur_source, 100);
				
				$x2=$destination_x+$largeur_source;
				$y2=$destination_y+$hauteur_source;
				
				//add on pour le mapping
				if($name != NULL)
				{
					
					$title=GetInfoBuilding($name);	
					if($title == -1) $title="[".$x.",".$y."] ".$name;
					
					fwrite($file,"<area shape='rect' coords='$destination_x,$destination_y,$x2,$y2' href='map.php?view=$name' title='$title'/>");
					
				}
				//fin add on
				
			}
			//if($name != NULL)
			//	imagestring($image, 4, $x, $y,$name,$bleu);
			//bool imagestring ( resource image, int font, int x, int y, string s, int col )

		}
	}	
Si j'ai bien compris c'est cette double boucle qui posserais problème ? La ligne fatale serai la suivante ?

Code : Tout sélectionner

$img = LookPosition($x,$y,$log,$name);
et aussi un peu la ligne

Code : Tout sélectionner

$title=GetInfoBuilding($name);	
Jusqu'a présent je n'utilisais jamais de requetes SQL alors bon j'aurais eu du mal à trouver tout seul..il est vrai que je n'ai pas encore fait des cours d'optimisations....ca serais pas mal d'en faire :p.
Effectivement la fonction utilise la bdd à chaque utilisation....Ben je regarderais ca alors bientot , merci du conseil car il faut y penser...et c'est pas forcement évident à voir !


edit : En réfléchissant un peu jpense que "appeller une fonction qui me rempli un tableau [x][y] = informations avant mes deux boucles" serai une bonne solution de remplacement à "j'appelle une fonction à chaque fois que je veut mes informations" . Avis aux amateurs :)
Avatar du membre
Haiken
Président de l'Association
Messages : 666
Enregistré le : 01 avr. 2004, 09:00

Message par Haiken »

fabseven a écrit : edit : En réfléchissant un peu jpense que "appeller une fonction qui me rempli un tableau [x][y] = informations avant mes deux boucles" serai une bonne solution de remplacement à "j'appelle une fonction à chaque fois que je veut mes informations" . Avis aux amateurs :)
oui c'est tout à fait cela, pense à remplir ton tableau [x][y] avec UNE SEULE requête SQL (et non pas x*y requêtes)
fabseven
Messages : 5
Enregistré le : 15 août 2006, 11:44

Message par fabseven »

J'ai changer cela et...je crois que c'est plus rapide mais j'ai pas de certitude. Ce qui est "marrant" c'est que plus le level d'exploration du joueur monte plus la map se créera rapidement (puisqu'il y aura moins de travail de la librairie GD )

En passant j'en profite pour faire deux annonces :

- La beta II est actuellement en mode "WON" , c'est à dire en mode pré-inscriptions...une fois qu'il y aura assez de joueurs elle commencera. Si ca tente quelqu'un d'ici c'est le moment :wink: (http://www.mananosekai.com/crisisofmana ... nscription)

- Etre seul à tout faire commence à etre un peu dur ( avec le taff et la fac qui commence bientot pour moi je ne sais pas du tout si j'aurais beaucoup de temps ) .

Donc il serrais pas mal d'embaucher une personne , voici un peu ce qu'il faut savoir faire :
- bonne en programmation php/mysql
- connaissances en css
- connaissances en javascript ( je suis moi même pas très doué en javascript vu que je n'en fait quasiment jamais :D )
- Avoir des connaissances d'infographiste serais un plus ( histoire de rendre le site plus "beau" )

Bien sur...je ne peut pas parler de rénumération puisque pour le moment les revenus du site sont de zero ( il faudra un jour que j'intègre de la pub pour au moins payer le serveur ).

Voila, si ca tente quelqu'un (ou pourquoi pas deux personnes ?) il suffit de m'envoyer un pm sur ce forum ou un mail à admin@mananosekai.com
à noter que j'ai commencer un deuxième projet qui pourrais lui aussi etre intéressant mais que je suis déjà assez occupé par le premier et que donc j'ai juste commencer...en voici un apercu :

Image

Comme on peut le deviner il s'agirais d'un mmorpg php ou l'on peut monter son personnage un peu comme dans Secret of Mana 2 et traverser le monde de mana...(pour ...? faire des quests ? trouver des graines mana ? choper des cartes de monstres ? Ou simplement survivre ? L'objectif est encore flou ).

Bien entendu il serais mieux de finir Crisis of Mana avant de continuer Mana'adventure.
Répondre