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



Rechargement de page - Lord-Gargoyle - 08-10-2008

Bonjour,

Encore un nouveau problème à vous soumettre.

Quand je veux qu'un de mes persos aille combattre un autre, j'ai un petit icone avec le lien joueur.php?Attaque=1 qui fait que la page est rechargée, on lit les données, on fait le traitement, on remet la base de données à jour après... Le seul problème c'est que recharger la page c'est pas top (surtout si j'ai des animations sur ma page), et je voudrais l'éviter.

Alors pour gérer le combat en javascript, j'arrive à le faire, mais par contre, il faudrait quand même que je mette le résultat du combat à jour (l'historique du combat, je ne le garde pas à priori...), donc que je trouve une solution pour mettre ma base de donnée à jour (quand la vie d'un des 2 joueurs tombe à 0) à partir du javascript...

Je n'ai pas encore de connaissances en Ajax, j'essayais de trouver une solution simple à mon problème d'abord, mais je vais m'y mettre bientôt...


RE: Rechargement de page - Ekilio - 08-10-2008

Ben, je pense que la seule méthode en javascript (outre les frames cachées, n'invoquons pas le démon !) est un peu d'ajax (ou du moins d'aja, dans ton cas l'xml n'est pas nécessaire).

Un exemple tout simple que j'utilise sur mon jeu :

Code :
function update(page)
{
    var xhr_object = null;
    if(window.XMLHttpRequest) // Firefox
       xhr_object = new XMLHttpRequest();
    else if(window.ActiveXObject) // Internet Explorer
       xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
    else { // XMLHttpRequest non supporté par le navigateur
       alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
       return;
    }
    
    xhr_object.open("GET", page, true);
    
    xhr_object.send(null);
}

C'est pas très propre, mais ça marche sur tous les navigateurs que j'ai pu tester... Pour l'utiliser, d'après ce que tu as dis, ça donne ça :

Code PHP :
<?php 
<a href="#" onclick="update('joueur.php?Attaque=1'); return false;">Mon lien</a>

(Le return false n'est pas nécessaire, mais j'ai horreur de devoir scroller en bas d'une page juste parce que j'ai cliqué sur un lien dynamique.)

Mes deux centimes :-)

Ekilio, qui va finir par avoir plein de centimes


RE: Rechargement de page - Ter Rowan - 08-10-2008

hello, une réponse en deux points (à l'aune de ce que je sais faire, y a peut être mieux).

1) si tu ne veux pas recharger toute ta page alors une seule solution, le principe d'ajax (que ce soit du xml du texte, du synchrone de l'asynchrone)


2) même si tu sais faire le calcul en javascript, c'est ton serveur qui doit faire le calcul. En effet sinon, c'est la triche assurée :

moi joueur bidouillant je donne l'ordre ajax qui dit que j'ai gagné et là ben :rip:

==> le principe que tu devrais du coup faire serait à mon sens :

1) le joueur décide de combattre (appui sur des boutons etc...)

2) javascript identifie toutes les infos nécessaires au combat (qui sont les combattants, etc...)

3) javascript lance un ordre ajax au serveur pour lui demander de calculer le résultat du combat

4) le serveur (php ou autre) recoit l'ordre ajax, interroge la bdd, trouve ce qu'il a besoin (les armes, les pv, etc...) et calcule le combat

5) le serveur répond (c'est le même fichier php ou autre) à l'ordre ajax et renvoit les résultats (qui a gagné, combien de pv, de po, etc...)

6) javascript reçoit la réponse ajax, l'interprète puis fait les modifications dans la page html