Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Java] Ouvrir une fenetre et une petite question

Sujet résolu
    31 décembre 2007 à 23:29:34

    Bonjour.

    Je vais faire assez court.

    Ma première question est assez simple: enfaite, dans les tutos que j'ai vu sur le SdZ, ils parlent que du message "alert('')". Or, moi, j'aimerais avoir une plus belle fenêtre. Comme sur ce mini-jeu, qui s'appelle Travian (J'espère que c'pas considéré comme de la pub :p ) Quand vous cliquez sur login, une joulie fenêtre apparait (et pas un truc tout moche) :p Étant intelligent (oui oui) j'ai regardé le code source de la page, et il utilise cette fonction : "onclick="Serverwahl(1); return false;". Mais je connais rien au Java, donc je sais pas ce que cela veut dire (à part onclick).

    De même, savoir comment fermer cette fenêtre.

    Ma deuxième question est un peu plus technique. En effet, je vais "essayer" de réaliser un mini-jeu, temps réel. Le problème, c'est que je sais pas trop comment faire. Alors, j'me demandais un truc:

    Je veux que par exemple, toutes les heures, les joueurs gagnent tel somme d'xp (jdis ça comme ça). Enfaite, qu'est ce que je dois faire ? Faire une page avec un timer, et vérifier toutes les secondes quand on arrive à une heure précise, ou pas ?

    Merci
    • Partager sur Facebook
    • Partager sur Twitter
      31 décembre 2007 à 23:50:33

      Tu te trompes pas avec le JS(JavaScript) ?

      Bye
      • Partager sur Facebook
      • Partager sur Twitter
        1 janvier 2008 à 0:01:51

        Je sais pas, j'ai du mal à reconnaitre les deux. :p
        • Partager sur Facebook
        • Partager sur Twitter
          2 janvier 2008 à 14:12:23

          en effet c'est du javascript et non du java

          sinon en javascript tu a troi type d'alertes : alert (le message simple), confirm (avec ok et annuler) et prompt(avec un unique champ de texte)

          si tu veux faire autre chose, et bien c'est dans une popup html avec la fonction open

          sinon il existe une fonction setTimeout ou setInterval en javascript que tu peux régler avec une heure pour raffraichir ta page et faire l'opération d'ajouter tes XP coté serveur en php avec une base de données (en javascript tu sais pas enregistrer des données, a moins de communiquer avec le serveur...)
          donc si tu veux vraiment faire un jau en ligne (genre RPG ou quoi), je te conseille php avant tout, javascript peut t'aider aussi mais l'essenseil doit etre acomplit par le serveur.
          • Partager sur Facebook
          • Partager sur Twitter
            2 janvier 2008 à 15:24:28

            Merci quarante-sept d'avoir répondu. :p

            Donc, je suis obligé de passer par une pop-up ? Les navigateurs peuvent couper les pop-up ? Enfin, le mien coupe les pop-up, mais pas celui de Travian par exemple. Ceux sont de simples fenêtres, donc ça m'étonnerait.

            Pourrais-tu me détailler un peu la fonction open, si possible (un p'tit exemple de rien du tout) ?
            Et j'aimerais être sur d'une chose. Par exemple, quand l'utilisateur clique sur "Se connecter" il faut mettre à l'interieur de la balise "onclick=javascript:open machin chose", c'est ça ? Il y a moyen de faire la même chose avec "hover" mais avec un petit delay ? Genre 1-2 secondes (car si à chaque fois qu'on passe sur un lien, tac, une pop-up s'ouvre, les joueurs vont se pendre :p Cela me serait très utile, si par exemple, je veux montrer la description de quelque chose)

            Pour les fonctions de timing, j'avais effectivement vu ça dans un cours du SdZ. Mais j'ai du mal à voir comment tout faire avec PHP, sans le JavaScript... Enfaite, j'y ai réfléchi (du comment faire), ça serait d'inséré une table "evenement" qui affiche tout ce qu'il faut, dont la date où l'évenement doit se déclencher. Mais j'ai du mal à voir comment faire pour que PHP s'execute tout seul (sans JS). Ou alors, je mets "setTimeout" quand l'utilisateur "envoit" l'evenement et je calcule à l'avance combien il faut de seconde pour que l'évenement se déclenche. Mais à ce moment là, le joueur ne pourrait plus annuler son évenement...

            Mon idée était de faire une page, où personne ne pourrait venir, et qui sert juste pour les évements. Elle s'actualise toutes les secondes, et vérifie à chaque fois, la table "évenement". Si la page tombe sur un évenement, elle l'applique (en fonction de la demande), et elle détruit la table.

            Merci.
            • Partager sur Facebook
            • Partager sur Twitter
              2 janvier 2008 à 19:59:10

              en effet les navigateurs bloquent souvent les popup.
              une solution assez à la mode sont les "fausse popup" ; ce sont en fait des <div> avec un attribut de style position:absolute; si je ne m'abuse. il suffit ensuite de préciser la position et la taille (grâce à top, left, width et height) tu peu le faire en CSS comme en javascript

              1. <div style="position:absolute;top:500;left:500;width:200;height:200;">...</div>
              2. <div id="maPopup">...</div>

              ou
              1. document.getElementById('maPopup').style.position = 'absolute';
              2. document.getElementById('maPopup').style.top = 500;
              3. document.getElementById('maPopup').style.left = 500;
              4. document.getElementById('maPopup').style.width = 200;
              5. document.getElementById('maPopup').style.height = 200;

              voici la liste des propriétés de style.

              si tu veux un script qui gère des popup en js que j'ai fait il y a un an et demi ici

              voila pour la fonction open()

              sinon le php s'éxecutera pas tout seul. tu a plusieurs options :
              - soit ta page se rafraichi chaque laps de temps (en javascript) et le code php, apres avoir vérifié que le laps de temps et écoulé, accomplit les modifs (ne fonctionne que si l'utilisateur est connecté)
              -soit, lorsqu'un utilisateur visite une page quelconque, le script vérifie pour tout les utilsateurs si le laps de temps c'est écoulé depuis la dernière modif, dans ce cas il fait la modif (attention vérifier si plusieurs fois le laps de temps c'est écoulé) (fonctionne même si l'utilisateur n'est pas connecté.)
              -dernière option, il existe certains serveurs qui permetent aux sites hébergés de créer des taches cron. les taches cron sont des processus qui se repetent apres un certain interval. il existe, je crois, des hébergeurs qui font des taches crons php. Mais je ne suis plus sûr je ne l'ai jamais fais donc ca reste à comfirmer.

              donc entre les deux premières méthodes, le tout est de savoir si sa ne fonctionne que si l'utilisateur est connecté.

              Citation : Sbizz

              Mon idée était de faire une page, où personne ne pourrait venir, et qui sert juste pour les évements. Elle s'actualise toutes les secondes, et vérifie à chaque fois, la table "évenement". Si la page tombe sur un évenement, elle l'applique (en fonction de la demande), et elle détruit la table.



              si tu choisi la premiere methode, tu peut poursuivre cette idée et alors utiliser une architecture AJAX, c'est à dire que javascript va communiquer avec ta page en arriere plan, sans rechargement, afin que le serveur fasse les modifs et renvoi les nouvlelles données.

              en espérant bien ne pas me tromper et avoir répondu à ta question
              • Partager sur Facebook
              • Partager sur Twitter
                2 janvier 2008 à 20:13:47

                Bonjour.

                Ah ouai. En effet, si j'ai bien compris : on positionne une fenêtre sur la page, qui est invisible, et on l'a fait "apparaitre" grâce au script d'ouverture ? Hmm. Ok. Je vais essayer d'installer ça sur mon site, en esperant ne pas rencontrer de problème :D

                D'ailleurs, ce système n'est pas utilisé pour le calendrier qu'on peut trouver sur le sdz (enfin, il y a un lien dans la FaQ PHP je crois, qui renvoit sur un calendrier) ?

                Pour mon deuxième problème, je comprends pas:
                Pourquoi l'utilisateur doit être connecté ?

                Sinon, tu m'excuseras, mais je ne connais pas le langage AJAX (je connais pas aussi le langage javascript, enfin, j'ai du mal à l'intégré).

                Merci.
                • Partager sur Facebook
                • Partager sur Twitter
                  2 janvier 2008 à 20:34:55

                  enfait AJAX c'est juste le nom de la "technologie", c'est du javascript.

                  dans la base c'est assez simple

                  Citation : site:EJS


                  1. <script type="text/javascript">
                  2. function exemple()
                  3. {
                  4. if(window.XMLHttpRequest) // FIREFOX
                  5. xhr_object = new XMLHttpRequest();
                  6. else if(window.ActiveXObject) // IE
                  7. xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
                  8. else
                  9. return(false);
                  10. // ON APPELLE LA PAGE
                  11. xhr_object.open("GET", "page.php", true);
                  12. xhr_object.send(null);
                  13. // ON AFFICHE LE RESULTAT DANS LE DIV
                  14. res = xhr_object.responseText;
                  15. document.getElementById("resultat").innerHTML = res;
                  16. }
                  17. </script>




                  dans cet exemple tiré de "l'éditeur javascript" le script se connecte à la page "page.php"
                  et récupère les infos pour les mettre dans la balise html qui a pour id "resultat" (ligne 15)

                  il te suffit donc d'utiliser une fonction similaire.

                  tu modifie l'adresse de la page ligne 11 et ligne 15 se que tu fais de se que le script renvoi (pas obligatoirement)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    2 janvier 2008 à 21:05:30

                    Ok. J'ai un peu beaucoup de mal à comprendre :p

                    Déjà, pour ton script de "pop up", il marche pas sur mon site :p Pourtant, j'ai fait plusieurs copier/coller, modifié ce qui fallait, etc... mais la fenêtre n'apparait pas :/

                    C'est possible d'expliquer tout ça en PHP (même si ce n'est pas trop la section, mais à mon avis, on est quand même un peu obligé d'utiliser le JS).

                    Enfaite, j'viens de trouver tout seul comme un grand ! J'y arrive. Maintenant, faut que ça rentre dans ma petite tête, et que j'installe tout ce qu'il faut :)

                    Bon, par contre, pour le deuxième... j'ai toujours rien compris :/ Enfin, j'ai compris ce que tu voulais dire, mais j'ai pas compris le script qui faut que j'utilise :/
                    • Partager sur Facebook
                    • Partager sur Twitter
                      2 janvier 2008 à 21:51:17

                      pour la partie php, sa dépend de se que tu veux faire.

                      tu veu faire une action qui se répete à interval régulier
                      la question que je pose c'est : est ce que sa se passe uniquement quand l'utilisateur est en ligne

                      si oui tu fait un truc dans le genre

                      1. function refresh()
                      2. {
                      3. if(window.XMLHttpRequest) // FIREFOX
                      4. xhr_object = new XMLHttpRequest();
                      5. else if(window.ActiveXObject) // IE
                      6. xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
                      7. else
                      8. return(false);
                      9. // ON APPELLE LA PAGE
                      10. xhr_object.open("GET", "refresh.php", true);
                      11. xhr_object.send(null);
                      12. }
                      13. function onload(){
                      14. setInterval("refresh();",10000);
                      15. }


                      ceci va te permettre de recharger la page refresh.php toutes les 10 secondes

                      si l'action continue de se produire lorsque le joueur n'est pas en ligne, tu doit pratiquer d'une autre facon :
                      tu stocke le moment du dernier rafraichissement de l'utilisateur.
                      lorsque n'importe quel utilisateur charge une page, ton script php regarde si il y a des utilisateurs qui n'ont plus fais ton action depuis un certain temps, et il l'effectue.

                      un autre moyen est de faire l'action autant de fois qu'il l'a manqué depuis sa derniere connection lorsqu'il se connecte. Mais cela pose des problemes si les joueurs interagissent entre eux
                      • Partager sur Facebook
                      • Partager sur Twitter
                        2 janvier 2008 à 22:25:11

                        Bah enfaite, j'ai un peu de mal à t'expliquer.

                        Mais pour répondre à ta question : non l'utilisateur n'est pas obligé d'être connecté ; en effet, mon jeu c'est en temps réel, donc, même si il est pas co, le jeu continue de marcher.

                        Donc, je comprends un peu mieux ton script:
                        La fonction refresh, c'est la page qui sera refresh ET invisible pour l'utilisateur (quel qui soit) ?
                        La fonction onload, c'est lorsque que la page a été lancé. Vu que setInterval se refresh sans s'arrêter, ça continuera toutes les 10 secondes, c'est bien ça ? Donc la page "refresh.php" sera refresh toutes les 10 secondes ?

                        Maintenant, 2 questions:

                        Donc je crée une page "refresh.php" j'lui mets donc les informations que celle-ci devra analyser toutes les 10 secondes, c'est bien ça ?

                        Ma deuxième, c'est plus une question de sécurité : la page va pas se REFRESHER si un utilisateur actualise la page ? (si cette balise va sur une page, elle y restera, donc à chaque fois que l'utilisateur ira sur cette page, ça va relancer la fonction avec onload, non ?)

                        Merci encore :)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          2 janvier 2008 à 22:39:14

                          Citation : Sbizz


                          Ma deuxième, c'est plus une question de sécurité : la page va pas se REFRESHER si un utilisateur actualise la page ? (si cette balise va sur une page, elle y restera, donc à chaque fois que l'utilisateur ira sur cette page, ça va relancer la fonction avec onload, non ?)



                          oui ca va relancer la fonction onload, mais le setinterval précédent s'arretera des que la page aura changé.

                          sinon dans ta page refresh tu doit de toute facon regardé la date du dernier refresh pour voir si tu doi en faire un ou pas. (ou meme plusieurs)
                          en vérifiant ainsi tu peux faire le refresh pour tous les utilisateurs

                          je te conseille par contre de faire toutes les minutes au minimun si tu veux pas bouffer toute la bande passante de ton hébergeur.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            2 janvier 2008 à 23:45:27

                            Ca marche :/

                            J'ai fait un test, j'ai mit dans la page "refresh.php" une requete mysql (j'ai fait en sorte que ça soit bien visible, avec des ID qui increment), et rien, nada.

                            Citation : quarante-sept

                            mais le setinterval précédent s'arretera des que la page aura changé.



                            Le truc, c'est que justement, le setInterval ne doit pas s'arrêter... J'ai dit que le jeu était en temps réel, donc il se doit de tourner en permanence ! Et puis, il y aura pas qu'un joueur, donc j'imagine pas le massacre si j'dois faire quand l'utilisateur recharge ou fait quelque chose.

                            Et oui, enfaite, c'était toutes les minutes, et non toutes les secondes :)
                            • Partager sur Facebook
                            • Partager sur Twitter
                              3 janvier 2008 à 0:07:34

                              -regarde toujours ta console d'erreur si tu a firefox pour voir si le code fonctionne

                              -c'est pour ça que je te proposais de faire un rafraichissement pour tous les users quand un seul user charge une page. Et ce à la place du setInterval qui ne fonctionne que lorsque l'user est sur la page.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                3 janvier 2008 à 0:15:03

                                Enfaite, tu proposes la deuxième méthode ?

                                Hmm faudrait que je vois, mais si je continue à essayer de comprendre ton script, ou à le faire marcher, je vais bientot partir me suicider. :p

                                En gros, si j'fais la deuxième méthode, j'aurais besoin que de PHP. Je verifie sur chaque début de page si il y a pas un evenement qui est passé, c'est ça ? Mais ça va pas faire un peu gros ? Car vérifier plusieurs joueurs.. enfin, ça sera peut être moins gros que la méthode 1 ??
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  3 janvier 2008 à 11:08:11

                                  c'est exactement ca.

                                  quand a savoir si c'est gros, a mon avi non. tu dois avoir n+1 requete sql pour n joueurs a modifier
                                  et au moin sa reste sur le serveur, donc ca ne tue pas ta bande passante.

                                  se que tu peu faire aussi, c'est regarder a modifier uniquement pour les utilisateurs visibles sur la page sélectionnée.
                                  cela pourait seulement poser des inexactitudes dans un classement des joueurs ; la tu devrais bien modifier tous.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    3 janvier 2008 à 11:13:26

                                    Ok, je te remercie :)

                                    J'passe le sujet en résolu, je pense que ça sera bon ! Désolé des scripts "inutiles" que je t'ai fait faire :p Merci quand même :)

                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    [Java] Ouvrir une fenetre et une petite question

                                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                    • Editeur
                                    • Markdown