IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Premier petit jeu et quelques questions.


Sujet :

JavaScript

  1. #1
    Membre habitué Avatar de GalliezB
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2013
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 89
    Points : 162
    Points
    162
    Par défaut Premier petit jeu et quelques questions.
    Bonjour,

    Je me lance dans la réalisation de mini jeux en HTML5 tout en créant mon blog sur le sujet ( pas encore fonctionnel ).
    Pour commencer j'ai décidé de faire ultra simple puis de complexifié jusqu'à pouvoir réaliser un jeu digne de ce nom ( et surtout pour le fun ).

    Mon premier petit jeu se trouve ici et voici les sources.

    Ok rien d'énorme pour un début, mais c'est volontaire pour justement étudier et avancer pas à pas. Ce petit exercice m'as soulevé pleins de question que j'aimerai résoudre avant de me lancer dans mon 2e petit jeu. Pourriez-vous m'éclaircir ceci :

    1° Je ne voit aucune différence entre requestAnimFrame et un setTimeout ou setInterval. Pourquoi requestAnimFrame est conseillé partout ?

    2° J'aimerai précharger les images en javascript sans les mettre dans le HTML avec un display none par exemple. Est-ce possible ? Car actuellement je dois réactualiser la page si les images ne sont pas en cache pour le premier affichage.

    3° J'ai remarqué que les images s'empile par rapport à l'ordre du code. Existe-t-il un moyen de les gérer comme avec un z-index lorsque celle-ci sont dans un même canvas ?

    4° J'ai eu des soucis avec onkeyup ( d'abord trouvé sur le net via onKeyUp ). Quelle est la différence entre onkeyup et onKeyUp ?


    Toute autre remarque ou aide est évidemment la bienvenue
    Merci pour votre aide !

  2. #2
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    1° : avec requestAnimation le navigateur sait mieux optimiser s'il y a plusieurs animations concurrentes. Il va tout redessiner en même temps par exemple. Tu y gagneras en CPU, GPU et mémoire. N'hésite pas à utiliser un polyfill pour la compatibilité ! Je pense à celui de Erik Möller.

    2° : Par exemple. Mais il existe d'autres moyens, notamment avec CSS, Ajax, etc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    var images = [];
    function precharge() {
      for (var i=0;i < arguments.length; i++) {
        images[i] = new Image();
        images[i].src = arguments[i];
      }
    }
    // Utilisation :
    precharge('mon_image1.png','mon_image2.png','mon_image3.png')
    4° : Une histoire de norme quand tu le déclares inline dans le HTML ... ou pour apporter un style rétro à ton code Javascript est sensible à la casse, donc pas de majuscule à onkeyup ! Idem pour onmouseover etc

    Ce sont les questions classiques quand tu te lances dans ce genre de jeu. As tu pensé à utiliser une librairie complète qui gère toutes ces problématiques à ta place ? Je pense pas exemple à "createjs"

  3. #3
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    2° Je te conseille d'utiliser des feuilles de sprites plutôt qu'une image par objet. Puis tu peux coder un ResourceLoader qui va charger toutes tes images et les mettre en cache avant de lancer le jeu. Regarde du côté de l'objet Image en Javascript et de son attribut onload.

    3° il faut voir le canvas comme une toile de peinture. Si tu fais un trait jaune puis un trait rouge par dessus, tu ne peux pas dire ensuite au trait jaune de revenir par-dessus. Il n'y a pas cette notion objet dans le canvas (bitmap) contrairement au SVG (vectoriel). A toi donc d'adapter ton code pour dessiner tes éléments dans l'ordre désiré.

    4° utilise plutôt element.addEventListener('keyup', function(){ ... });
    Au passage voilà un bon moteur de jeu JS utilisant WebGL avec fallback canvas : GoodBoyDigital/pixi.js/
    Tu peux t'en servir pour produire rapidement un jeu. Si ton objectif est d'apprendre par toi-même comment faire ton jeu, la source est assez claire également.
    One Web to rule them all

  4. #4
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Il y a moyen de jouer un peu avec la superposition grâce à la propriété globalCompositeOperation. J'ai tendance à éviter de m'en servir car ça peut rendre les choses confuses, mais dans certains cas ça peut être pratique.
    https://developer.mozilla.org/en-US/...al/Compositing

    À propos de requestAnimationFrame, un de ses avantages est qu'il sait adapter le FPS, par exemple le faire diminuer quand la fenêtre est en arrière-plan.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  5. #5
    Membre habitué Avatar de GalliezB
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2013
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 89
    Points : 162
    Points
    162
    Par défaut
    Kaamo:
    Ce sont les questions classiques quand tu te lances dans ce genre de jeu. As tu pensé à utiliser une librairie complète qui gère toutes ces problématiques à ta place ? Je pense pas exemple à "createjs"
    Oui, je comptais débuter avec EaselJs, Turbulenz, Canvas Engine ou tant d'autre. Mais après les avoir explorer et n'avoir que peu compris la doc, je me suis dis que commencer en Javascript simple, cela me permettrai de mieux comprendre le tout.
    Et rien qu'avec ce test, je comprends déjà mieux certains framework.

    SylvainPV:
    2° Je te conseille d'utiliser des feuilles de sprites plutôt qu'une image par objet. Puis tu peux coder un ResourceLoader qui va charger toutes tes images et les mettre en cache avant de lancer le jeu. Regarde du côté de l'objet Image en Javascript et de son attribut onload.
    Oui je suis tombé la dessus, mais j'y réfléchi encore. Et mes tests n'ont rien donné de concluant pour le moment. J'vais creuser de ce côté la pour créer ma fonction qui chargera mes images.
    Ok pour les sprites, je mettrai tout sur une image. Mais imagine une image de background extra longue. Il est mieux de la séparer ou de vraiment tout mettre ensemble ?


    SylvainPV:
    4° utilise plutôt element.addEventListener('keyup', function(){ ... });
    Au passage voilà un bon moteur de jeu JS utilisant WebGL avec fallback canvas : GoodBoyDigital/pixi.js/
    Tu peux t'en servir pour produire rapidement un jeu. Si ton objectif est d'apprendre par toi-même comment faire ton jeu, la source est assez claire également.
    Je ne connaissais pas ce framework, je l'ai ajouté à tous ceux que je vais tester.
    En mettant Moncanvas.addEventListener('keyup', function(){ ... }); , je risque pas d'avoir un soucis sur la gestion du clavier si un clic est effectué en dehors du canvas ?
    J'ai remarqué ce comportement sur certains jeux HTML5. Bien que ce problème disparaitra dès que je passerai le tout en fullscreen.

    Watilin :
    Il y a moyen de jouer un peu avec la superposition grâce à la propriété globalCompositeOperation. J'ai tendance à éviter de m'en servir car ça peut rendre les choses confuses, mais dans certains cas ça peut être pratique.
    https://developer.mozilla.org/en-US/...al/Compositing
    Ok, je jette un œil, mais j'avoue que ça me parait aussi confus si le jeu deviens trop gros. Au pire j'empilerai des canvas, je trouve ça plus facile pour s'y retrouver.


    Un grand merci à tous

Discussions similaires

  1. Petit nouveau avec quelques questions
    Par hizoka dans le forum PyQt
    Réponses: 67
    Dernier message: 16/11/2013, 13h56
  2. Un de mes premiers programme : Quelques questions...
    Par allezlolo dans le forum Débuter
    Réponses: 15
    Dernier message: 26/04/2008, 09h51
  3. Quelques questions pour petit projet
    Par lapos dans le forum Développement 2D, 3D et Jeux
    Réponses: 8
    Dernier message: 21/12/2007, 17h22
  4. Quelques questions à soumettre coté jeu par navigateur
    Par myWotA dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 03/02/2007, 10h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo