From e70d9556485debd0724eeff93d326bf946113c93 Mon Sep 17 00:00:00 2001 From: julieng Date: Thu, 11 Nov 2021 07:45:14 +0100 Subject: convert content to md --- files/fr/games/anatomy/index.md | 504 ++++++++++----------- files/fr/games/examples/index.md | 213 +++++---- files/fr/games/index.md | 83 ++-- files/fr/games/index/index.md | 4 +- files/fr/games/introduction/index.md | 191 +++----- .../index.md | 135 ++---- .../publishing_games/game_distribution/index.md | 132 +++--- .../publishing_games/game_monetization/index.md | 86 ++-- .../games/publishing_games/game_promotion/index.md | 82 ++-- files/fr/games/publishing_games/index.md | 16 +- .../techniques/2d_collision_detection/index.md | 94 ++-- .../techniques/3d_on_the_web/basic_theory/index.md | 125 +++-- .../index.md | 40 +- .../index.md | 296 ++++++------ files/fr/games/techniques/3d_on_the_web/index.md | 112 +++-- .../games/techniques/audio_for_web_games/index.md | 427 +++++++++-------- files/fr/games/techniques/index.md | 36 +- files/fr/games/tools/asm.js/index.md | 20 +- files/fr/games/tools/index.md | 43 +- .../tutorials/2d_breakout_game_phaser/index.md | 72 ++- .../bounce_off_the_walls/index.md | 107 +++-- .../build_the_brick_field/index.md | 99 ++-- .../collision_detection/index.md | 134 +++--- .../create_the_canvas_and_draw_on_it/index.md | 114 ++--- .../finishing_up/index.md | 100 ++-- .../game_over/index.md | 82 ++-- .../2d_breakout_game_pure_javascript/index.md | 56 +-- .../mouse_controls/index.md | 48 +- .../move_the_ball/index.md | 111 ++--- .../paddle_and_keyboard_controls/index.md | 124 ++--- .../track_the_score_and_win/index.md | 86 ++-- .../index.md | 418 +++++++++-------- files/fr/games/tutorials/index.md | 26 +- 33 files changed, 2079 insertions(+), 2137 deletions(-) (limited to 'files/fr/games') diff --git a/files/fr/games/anatomy/index.md b/files/fr/games/anatomy/index.md index 4a1bb06c8e..04d85e24c1 100644 --- a/files/fr/games/anatomy/index.md +++ b/files/fr/games/anatomy/index.md @@ -9,318 +9,300 @@ tags: translation_of: Games/Anatomy original_slug: Jeux/Anatomie --- -
{{GamesSidebar}}

  {{IncludeSubnav("/fr/docs/Jeux")}}

+{{GamesSidebar}} -

Cet article se concentre sur l'anatomie et le flux de la plupart des jeux video à partir d'un point de vue technique, concernant la manière dont la boucle principale devrait tourner. Cela aide les débutants dans l'arène du développement à comprendre  ce qui est requis quand il est question de bâtir un jeu et comment les standards du web comme JavaScript leur est offert comme outil. Les programmeurs de jeux expérimentés et nouveaux dans le développement web pourront aussi en tirer bénéfice.

+{{IncludeSubnav("/fr/docs/Jeux")}} -

Présenter, accepter, interpréter, calculer, repéter

+Cet article se concentre sur l'anatomie et le flux de la plupart des jeux video à partir d'un point de vue technique, concernant la manière dont la boucle principale devrait tourner. Cela aide les débutants dans l'arène du développement à comprendre  ce qui est requis quand il est question de bâtir un jeu et comment les standards du web comme JavaScript leur est offert comme outil. Les programmeurs de jeux expérimentés et nouveaux dans le développement web pourront aussi en tirer bénéfice. -

Le but de chaque jeu vidéo est de présenter à (aux) utilisateur(s) une situation, accepter leur entrée, interpréter ces signaux en actions, et calculer une nouvelle situation résultant de ces actes. Les jeux bouclent continuellement à travers ces niveaux, jusqu'à ce qu'une condition finale arrive (comme gagner, perdre, ou quitter le jeu). Sans surprise, ce modèle correspond à la manière dont un moteur de jeu est programmé.

+## Présenter, accepter, interpréter, calculer, repéter -

Ces spécificités dépendent du jeu.

+Le but de chaque jeu vidéo est de **présenter** à (aux) utilisateur(s) une situation, **accepter** leur entrée, **interpréter** ces signaux en actions, et **calculer** une nouvelle situation résultant de ces actes. Les jeux bouclent continuellement à travers ces niveaux, jusqu'à ce qu'une condition finale arrive (comme gagner, perdre, ou quitter le jeu). Sans surprise, ce modèle correspond à la manière dont un moteur de jeu est programmé. -

Certains jeu maintiennent ce cycle par les entrées du joueur. Imaginez que vous développez un jeu du type "trouvez les différences entre ces deux images". Ces jeux présentent deux images à l'utilisateur; ils accèptent leur clics (ou touchés); ils interprètent l'entrée comme un succès, une erreur, une pause, une interaction de menu, etc.; finalement, ils calculent une scène mise à jour resultant de l'entrée de donnée. La boucle du jeu évolue par l'entrée de l'utilisateur et s'arrête jusqu'à ce qu'il en soumette une nouvelle. C'est plus une approche au coup par coup qui ne demande pas une mise à jour continuelle de chaque image, mais juste quand le joueur réagit.

+Ces spécificités dépendent du jeu. -

D'autres jeux demandent un contrôle précis à chaque fraction de seconde. Les principes sont les mêmes avec une légère différence: chaque animation fait progresser le cycle et tout changement d'entrée d'un utilisateur est capturé dès que possible. Ce modèle au coup par image  est implementé dans ce que l'on appelle la boucle principale. Si vos boucles de jeu sont basées sur le temps alors ce sera là-dessus que seront basées vos simulations.

+Certains jeu maintiennent ce cycle par les entrées du joueur. Imaginez que vous développez un jeu du type *"trouvez les différences entre ces deux images"*. Ces jeux **présentent** deux images à l'utilisateur; ils **accèptent** leur clics (ou touchés); ils **interprètent** l'entrée comme un succès, une erreur, une pause, une interaction de menu, etc.; finalement, ils **calculent** une scène mise à jour resultant de l'entrée de donnée. La boucle du jeu évolue par l'entrée de l'utilisateur et s'arrête jusqu'à ce qu'il en soumette une nouvelle. C'est plus une approche au coup par coup qui ne demande pas une mise à jour continuelle de chaque image, mais juste quand le joueur réagit. -

Mais parfois ce n'est pas un contrôle dans le temps. Votre boucle de jeu peut être similaire à l'exemple cherchez les différences et se baser directement sur les entrées. Cela peut être nécessaire d'avoir à la fois les entrées et un temps simulé. Cela peut aussi être basé sur une boucle qui utilise d'autre chose.

+D'autres jeux demandent un contrôle précis à chaque fraction de seconde. Les principes sont les mêmes avec une légère différence: chaque animation fait progresser le cycle et tout changement d'entrée d'un utilisateur est capturé dès que possible. Ce modèle au coup par image  est implementé dans ce que l'on appelle la **boucle principale**. Si vos boucles de jeu sont basées sur le temps alors ce sera là-dessus que seront basées vos simulations. -

Le JavaScript moderne — comme décrit dans les prochaines sections — heureusement, facilite le développement d'une boucle efficace éxécutée une fois par seconde. Bien sûr, votre jeu sera optimisé au long de sa conception. Si quelque chose doit s'apparenter à un évènement peu fréquent alors il sera préférable de briser la boucle principale (mais pas tout le temps).

+Mais parfois ce n'est pas un contrôle dans le temps. Votre boucle de jeu peut être similaire à l'exemple *cherchez les différences* et se baser directement sur les entrées. Cela peut être nécessaire d'avoir à la fois les entrées et un temps simulé. Cela peut aussi être basé sur une boucle qui utilise d'autre chose. -

Construire une boucle principale en JavaScript

+Le JavaScript moderne — comme décrit dans les prochaines sections — heureusement, facilite le développement d'une boucle efficace éxécutée une fois par seconde. Bien sûr, votre jeu sera optimisé au long de sa conception. Si quelque chose doit s'apparenter à un évènement peu fréquent alors il sera préférable de briser la boucle principale (mais pas tout le temps). -

JavaScript travaille beaucoup mieux avec des évènements et des fonctions de rappel. Les navigateur modernes s'efforcent d'appeler des méthodes au moment où elles sont nécessaires et mises en pause (ou font leur travail) le reste du temps. Il est de bonne pratique d'attacher votre code au moment le plus approprié. Pensez à quel moment votre fonction à besoin d'être appelée sur un interval de temps strict, à chaque image, ou seulement après que quelque chose se soit passé. Être plus spécifique avec le navigateur quand votre fonction à besoin d'être appelée permet au navigateur d'être optimisé une fois votre boucle appelée. De plus, cela peut rendre votre tâche plus aisée.

+## Construire une boucle principale en JavaScript -

Certain programmes ont besoin d'être lancés image-par-image alors pourquoi y attacher quelque chose d'autre que le taux de rafraîchissement du navigateur ? Dans le web, {{ domxref("window.requestAnimationFrame()") }} sera la fondation de bien des boucles principales. Une fonction de rappel doit lui être passée quand elle est appelée. Cette fonction de rappel sera éxécutée à un moment précis avant le prochain rafraîchissement. Voici un exemple d'une simple boucle principale:

+JavaScript travaille beaucoup mieux avec des évènements et des fonctions de rappel. Les navigateur modernes s'efforcent d'appeler des méthodes au moment où elles sont nécessaires et mises en pause (ou font leur travail) le reste du temps. Il est de bonne pratique d'attacher votre code au moment le plus approprié. Pensez à quel moment votre fonction à besoin d'être appelée sur un interval de temps strict, à chaque image, ou seulement après que quelque chose se soit passé. Être plus spécifique avec le navigateur quand votre fonction à besoin d'être appelée permet au navigateur d'être optimisé une fois votre boucle appelée. De plus, cela peut rendre votre tâche plus aisée. -
window.main = function () {
-  window.requestAnimationFrame( main );
+Certain programmes ont besoin d'être lancés image-par-image alors pourquoi y attacher quelque chose d'autre que le taux de rafraîchissement du navigateur ? Dans le web, `{{ domxref("window.requestAnimationFrame()") }}` sera la fondation de bien des boucles principales. Une fonction de rappel doit lui être passée quand elle est appelée. Cette fonction de rappel sera éxécutée à un moment précis avant le prochain rafraîchissement. Voici un exemple d'une simple boucle principale:
 
-  //Qu'importe ce que votre boucle principale doit faire.
-};
+    window.main = function () {
+      window.requestAnimationFrame( main );
 
-main(); //Débuter le cycle.
+ //Qu'importe ce que votre boucle principale doit faire. + }; -

Note: Dans chaque méthodes main() présentées ici, nous planifions un nouveau requestAnimationFrame avant de lancer le contenu de notre boucle. Ce n'est pas par accident et c'est considéré comme une meilleure pratique. Appeler le prochain requestAnimationFrame plus tôt assure que le navigateur la recevra à temps pour le planifier convenablement même si vous image courrante rate la fenêtre de synchronisation principale (VSync).

+ main(); //Débuter le cycle. -

La portion de code ci-dessus comporte deux déclarations. La première créée une fonction comme variable globale appelée main(). Cette fonction effectue un travail et indique aussi au navigateur de s'appeler elle-même au prochain window.requestAnimationFrame(). La seconde déclaration appelle la fonction main(), definie dans la première déclaration. Parceque main() est appelé une fois dans la seconde déclaration et chaque appel de celle-ci la place dans la queue des choses à faire à chaque image, main() est synchronisée à votre taux de rafraîchissement.

+**Note**: Dans chaque méthodes `main()` présentées ici, nous planifions un nouveau `requestAnimationFrame` avant de lancer le contenu de notre boucle. Ce n'est pas par accident et c'est considéré comme une meilleure pratique. Appeler le prochain `requestAnimationFrame` plus tôt assure que le navigateur la recevra à temps pour le planifier convenablement même si vous image courrante rate la fenêtre de synchronisation principale (VSync). -

Bien sûr, cette boucle n'est pas parfaite. Avant que nous discutions de manières de la modifier, parlons de ce qu'elle fait de bien.

+La portion de code ci-dessus comporte deux déclarations. La première créée une fonction comme variable globale appelée `main()`. Cette fonction effectue un travail et indique aussi au navigateur de s'appeler elle-même au prochain `window.requestAnimationFrame()`. La seconde déclaration appelle la fonction `main()`, definie dans la première déclaration. Parceque `main()` est appelé une fois dans la seconde déclaration et chaque appel de celle-ci la place dans la queue des choses à faire à chaque image, `main()` est synchronisée à votre taux de rafraîchissement. -

Temporiser la boucle principale avec le rafraîchissement du navigateur permet à votre boucle d'être éxécutée aussi fréquemment que le navigateur à besoin de rafraîchir l'écran. Cela vous permet de contrôler chaque image de votre animation. C'est aussi beaucoup plus simple car main() est la seule fonction qui est bouclée. Dans un jeu de tir à la première personne (ou un jeu équivalent) on présente une nouvelle scène à chaque image. Vous ne pouvez donc pas obtenir quelque chose de plus fluide que cela.

+Bien sûr, cette boucle n'est pas parfaite. Avant que nous discutions de manières de la modifier, parlons de ce qu'elle fait de bien. -

Pourtant n'imaginez pas que les animations requièrent un contrôle image-par-image. De simples animations peuvent être éxécutées, même avec une accélération matérielle, avec des animations CSS et d'autres outils inclus dans le navigateur. Bon nombre vont vous faciliter la vie.

+Temporiser la boucle principale avec le rafraîchissement du navigateur permet à votre boucle d'être éxécutée aussi fréquemment que le navigateur à besoin de rafraîchir l'écran. Cela vous permet de contrôler chaque image de votre animation. C'est aussi beaucoup plus simple car `main()` est la seule fonction qui est bouclée. Dans un jeu de tir à la première personne (ou un jeu équivalent) on présente une nouvelle scène à chaque image. Vous ne pouvez donc pas obtenir quelque chose de plus fluide que cela. -

Construire une meilleure boucle principale en Javascript

+Pourtant n'imaginez pas que les animations requièrent un contrôle image-par-image. De simples animations peuvent être éxécutées, même avec une accélération matérielle, avec des animations CSS et d'autres outils inclus dans le navigateur. Bon nombre vont vous faciliter la vie. -

Il y a deux problèmes évidents avec notre boucle principale précédente: main() pollue l'objet {{ domxref("window") }} (où sont stockées toutes les variables globales) et l'exemple donné ne nous permet pas de stopper la boucle à moins que l'onglet du navigateur ne soit fermé ou rafraîchit. Pour le premier problème, si vous désirez que la boucle principale tourne simplement sans y accéder directement, vous pouvez en crééer une fonction à accès immédiat -(FAI ou "Immediately-Invoked Function Expression - IIFE").

+## Construire une *meilleure* boucle principale en Javascript -
/*
-* Débuter avec le point virgue au cas où le code qui réside au-dessus de cet exemple
-* s'appuie sur l'insertion automatique de point virgule (ASI). Le navigateur peut alors accidentellement
-* penser que c'est un exemple complet provenant de la ligne précédente. Le point virgule de tête
-* marque le début de notre nouvelle ligne si la précédente n'était pas vide ou complétée.
-*/
+Il y a deux problèmes évidents avec notre boucle principale précédente: `main()` pollue l'objet `{{ domxref("window") }}` (où sont stockées toutes les variables globales) et l'exemple donné ne nous permet pas de *stopper* la boucle à moins que l'onglet du navigateur ne soit fermé ou rafraîchit. Pour le premier problème, si vous désirez que la boucle principale tourne simplement sans y accéder directement, vous pouvez en crééer une fonction à accès immédiat -(FAI ou "Immediately-Invoked Function Expression - IIFE").
 
-;(function () {
-  function main() {
-    window.requestAnimationFrame( main );
+    /*
+    * Débuter avec le point virgue au cas où le code qui réside au-dessus de cet exemple
+    * s'appuie sur l'insertion automatique de point virgule (ASI). Le navigateur peut alors accidentellement
+    * penser que c'est un exemple complet provenant de la ligne précédente. Le point virgule de tête
+    * marque le début de notre nouvelle ligne si la précédente n'était pas vide ou complétée.
+    */
 
-    // Contenu de votre boucle principale.
-  }
+    ;(function () {
+      function main() {
+        window.requestAnimationFrame( main );
 
-  main(); // Débute le cycle
-})();
+ // Contenu de votre boucle principale. + } -

Quand le navigateur passe à travers la FAI, cela va définir votre boucle principale et immédiatement la mettre en file d'attente pour la prochaine image. Cela ne sera attaché à aucun objet et main (ou main() pour les méthodes) sera un nom valide inutilisé dans le reste de l'application, libre d'être défini comme quelque chose d'autre.

+ main(); // Débute le cycle + })(); -

Note: En pratique, il est plus courant de prévenir le prochain requestAnimationFrame() avec une déclaration "if", plutôt que d'appeler cancelAnimationFrame().

+Quand le navigateur passe à travers la FAI, cela va définir votre boucle principale et immédiatement la mettre en file d'attente pour la prochaine image. Cela ne sera attaché à aucun objet et `main` (ou `main()` pour les méthodes) sera un nom valide inutilisé dans le reste de l'application, libre d'être défini comme quelque chose d'autre. -

Pour le second problème, arrêter la boucle principale, vous aurez besoin d'annuler l'appel à main() avec {{ domxref("window.cancelAnimationFrame()") }}. Vous aurez besoin de passer la valeur donneé par cancelAnimationFrame() en référence à requestAnimationFrame() quand elle a été appelée en dernier. Assumons que vos fonctions de jeu et les variables sont bâties dans un espace de nom appelé MyGame. Avec notre dernier exemple étendu, la boucle principale aura maintenant l'air de ceci:

+Note: En pratique, il est plus courant de prévenir le prochain requestAnimationFrame() avec une déclaration "if", plutôt que d'appeler cancelAnimationFrame(). -
/*
-* Débuter avec le point virgue au cas où le code qui réside au-dessus de cet exemple
-* s'appuie sur l'insertion automatique de point virgule (ASI). Le navigateur peut alors accidentellement
-* penser que c'est un exemple complet provenant de la ligne précédente. Le point virgule de tête
-* marque le début de notre nouvelle ligne si la précédente n'était pas vide ou complétée.
-*
-* Assumons aussi que MyGame est défini précédemment.
-*/
+Pour le second problème, arrêter la boucle principale, vous aurez besoin d'annuler l'appel à `main()` avec `{{ domxref("window.cancelAnimationFrame()") }}`. Vous aurez besoin de passer la valeur donneé par `cancelAnimationFrame()` en référence à `requestAnimationFrame()` quand elle a été appelée en dernier. Assumons que vos fonctions de jeu et les variables sont bâties dans un espace de nom appelé `MyGame`. Avec notre dernier exemple étendu, la boucle principale aura maintenant l'air de ceci:
 
-;(function () {
-  function main() {
-    MyGame.stopMain = window.requestAnimationFrame( main );
+    /*
+    * Débuter avec le point virgue au cas où le code qui réside au-dessus de cet exemple
+    * s'appuie sur l'insertion automatique de point virgule (ASI). Le navigateur peut alors accidentellement
+    * penser que c'est un exemple complet provenant de la ligne précédente. Le point virgule de tête
+    * marque le début de notre nouvelle ligne si la précédente n'était pas vide ou complétée.
+    *
+    * Assumons aussi que MyGame est défini précédemment.
+    */
 
-    // Contenu de votre boucle principale.
-  }
+    ;(function () {
+      function main() {
+        MyGame.stopMain = window.requestAnimationFrame( main );
 
-  main(); // Début du cycle
-})();
+ // Contenu de votre boucle principale. + } -

Nous avons maintenant une variable déclarée dans l'espace de nom MyGame, que nous appelons stopMain, qui contient la valeur de l'appel de notre boucle principale requestAnimationFrame() la plus récente. À tout moment, nous pouvons stopper la boucle principale en disant au navigateur d'annuler la requête qui correspond à notre valeur.

+ main(); // Début du cycle + })(); -
window.cancelAnimationFrame( MyGame.stopMain );
+Nous avons maintenant une variable déclarée dans l'espace de nom `MyGame`, que nous appelons `stopMain`, qui contient la valeur de l'appel de notre boucle principale `requestAnimationFrame()` la plus récente. À tout moment, nous pouvons stopper la boucle principale en disant au navigateur d'annuler la requête qui correspond à notre valeur. -

La clé pour programmer une boucle principale, en JavaScript, est d'attacher n'importe quel évènement qui doit diriger votre action et porter attention aux systèmes interconnectés. Vous pourriez avoir différents composants dirigés par différents évènements. Cela paraît comme d'une complexité inutile mais cela peut être une bonne optimisation (pas nécessairement, bien sûr). Le problème c'est que vous ne programmez pas une boucle principale typique. En Javascript, vous utilisez la boucle principale du navigateur et vous essayez de le faire avec efficacité.

+ window.cancelAnimationFrame( MyGame.stopMain ); -

Construire une boucle principale encore plus optimisée en JavaScript

+La clé pour programmer une boucle principale, en JavaScript, est d'attacher n'importe quel évènement qui doit diriger votre action et porter attention aux systèmes interconnectés. Vous pourriez avoir différents composants dirigés par différents évènements. Cela paraît comme d'une complexité inutile mais cela peut être une bonne optimisation (pas nécessairement, bien sûr). Le problème c'est que vous ne programmez pas une boucle principale typique. En Javascript, vous utilisez la boucle principale du navigateur et vous essayez de le faire avec efficacité. -

En fin de compte, en JavaScript, le navigateur roule sa propre boucle principale et votre code existe dans certaines de ses étapes. La section ci-dessus décrit des boucles principales qui essaient de ne pas lâcher le contrôle du navigateur. Ces méthodes principales s'attachent à window.requestAnimationFrame(), qui demandent au navigateur le contrôle sur la prochaine image qui arrive. C'est au navigateur de décider de la gestion de sa boucle principale. Les spécifications du W3C en matière de requestAnimationFrame ne définissent pas exactement quand les navigateur doivent éxécuter les rappels de requestAnimationFrame. Cela pourrait être bénéfique car cela laisse aux concepteurs de navigateurs la liberté d'expérimenter les solutions qu'ils pensent être les meilleures au travers du temps.

+## Construire une boucle principale *encore plus optimisée* en JavaScript -

Les versions modernes de Firefox et Google Chrome (et probablement d'autres)tentent de connecter les rappels de requestAnimationFrame à leur fil principal au tout début de chaque image. De ce fait, le déroulement principal essaye d'être le plus possible comme ci-dessous:

+En fin de compte, en JavaScript, le navigateur roule sa propre boucle principale et votre code existe dans certaines de ses étapes. La section ci-dessus décrit des boucles principales qui essaient de ne pas lâcher le contrôle du navigateur. Ces méthodes principales s'attachent à `window.requestAnimationFrame()`, qui demandent au navigateur le contrôle sur la prochaine image qui arrive. C'est au navigateur de décider de la gestion de sa boucle principale. Les spécifications du [W3C en matière de requestAnimationFrame](http://www.w3.org/TR/animation-timing/) ne définissent pas exactement quand les navigateur doivent éxécuter les rappels de requestAnimationFrame. Cela pourrait être bénéfique car cela laisse aux concepteurs de navigateurs la liberté d'expérimenter les solutions qu'ils pensent être les meilleures au travers du temps. -
    -
  1. Débuter une nouvelle image (pendant que la précédente est prise en charge par l'affichage).
  2. -
  3. Passer à travers la liste de retours requestAnimationFrame et les appeler.
  4. -
  5. Passer le ramasse-miettes et autres tâches par-images quand les retours ci-dessous cessent de controler le fil principal.
  6. -
  7. Se mettre en veille (à moins qu'un évènement interrompe la sieste du navigateur) jusqu'à ce que le moniteur ne soit prêt pour votre image (VSync) et répète.
  8. -
+Les versions modernes de Firefox et Google Chrome (et probablement d'autres)*tentent* de connecter les rappels de `requestAnimationFrame` à leur fil principal au tout début de chaque image. De ce fait, le déroulement principal *essaye* d'être le plus possible comme ci-dessous: -

Vous pouvez considérer que développer une application en temps réél est comme avoir un temps donné pour faire le travail. Toutes les étapes ci-dessus doivent prendre effet toutes les 16.5 millisecondes pour fonctionner avec un affichage de 60Hz. Les navigateurs invoquent leur code aussitôt que possible pour donner un maximum de temps aux calculs. Votre fil principal va souvent débuter par les tâches qui ne sont même pas dans le fil principal (tel que la rasterisation ou les ombrages en WebGL). Les longs calculs peuvent être fait par un Web Worker ou une accélération matérielle en même temps que le navigateur utilise son propre fil principal pour passer le ramasse-miette, ces autres tâches, ou gérer les évènements asynchrones.

+1. Débuter une nouvelle image (pendant que la précédente est prise en charge par l'affichage). +2. Passer à travers la liste de retours `requestAnimationFrame` et les appeler. +3. Passer le ramasse-miettes et autres tâches par-images quand les retours ci-dessous cessent de controler le fil principal. +4. Se mettre en veille (à moins qu'un évènement interrompe la sieste du navigateur) jusqu'à ce que le moniteur ne soit prêt pour votre image ([VSync](http://www.techopedia.com/definition/92/vertical-sync-vsync)) et répète. -

Bien que nous ne discutons pas du gain de temps, plusieurs navigateur ont un outil appelé Temps Haute Résolution. L'objet {{ domxref("Date") }} n'est plus la méthode reconnue pour temporiser les évènements car elle est très imprécise et peut être modifiée par l'horloge système. Le Temps Haute Résolution, d'un autre côté, compte le nombre de millisecondes depuis navigationStart (quand le document précédent est déchargé). Cette valeur est retournée en un nombre décimal précis au millième de seconde. Il est connu comme étant {{ domxref("DOMHighResTimeStamp") }} mais, à toutes fins utiles, considérez le comme un nombre décimal à virgule flottante.

+Vous pouvez considérer que développer une application en temps réél est comme avoir un temps donné pour faire le travail. Toutes les étapes ci-dessus doivent prendre effet toutes les 16.5 millisecondes pour fonctionner avec un affichage de 60Hz. Les navigateurs invoquent leur code aussitôt que possible pour donner un maximum de temps aux calculs. Votre fil principal va souvent débuter par les tâches qui ne sont même pas dans le fil principal (tel que la rasterisation ou les ombrages en WebGL). Les longs calculs peuvent être fait par un Web Worker ou une accélération matérielle en même temps que le navigateur utilise son propre fil principal pour passer le ramasse-miette, ces autres tâches, ou gérer les évènements asynchrones. -

Note: Les systèmes (matériels ou logiciels) qui ne sont pas capables d'avoir une précision à la microseconde sont autorisés à fournir une précision à la milliseconde au minimum. Sinon, ils devraient fournir une précision de 0.001ms s'ils en sont capables.

+Bien que nous ne discutons pas du gain de temps, plusieurs navigateur ont un outil appelé *Temps Haute Résolution*. L'objet {{ domxref("Date") }} n'est plus la méthode reconnue pour temporiser les évènements car elle est très imprécise et peut être modifiée par l'horloge système. Le Temps Haute Résolution, d'un autre côté, compte le nombre de millisecondes depuis `navigationStart` (quand le document précédent est déchargé). Cette valeur est retournée en un nombre décimal précis au millième de seconde. Il est connu comme étant `{{ domxref("DOMHighResTimeStamp") }}` mais, à toutes fins utiles, considérez le comme un nombre décimal à virgule flottante. -

Seule, cette valeur n'est pas très utile, considérant qu'il est relatif à un évènement peu intéressant, mais ils peut quand même être soustrait d'une autre prise de temps pour déterminer plus précisément combien de temps s'est déroulé entre ces deux poins. Pour obtenir une de ces prises de temps, vous pouvez appeler la fonction window.performance.now() et stocker le résultat dans une variable.

+**Note**: Les systèmes (matériels ou logiciels) qui ne sont pas capables d'avoir une précision à la microseconde sont autorisés à fournir une précision à la milliseconde au minimum. Sinon, ils devraient fournir une précision de 0.001ms s'ils en sont capables. -
var tNow = window.performance.now();
-
+Seule, cette valeur n'est pas très utile, considérant qu'il est relatif à un évènement peu intéressant, mais ils peut quand même être soustrait d'une autre prise de temps pour déterminer plus précisément combien de temps s'est déroulé entre ces deux poins. Pour obtenir une de ces prises de temps, vous pouvez appeler la fonction `window.performance.now()` et stocker le résultat dans une variable. -

Retournons sur le sujet de la boucle principale. Il vous arrivera souvent de vouloir savoir quand votre boucle principale a été invoquée. Parce que cela est commun, la fonction window.requestAnimationFrame() fourni toujours un DOMHighResTimeStamp avec un argument de retour quand elles sont éxécutées. Cela mène à une amélioration de notre boucle précédente.

+ var tNow = window.performance.now(); -
/*
-* Débuter avec le point virgue au cas où le code qui réside au-dessus de cet exemple
-* s'appuie sur l'insertion automatique de point virgule (ASI). Le navigateur peut alors accidentellement
-* penser que c'est un exemple complet provenant de la ligne précédente. Le point virgule de tête
-* marque le début de notre nouvelle ligne si la précédente n'était pas vide ou complétée.
-*
-* Assumons aussi que MyGame est défini précédemment.
-*/
+Retournons sur le sujet de la boucle principale. Il vous arrivera souvent de vouloir savoir quand votre boucle principale a été invoquée. Parce que cela est commun, la fonction `window.requestAnimationFrame()` fourni toujours un `DOMHighResTimeStamp` avec un argument de retour quand elles sont éxécutées. Cela mène à une amélioration de notre boucle précédente.
 
-;(function () {
-  function main( tFrame ) {
-    MyGame.stopMain = window.requestAnimationFrame( main );
+    /*
+    * Débuter avec le point virgue au cas où le code qui réside au-dessus de cet exemple
+    * s'appuie sur l'insertion automatique de point virgule (ASI). Le navigateur peut alors accidentellement
+    * penser que c'est un exemple complet provenant de la ligne précédente. Le point virgule de tête
+    * marque le début de notre nouvelle ligne si la précédente n'était pas vide ou complétée.
+    *
+    * Assumons aussi que MyGame est défini précédemment.
+    */
 
-    // Contenu de votre boucle principale.
-    // tFrame, provenant de "function main ( tFrame )", est maintenant un DOMHighResTimeStamp (Temps Haute Résolution du DOM) fourni par rAF.
-  }
+    ;(function () {
+      function main( tFrame ) {
+        MyGame.stopMain = window.requestAnimationFrame( main );
 
-  main(); // Débute le cycle
-})();
+ // Contenu de votre boucle principale. + // tFrame, provenant de "function main ( tFrame )", est maintenant un DOMHighResTimeStamp (Temps Haute Résolution du DOM) fourni par rAF. + } -

Plusieurs autres optimisations sont possibles et cela dépend vraiment de ce que votre jeu tente d'accomplir. Le genre de votre jeu va visiblement faire la différence mais il peut être aussi subtil que cela. Vous pourriez dessiner un pixel à la fois sur un canvas ou vous pourriez étager des éléments du DOM (incluant de multiples canvas de WebGL avec des arrières-plans transparents si vous le désirez) en une hierarchie complexe. Chacunes de ces solutions mènera à des contraintes et opportunités différentes.

+ main(); // Débute le cycle + })(); -

Il est temps de la... décision

+Plusieurs autres optimisations sont possibles et cela dépend vraiment de ce que votre jeu tente d'accomplir. Le genre de votre jeu va visiblement faire la différence mais il peut être aussi subtil que cela. Vous pourriez dessiner un pixel à la fois sur un canvas ou vous pourriez étager des éléments du DOM (incluant de multiples canvas de WebGL avec des arrières-plans transparents si vous le désirez) en une hierarchie complexe. Chacunes de ces solutions mènera à des contraintes et opportunités différentes. -

Vous aurez besoin de faire un choix difficile concernant votre boucle principale: comment simuler l'évolution du temps. Si vous désirez un contrôle par image alors vous aurez besoin de déterminer combien sera-t-il nécessaire à votre jeu d'être remis à jour et dessiné. Vous pourriez même vouloir une mise à jour et dessiner à différents taux (de rafraîchissement). Vous aurez aussi besoin de considérer combien comment votre jeu échouera gracieusement si le système de l'utilisateur ne peut soutenir la charge de travail. Commençons par considérer que vous serez capables de gérer les entrées de l'utilisateur et de mettre à jour l'état du jeu à chaque fois que vous dessinez. Nous ramifierons après.

+## Il est temps de la... décision -

Note: Changer la manière dont votre boucle principale gère le temps est un cauchemar de débuggage, partout. Pensez à vos besoins, précautionneusement, avant de travailler sur votre boucle principale.

- -

De quoi les jeux dans le navigateur devraient avoir l'air

- -

Si votre jeu peut atteindre le maximum du taux de rafraîchissement sur n'importe quel matériel que vous supportez, alors votre travail est plutôt facile. Vous pouvez simplement mettre à jour, effectuer le rendu, et ne rien faire avant la synchronisation verticale (VSync).

+Vous aurez besoin de faire un choix difficile concernant votre boucle principale: comment simuler l'évolution du temps. Si vous désirez un contrôle par image alors vous aurez besoin de déterminer combien sera-t-il nécessaire à votre jeu d'être remis à jour et dessiné. Vous pourriez même vouloir une mise à jour et dessiner à différents taux (de rafraîchissement). Vous aurez aussi besoin de considérer combien comment votre jeu échouera gracieusement si le système de l'utilisateur ne peut soutenir la charge de travail. Commençons par considérer que vous serez capables de gérer les entrées de l'utilisateur et de mettre à jour l'état du jeu à chaque fois que vous dessinez. Nous ramifierons après. -
/*
-* Débuter avec le point virgue au cas où le code qui réside au-dessus de cet exemple
-* s'appuie sur l'insertion automatique de point virgule (ASI). Le navigateur peut alors accidentellement
-* penser que c'est un exemple complet provenant de la ligne précédente. Le point virgule de tête
-* marque le début de notre nouvelle ligne si la précédente n'était pas vide ou complétée.
-*
-* Assumons aussi que MyGame est défini précédemment.
-*/
-
-;(function () {
-  function main( tFrame ) {
-    MyGame.stopMain = window.requestAnimationFrame( main );
-
-    update( tFrame ); //Appelez votre méthode de mise à jour. Dans notre cas, nous lui donnons la capture de temps rAF.
-    render();
-  }
-
-  main(); // Start the cycle
-})();
- -

Si le maximum du taux de rafraîchissement ne peut être atteind, les paramètres de qualités pourraient être mis à jour pour rester sous notre gain en temps. L'exemple le plus célèbre de ce concept est le jeu de id Software, RAGE. Ce jeu a retiré à l'utilisateur le contrôle afin de conserver son temps de calcul à environ 16ms (ou environ 60ips). Si le calcul prenait trop de temps alors la résolution serait diminuée, les textures et autres éléments échoueraient au chargement et à l'affichage, et ainsi de suite. Ce cas (non-web) a créé plusieurs hypothèses et faits:

- - - -

Autres manières de gérer les besoins du taux de rafraîchissement variable

- -

D'autres méthodes d'approcher le problème existent.

- -

Une technique commune est de mettre à jour la simulation à une fréquence constante et dessiner autant (ou au moins) que le taux actuel le permet. Cette méthode de mise à jour peut continuer à boucler sans se soucier de ce que l'utilisateur voit. Cette méthode peut voir la dernière mise à jour, et quand elle est arrivée. Quand le dessin sait quand il est représenté, et le temps simulé pour la dernière mise à jour, il peut prédire une image plausible à dessiner. Cela n'a pas d'importance si c'est plus fréquent que la mise à jour officielle (ou même moins fréquente). La méthode de mise à jour établis des points de contrôle, autant que le système le permet, la méthode de rendu va dessiner autour de ces intants de temps. Il y a plusieurs manières de séparer la méthode de mise à jour dans les standards du web:

- - - -

Chacune de ces méthodes ont un compromis similaire:

- - - -

Une méthode séparée de mise à jour et de dessin pourrait avoir l'air de l'exemple suivant. Pour les besoins de la démonstration, l'exemple est basé sur le troisième point, sans l'utilisation des Web Workers par soucis de lecture (et, soyons honnête, pour faciliter l'écriture).

- -

Note: Cet exemple spécifiquement, aurait besoin d'une relecture.

- -
/*
-* Débuter avec le point virgue au cas où le code qui réside au-dessus de cet exemple
-* s'appuie sur l'insertion automatique de point virgule (ASI). Le navigateur peut alors accidentellement
-* penser que c'est un exemple complet provenant de la ligne précédente. Le point virgule de tête
-* marque le début de notre nouvelle ligne si la précédente n'était pas vide ou complétée.
-*
-* Assumons aussi que MyGame est défini précédemment.
-*
-*
-* MyGame.lastRender fait le suivi du dernier poinçon de temps fourni par requestAnimationFrame.
-* MyGame.lastTick fait le suivi de la dernière mise à jour. Toujours incrémenté par tickLength.
-* MyGame.tickLength est à quelle fréquence le jeu est mis à jour. C'est 20 Hz (50ms) ici.
-*
-* timeSinceTick est le temps entre un retour de requestAnimationFrame et la dernière mise à jour.
-* numTicks est combien de mises à jour auraient dû avoir lieu entre 2 rendus d'images.
-*
-* render() se voit passé tFrame car il est considéré que la méthode de rendu va calculer
-           combien de temps se sera écoulé depuis la mise à jour la plus récente pour
-           extrapolation (purement cosmétique pour des systèmes rapides). La scène est dessinée.
-*
-* update() calcule l'état du jeu comme point donné dans le temps. Ça devrait toujours être
-           incrémenté par tickLength. C'est l'autorité de l'état du jeu. On lui passe le
-           DOMHighResTimeStamp pour le temps que cela représente (qui, à nouveau, est toujours
-           la dernière mise à jour + MyGame.tickLength qu'une pause ne soit ajoutée, etc.)
-*
-* setInitialState() réalise n'importe quel tâche mise de côté avant que la boucle principale ne doive tourner.
-*                   Ceci est juste un exemple générique d'une fonction que vous devriez ajouter.
-*/
-
-;(function () {
-  function main( tFrame ) {
-    MyGame.stopMain = window.requestAnimationFrame( main );
-    var nextTick = MyGame.lastTick + MyGame.tickLength;
-    var numTicks = 0;
-
-    //Si tFrame < nextTick alors 0 ticks doit être mis à jour (0 est par défaut pour numTicks).
-    //Si tFrame = nextTick alors 1 tick doit être mis à jour (et ainsi de suite).
-    //Note: Comme nous le mentionons dans le sommaire, vous devriez faire un suivi de la taille de numTicks.
-    //S'il est important, alors soit votre jeu est en veille, soit votre machine ne répond plus.
-    if (tFrame > nextTick) {
-      var timeSinceTick = tFrame - MyGame.lastTick;
-      numTicks = Math.floor( timeSinceTick / MyGame.tickLength );
-    }
-
-    queueUpdates( numTicks );
-    render( tFrame );
-    MyGame.lastRender = tFrame;
-  }
-
-  function queueUpdates( numTicks ) {
-    for(var i=0; i < numTicks; i++) {
-      MyGame.lastTick = MyGame.lastTick + MyGame.tickLength; //Maitenant lastTick est ce tick.
-      update( MyGame.lastTick );
-    }
-  }
-
-  MyGame.lastTick = performance.now();
-  MyGame.lastRender = MyGame.lastTick; //Prétendre que le premier dessin était sur la première mise à jour.
-  MyGame.tickLength = 50; //Cela positionne votre simulation pour tourner à 20Hz (50ms)
-
-  setInitialState();
-  main(performance.now()); // Débute le cycle
-})();
- -

Une autre alternative est de simplement faire certaines choses moins souvent. Si une portion de votre boucle de mise à jour est difficile à calculer et intense (en temps), vous devrier considérer réduire sa fréquence et, idéalement, la diviser en portions à travers une période plus allongée. Un exemple implicite de cela est rencontré dans "The Artillery Blog for Artillery Games", où ils ajustent leur taux de création de miettes pour optimiser leur ramasse-miettes. Apparemment, le nettoyage des ressources n'est pas sensible au temps (spécialement si le nettoyage est plus dérangeant que le la miette elle-même).

- -

Cela peut aussi s'appliquer à vos propres tâches. Elles sont de bonnes candidates pour en générer quand les ressources disponibles deviennent un problème.

- -

Sommaire

- -

J'aimerai être clair que rien de ce qu'il y a ci-dessus, ou rien de cela, ne puisse être ce qu'il y a de mieux pour votre jeu. La décision correcte dépend entièrement des compromis que vous êtes prêts (ou pas) à faire. La préocupation est principalement de permuter vers une autre option. Heureusement, je n'en ai pas l'expérience mais j'ai entendu dire que c'est un jeu de cache-cache exténuant.

- -

Une chose importante à retenir pour les plateformes gérées, telles que le web, est que votre boucle pourrait arrêter son éxécution pour une période de temps significative. Cela pourrait arriver quand l'utilisateur déselectionne votre onglet et que le navigateur tombe en veille (ou ralenti) son interval de retour requestAnimationFrame. Vous avez plusieurs façons de gérer cela et cela peut dépendre de votre jeu, s'il est pour un seul joueur ou multijoueurs. Certains des choix sont:

- - - -

Une fois que votre boucle principale a été développée et que vous avez pris vos décisions sur un lot d'hypothèses et de compromis qui conviendront à votre jeu, cela devient juste une question d'utilisation de vos décisions pour calculer n'importe quelle physique applicable, intelligence artificielle, sons, synchronisation réseau, et quoique votre jeu ai besoin.

+**\*Note**:\* Changer la manière dont votre boucle principale gère le temps est un cauchemar de débuggage, partout. Pensez à vos besoins, précautionneusement, avant de travailler sur votre boucle principale. + +### De quoi les jeux dans le navigateur devraient avoir l'air + +Si votre jeu peut atteindre le maximum du taux de rafraîchissement sur n'importe quel matériel que vous supportez, alors votre travail est plutôt facile. Vous pouvez simplement mettre à jour, effectuer le rendu, et ne rien faire avant la synchronisation verticale (VSync). + + /* + * Débuter avec le point virgue au cas où le code qui réside au-dessus de cet exemple + * s'appuie sur l'insertion automatique de point virgule (ASI). Le navigateur peut alors accidentellement + * penser que c'est un exemple complet provenant de la ligne précédente. Le point virgule de tête + * marque le début de notre nouvelle ligne si la précédente n'était pas vide ou complétée. + * + * Assumons aussi que MyGame est défini précédemment. + */ + + ;(function () { + function main( tFrame ) { + MyGame.stopMain = window.requestAnimationFrame( main ); + + update( tFrame ); //Appelez votre méthode de mise à jour. Dans notre cas, nous lui donnons la capture de temps rAF. + render(); + } + + main(); // Start the cycle + })(); + +Si le maximum du taux de rafraîchissement ne peut être atteind, les paramètres de qualités pourraient être mis à jour pour rester sous notre gain en temps. L'exemple le plus célèbre de ce concept est le jeu de id Software, RAGE. Ce jeu a retiré à l'utilisateur le contrôle afin de conserver son temps de calcul à environ 16ms (ou environ 60ips). Si le calcul prenait trop de temps alors la résolution serait diminuée, les textures et autres éléments échoueraient au chargement et à l'affichage, et ainsi de suite. Ce cas (non-web) a créé plusieurs hypothèses et faits: + +- Chaque image d'animation compte pour une entrée utilisateur. +- Aucune image n'a besoin d'être extrapolée (devinée) car chaque élément à sa propre mise à jour. +- Les systèmes simulés peuvent en gros considérer que chaque mise à jour complète est d'environ 16ms. +- Permettant à l'utilisateur le contrôle à travers des paramètres serait un cauchemar. +- Des moniteur différents apportent des taux de rafraîchissement différents: 30 FPS, 75 FPS, 100 FPS, 120 FPS, 144 FPS, etc. +- Des systèmes qui ne sont pas capables de fonctionner avec 60 FPS vont perdre en qualité pour permettre au jeu de rouler à une vitesse optimale (éventuellement, il échouera complètement si cela devient trop bas). + +### Autres manières de gérer les besoins du taux de rafraîchissement variable + +D'autres méthodes d'approcher le problème existent. + +Une technique commune est de mettre à jour la simulation à une fréquence constante et dessiner autant (ou au moins) que le taux actuel le permet. Cette méthode de mise à jour peut continuer à boucler sans se soucier de ce que l'utilisateur voit. Cette méthode peut voir la dernière mise à jour, et quand elle est arrivée. Quand le dessin sait quand il est représenté, et le temps simulé pour la dernière mise à jour, il peut prédire une image plausible à dessiner. Cela n'a pas d'importance si c'est plus fréquent que la mise à jour officielle (ou même moins fréquente). La méthode de mise à jour établis des points de contrôle, autant que le système le permet, la méthode de rendu va dessiner autour de ces intants de temps. Il y a plusieurs manières de séparer la méthode de mise à jour dans les standards du web: + +- Dessiner à chaque `requestAnimationFrame` et mettre à jour {{ domxref("window.setInterval") }} ou {{ domxref("window.setTimeout") }}. + + - Cela utilise le temps du processeur même quand il n'a pas l'attention ou qu'il est minimisé, qu'il ne monopolise pas le fil principal, et est probablement un artefact de la traditionnelle boucle principale (mais plus simple). + +- Dessiner à chaque `requestAnimationFrame` et mettre à jour sur un `setInterval` ou `setTimeout` dans un [Web Worker](/fr/docs/Web/Guide/Performance/Using_web_workers). + + - C'est la même chose que ci-dessus, excepté que la mise à jour ne monopolise pas le fil principal (ni le fil principal ne le monopolise). C'est une solution plus complexe, et ce pourrait être trop de travail pour de simples mises à jours. + +- Dessiner à chaque `requestAnimationFrame` et l'utiliser pour solliciter un Web Worker qui contient la méthode de mise à jour avec la quantité de temps à calculer, s'il y a lieu. + + - Cela se met en veille jusqu'à ce que `requestAnimationFrame` est appelée et ne pollue pas le fil principal, et de plus vous ne vous reposez pas sur d'anciennes méthodes. À nouveau, c'est un peu plus complexe que les deux premières options, et *débuter* chaque mise à jour sera bloqué tant que le navigateur ne décide de lancer les retours rAF. + +Chacune de ces méthodes ont un compromis similaire: + +- Les utilisateurs peuvent éviter le rendu d'images ou interpoler celles en sus dépendant de leurs performances. +- Vous pouvez compter sur tous les utilisateurs mettant à jours les variables non-cosmetiques à la même fréquence constante, moins quelques hoquets. +- Beaucoup plus compliquée à programmer que la boucle de base que nous avons vu précédemment. +- Les entrées utilisateurs sont complètement ignorées jusqu'à la prochaine mise à jour (même si l'utilisateur à un système rapide). +- L'interpolation obligatoire à un défaut de performance obligatoire. + +Une méthode séparée de mise à jour et de dessin pourrait avoir l'air de l'exemple suivant. Pour les besoins de la démonstration, l'exemple est basé sur le troisième point, sans l'utilisation des Web Workers par soucis de lecture (et, soyons honnête, pour faciliter l'écriture). + +_Note: Cet exemple spécifiquement, aurait besoin d'une relecture._ + + /* + * Débuter avec le point virgue au cas où le code qui réside au-dessus de cet exemple + * s'appuie sur l'insertion automatique de point virgule (ASI). Le navigateur peut alors accidentellement + * penser que c'est un exemple complet provenant de la ligne précédente. Le point virgule de tête + * marque le début de notre nouvelle ligne si la précédente n'était pas vide ou complétée. + * + * Assumons aussi que MyGame est défini précédemment. + * + * + * MyGame.lastRender fait le suivi du dernier poinçon de temps fourni par requestAnimationFrame. + * MyGame.lastTick fait le suivi de la dernière mise à jour. Toujours incrémenté par tickLength. + * MyGame.tickLength est à quelle fréquence le jeu est mis à jour. C'est 20 Hz (50ms) ici. + * + * timeSinceTick est le temps entre un retour de requestAnimationFrame et la dernière mise à jour. + * numTicks est combien de mises à jour auraient dû avoir lieu entre 2 rendus d'images. + * + * render() se voit passé tFrame car il est considéré que la méthode de rendu va calculer +   combien de temps se sera écoulé depuis la mise à jour la plus récente pour +   extrapolation (purement cosmétique pour des systèmes rapides). La scène est dessinée. + * + * update() calcule l'état du jeu comme point donné dans le temps. Ça devrait toujours être +   incrémenté par tickLength. C'est l'autorité de l'état du jeu. On lui passe le +   DOMHighResTimeStamp pour le temps que cela représente (qui, à nouveau, est toujours + la dernière mise à jour + MyGame.tickLength qu'une pause ne soit ajoutée, etc.) + * + * setInitialState() réalise n'importe quel tâche mise de côté avant que la boucle principale ne doive tourner. + * Ceci est juste un exemple générique d'une fonction que vous devriez ajouter. + */ + + ;(function () { + function main( tFrame ) { + MyGame.stopMain = window.requestAnimationFrame( main ); + var nextTick = MyGame.lastTick + MyGame.tickLength; + var numTicks = 0; + + //Si tFrame < nextTick alors 0 ticks doit être mis à jour (0 est par défaut pour numTicks). + //Si tFrame = nextTick alors 1 tick doit être mis à jour (et ainsi de suite). + //Note: Comme nous le mentionons dans le sommaire, vous devriez faire un suivi de la taille de numTicks. + //S'il est important, alors soit votre jeu est en veille, soit votre machine ne répond plus. + if (tFrame > nextTick) { + var timeSinceTick = tFrame - MyGame.lastTick; + numTicks = Math.floor( timeSinceTick / MyGame.tickLength ); + } + + queueUpdates( numTicks ); + render( tFrame ); + MyGame.lastRender = tFrame; + } + + function queueUpdates( numTicks ) { + for(var i=0; i < numTicks; i++) { + MyGame.lastTick = MyGame.lastTick + MyGame.tickLength; //Maitenant lastTick est ce tick. + update( MyGame.lastTick ); + } + } + + MyGame.lastTick = performance.now(); + MyGame.lastRender = MyGame.lastTick; //Prétendre que le premier dessin était sur la première mise à jour. + MyGame.tickLength = 50; //Cela positionne votre simulation pour tourner à 20Hz (50ms) + + setInitialState(); + main(performance.now()); // Débute le cycle + })(); + +Une autre alternative est de simplement faire certaines choses moins souvent. Si une portion de votre boucle de mise à jour est difficile à calculer et intense (en temps), vous devrier considérer réduire sa fréquence et, idéalement, la diviser en portions à travers une période plus allongée. Un exemple implicite de cela est rencontré dans "The Artillery Blog for Artillery Games", où ils [ajustent leur taux de création de miettes](http://blog.artillery.com/2012/10/browser-garbage-collection-and-framerate.html) pour optimiser leur ramasse-miettes. Apparemment, le nettoyage des ressources n'est pas sensible au temps (spécialement si le nettoyage est plus dérangeant que le la miette elle-même). + +Cela peut aussi s'appliquer à vos propres tâches. Elles sont de bonnes candidates pour en générer quand les ressources disponibles deviennent un problème. + +## Sommaire + +J'aimerai être clair que rien de ce qu'il y a ci-dessus, ou rien de cela, ne puisse être ce qu'il y a de mieux pour votre jeu. La décision correcte dépend entièrement des compromis que vous êtes prêts (ou pas) à faire. La préocupation est principalement de permuter vers une autre option. Heureusement, je n'en ai pas l'expérience mais j'ai entendu dire que c'est un jeu de cache-cache exténuant. + +Une chose importante à retenir pour les plateformes gérées, telles que le web, est que votre boucle pourrait arrêter son éxécution pour une période de temps significative. Cela pourrait arriver quand l'utilisateur déselectionne votre onglet et que le navigateur tombe en veille (ou ralenti) son interval de retour `requestAnimationFrame`. Vous avez plusieurs façons de gérer cela et cela peut dépendre de votre jeu, s'il est pour un seul joueur ou multijoueurs. Certains des choix sont: + +- Considérer le écart comme "une pause" et ne pas prendre en compte le temps. + + - Vous pouvez probablement voir comment cela peut être problématique pour la plupart des jeux multijoueurs. + +- Vous pouvez stimuler l'écart pour faire du rattrapage. + + - Cela peut être un problème pour de longues pauses et/ou des mises à jour complexes. + +- Vous pouvez récupérer l'état du jeu à partir d'un pair sur le serveur. + + - Ceci n'est pas efficace si votre pair ou le serveur sont périmés eux-aussi, ou s'ils n'existent pas car le jeu en mode un seul joueur n'existe pas et n'a pas de serveur. + +Une fois que votre boucle principale a été développée et que vous avez pris vos décisions sur un lot d'hypothèses et de compromis qui conviendront à votre jeu, cela devient juste une question d'utilisation de vos décisions pour calculer n'importe quelle physique applicable, intelligence artificielle, sons, synchronisation réseau, et quoique votre jeu ai besoin. diff --git a/files/fr/games/examples/index.md b/files/fr/games/examples/index.md index 4f81187ec3..a25682538b 100644 --- a/files/fr/games/examples/index.md +++ b/files/fr/games/examples/index.md @@ -9,120 +9,113 @@ tags: translation_of: Games/Examples original_slug: Jeux/Exemples --- -
{{GamesSidebar}}
  {{IncludeSubnav("/fr/docs/Jeux")}}
+{{GamesSidebar}}  {{IncludeSubnav("/fr/docs/Jeux")}} -

Cette page liste un grand nombre de démos de technologies web impressionnantes vous permettant de vous inspirer et de vous amuser. Une preuve de ce qui peut être fait avec Javascript, WebGL et autres. Les deux premières sections listent des jeux tandis que la troisième est une liste de démos de technologies web.

+Cette page liste un grand nombre de démos de technologies web impressionnantes vous permettant de vous inspirer et de vous amuser. Une preuve de ce qui peut être fait avec Javascript, WebGL et autres. Les deux premières sections listent des jeux tandis que la troisième est une liste de démos de technologies web. -

Démos/Jeux gratuits

+## Démos/Jeux gratuits -
-
Orpega
-
Jeu de tir massivement multijoueur sur le thème de l'espace en HTML5 / JavaScript sans moteur et NodeJS pour le serveur (http://orpe.ga/)
-
Beloola
-
Plateforme sociale de réalité virtuelle web pour les passionnés. Expérience disponible à la fois sur écrans 2D et casques de réalité virtuelle (Paramètres / Passer en mode VR)
-
Tanx
-
Un jeu de combat de tanks multijoueurs, créé avec PlayCanvas.
-
Hyper Vanguard Force
-
Un "space shooter" (tireur de l'espace) à défilement vertical.
-
Swooop
-
Un jeu d'aviation : contrôle ton avion et récupère les joyaux. Aussi créé avec PlayCanvas.
-
Save the Day
-
Volez à bord de votre hélicoptère de sauvetage vers la zone sinistrée et sauvez les victimes coincées (ga.me).
-
Polycraft
-
Un jeu de survie, explore l'île et bats les monstres.
-
HexGL
-
Un jeu de course futuriste rythmé.
-
Dead Trigger 2
-
Un jeu d'action avec des zombies, créé avec Unity3D.
-
Angry Bots
-
Une démo de jeu de tir futuriste à la 3ème personne, créé avec Unity3D.
-
Nutmeg
-
Jeu de plateforme action rétro.
-
Back to Candyland
-
Un jeu de type Match 3 (Candy Crush).
-
Biolab Disaster
-
Un jeu de plateforme et de tir à défilement horizontal.
-
X-Type
-
Une démo de "space shooter" (tireur de l'espace) à défilement vertical.
-
Xibalba
-
Un jeu rétro de tir à la première personne (Doom-style).
-
Gorescript
-
Un autre jeu rétro de tir à la première personne.
-
The Wizard
-
Un jeu de réflexion au tour par tour.
-
Hextris
-
Un jeu de réflexion hexagonal ressemblant à Tetris.
-
2048
-
Un jeu de réflexion où il faut faire glisser des tuiles.
-
BananaBread
-
Un jeu de tir à la première personne en 3D développé en utilisant Emscripten, WebGL et WebRTC.
-
Monster Madness
-
Un jeu de tir multijoueur en ligne développé par "Nom Nom Games" et "Trendy entertainment" en utilisant WebGL et asm.js.
-
Auralux
-
Un jeu de stratégie basé sur WebGL et asm.js : capture tous les soleils pour gagner !
-
BrowserQuest
-
Un MMORPG crée par the Little Workshop et Mozilla.
-
Shoot The Rocks
-
Un jeu de tir solo 2D Canvas, dans le style des classiques Asteroids d' Atari, jeux d' arcade depuis 1979.
-
Star Citadel
-
Une nouvelle version de Star Castle, le classique jeu d'arcade 1980 de Cinematronics, construit avec Canvas 2D.
-
+- [Orpega](http://orpe.ga/) + - : Jeu de tir massivement multijoueur sur le thème de l'espace en HTML5 / JavaScript sans moteur et NodeJS pour le serveur (http\://orpe.ga/) +- [Beloola](http://www.beloola.com) + - : Plateforme sociale de réalité virtuelle web pour les passionnés. Expérience disponible à la fois sur écrans 2D et casques de réalité virtuelle (_Paramètres / Passer en mode VR_) +- [Tanx](http://playcanv.as/p/aP0oxhUr) + - : Un jeu de combat de tanks multijoueurs, créé avec [PlayCanvas](https://playcanvas.com/). +- [Hyper Vanguard Force](https://robertsspaceindustries.com/comm-link/transmission/14704-Hyper-Vanguard-Force) + - : Un "space shooter" _(tireur de l'espace)_ à défilement vertical. +- [Swooop](http://playcanv.as/p/JtL2iqIH) + - : Un jeu d'aviation : contrôle ton avion et récupère les joyaux. Aussi créé avec [PlayCanvas](https://playcanvas.com/). +- [Save the Day](https://ga.me/games/save-the-day) + - : Volez à bord de votre hélicoptère de sauvetage vers la zone sinistrée et sauvez les victimes coincées (ga.me). +- [Polycraft](https://ga.me/games/polycraft) + - : Un jeu de survie, explore l'île et bats les monstres. +- [HexGL](http://hexgl.bkcore.com/) + - : Un jeu de course futuriste rythmé. +- [Dead Trigger 2](http://beta.unity3d.com/jonas/DT2/) + - : Un jeu d'action avec des zombies, créé avec [Unity3D](http://unity3d.com/). +- [Angry Bots](http://beta.unity3d.com/jonas/AngryBots/) + - : Une démo de jeu de tir futuriste à la 3ème personne, créé avec [Unity3D](http://unity3d.com/). +- [Nutmeg](http://sandbox.photonstorm.com/html5/nutmeg/) + - : Jeu de plateforme action rétro. +- [Back to Candyland](http://www.zibbo.com/game/match-3-games-top/back-to-candyland-episode-1) + - : Un jeu de type Match 3 (Candy Crush). +- [Biolab Disaster](http://playbiolab.com/) + - : Un jeu de plateforme et de tir à défilement horizontal. +- [X-Type](http://phoboslab.org/xtype/) + - : Une démo de "space shooter" _(tireur de l'espace)_ à défilement vertical. +- [Xibalba](http://phoboslab.org/xibalba/) + - : Un jeu rétro de tir à la première personne (Doom-style). +- [Gorescript](https://timeinvariant.github.io/gorescript/play/) + - : Un autre jeu rétro de tir à la première personne. +- [The Wizard](http://hypnoticowl.com/games/the-wizard/) + - : Un jeu de réflexion au tour par tour. +- [Hextris](http://hextris.io/) + - : Un jeu de réflexion hexagonal ressemblant à Tetris. +- [2048](https://gabrielecirulli.github.io/2048/) + - : Un jeu de réflexion où il faut faire glisser des tuiles. +- [BananaBread](/fr/demos/detail/bananabread "/fr/demos/detail/bananabread") + - : Un jeu de tir à la première personne en 3D développé en utilisant Emscripten, WebGL et WebRTC. +- [Monster Madness](https://hacks.mozilla.org/2013/12/monster-madness-creating-games-on-the-web-with-emscripten/) + - : Un jeu de tir multijoueur en ligne développé par "Nom Nom Games" et "Trendy entertainment" en utilisant WebGL et asm.js. +- [Auralux](http://www.auraluxgame.com/game/) + - : Un jeu de stratégie basé sur WebGL et asm.js : capture tous les soleils pour gagner ! +- [BrowserQuest](http://browserquest.mozilla.org/) + - : Un MMORPG crée par the Little Workshop et Mozilla. +- [Shoot The Rocks](https://arcade.ly/games/asteroids/) + - : Un jeu de tir solo 2D Canvas, dans le style des classiques Asteroids d' Atari, jeux d' arcade depuis 1979. +- [Star Citadel](https://arcade.ly/games/starcastle/) + - : Une nouvelle version de Star Castle, le classique jeu d'arcade 1980 de Cinematronics, construit avec Canvas 2D. -

Jeux payants

+## Jeux payants -
-
Oort Online
-
Un MMO d'exploration, de construction et de bataille (actuellement en développement).
-
A Wizard's Lizard
-
Un RPG d'exploration ressemblant à Zelda.
-
QbQbQb
-
Un jeu de réflexion arcade sur le thème de la science fiction.
-
Elliot Quest
-
Jeu d'aventure rétro aux graphiques 8-bit.
-
RPG MO
-
MMORPG isométrique ayant des similitudes avec RuneScape Classic et Ultima.
-
+- [Oort Online](http://oortonline.com/) + - : Un MMO d'exploration, de construction et de bataille (actuellement en développement). +- [A Wizard's Lizard](http://www.wizardslizard.com/) + - : Un RPG d'exploration ressemblant à Zelda. +- [QbQbQb](http://qbqbqb.rezoner.net/) + - : Un jeu de réflexion arcade sur le thème de la science fiction. +- [Elliot Quest](http://elliotquest.com/) + - : Jeu d'aventure rétro aux graphiques 8-bit. +- [RPG MO](https://data.mo.ee/index2.html) + - : MMORPG isométrique ayant des similitudes avec RuneScape Classic et Ultima. -

Démos diverses

- -
-
WaveGL
-
Visualiseur WebGL pour la source de sons.
-
Canvas Airport Simulation
-
Carte animée montrant les avions décollants et atterrissants à l'aéroport avec les itinéraires de vols.
-
Animation Physics
-
Rendu 3D d'un terrain et de voitures utilisant ammo.js pour les calculs physiques.
-
Volumetric Particle Flow
-
Simulation physique de liquides s'écoulant.
-
Explosion and chain reaction
-
Particules explosant et déclenchant d'autres explosions.
-
Canvas generated planet
-
Une ceinture d'astéroides orbitant autour d'une planète.
-
Digital Fireworks
-
Effets d'explosions de feu d'artifice.
-
Autumn
-
Feuilles automnales qui tombent, illuminées par une source lumineuse. Créé avec Three.js.
-
Fire walk with me
-
Effet de nuage de feu flottant.
-
Rainbow Firestorm
-
Des particules de couleur arc-en-ciel, tombant comme de la pluie, rebondissent sur un terrain d'orbes.
-
Crowd Simulation
-
Simulation d'une foule de personnes agitées  voulant rejoindre des directions opposées.
-
SVG Masking Experiment
-
Une machine à rayons X, créée en utilisant un calque SVG.
-
Realistic Water Simulation
-
De l'eau en mouvement, comme les vagues d'un océan.
-
Dungeon demo
-
Scène de donjon basée sur Haxor avec un personnage jouable.
-
Massive Assault tech demo
-
Archipel avec des véhicules militaires futuristes.
-
Flight Stream
-
Globe en 3D avec des itinéraires d'avions simulés.
-
WebGL filters
-
Démo montrant comment WebGL peut être utilisé pour ajouter des effets à des éléments HTML.
-
SVG isometic tiles
-
Génère des tuiles isométriques avec une matrice SVG.
-
ThreeJS App Player
-
Un lecteur dans lequel il est possible de charger et lancer des exemples de Three.js.
-
+## Démos diverses +- [WaveGL](http://greweb.me/wavegl/) + - : Visualiseur WebGL pour la source de sons. +- [Canvas Airport Simulation](http://codepen.io/jackrugile/pen/CdKGx/) + - : Carte animée montrant les avions décollants et atterrissants à l'aéroport avec les itinéraires de vols. +- [Animation Physics](http://alteredqualia.com/xg/examples/animation_physics_terrain.html) + - : Rendu 3D d'un terrain et de voitures utilisant [ammo.js](https://github.com/kripken/ammo.js) pour les calculs physiques. +- [Volumetric Particle Flow](http://david.li/flow/) + - : Simulation physique de liquides s'écoulant. +- [Explosion and chain reaction](http://codepen.io/artzub/pen/gszpJ/) + - : Particules explosant et déclenchant d'autres explosions. +- [Canvas generated planet](http://codepen.io/AshKyd/pen/sylFw) + - : Une ceinture d'astéroides orbitant autour d'une planète. +- [Digital Fireworks](http://codepen.io/zadvorsky/pen/FAmuL) + - : Effets d'explosions de feu d'artifice. +- [Autumn](http://oos.moxiecode.com/js_webgl/autumn/) + - : Feuilles automnales qui tombent, illuminées par une source lumineuse. Créé avec [Three.js](https://github.com/mrdoob/three.js). +- [Fire walk with me](http://inear.se/fireshader/) + - : Effet de nuage de feu flottant. +- [Rainbow Firestorm](http://codepen.io/jackrugile/pen/AokpF) + - : Des particules de couleur arc-en-ciel, tombant comme de la pluie, rebondissent sur un terrain d'orbes. +- [Crowd Simulation](http://visualiser.fr/babylon/crowd/) + - : Simulation d'une foule de personnes agitées  voulant rejoindre des directions opposées. +- [SVG Masking Experiment](http://codepen.io/noeldelgado/pen/ByxQjL) + - : Une machine à rayons X, créée en utilisant un calque SVG. +- [Realistic Water Simulation](https://www.shadertoy.com/view/Ms2SD1) + - : De l'eau en mouvement, comme les vagues d'un océan. +- [Dungeon demo](http://www.haxor.xyz/demos/1.0/dungeon/) + - : Scène de donjon basée sur Haxor avec un personnage jouable. +- [Massive Assault tech demo](http://massiveassaultnetwork.com/html5/) + - : Archipel avec des véhicules militaires futuristes. +- [Flight Stream](https://callumprentice.github.io/apps/flight_stream/index.html) + - : Globe en 3D avec des itinéraires d'avions simulés. +- [WebGL filters](http://pixelscommander.com/polygon/htmlgl/demo/filters.html) + - : Démo montrant comment WebGL peut être utilisé pour ajouter des effets à des éléments HTML. +- [SVG isometic tiles](http://codepen.io/AshKyd/pen/zxmgzV) + - : Génère des tuiles isométriques avec une matrice SVG. +- [ThreeJS App Player](https://jsfiddle.net/jetienne/rkth90c9/) + - : Un lecteur dans lequel il est possible de charger et lancer des exemples de Three.js. diff --git a/files/fr/games/index.md b/files/fr/games/index.md index 713c74a6b7..3677ee611b 100644 --- a/files/fr/games/index.md +++ b/files/fr/games/index.md @@ -8,62 +8,55 @@ tags: translation_of: Games original_slug: Jeux --- -
{{GamesSidebar}}
+{{GamesSidebar}} -

Les jeux vidéo sont parmi les activités numériques les plus populaires. L'arrivée continue de nouvelles technologies permet de développer encore des jeux de meilleure qualité et plus performants qui peuvent fonctionner dans n'importe quel navigateur respectant les standards du web.

+Les jeux vidéo sont parmi les activités numériques les plus populaires. L'arrivée continue de nouvelles technologies permet de développer encore des jeux de meilleure qualité et plus performants qui peuvent fonctionner dans n'importe quel navigateur respectant les standards du web. -

{{EmbedGHLiveSample("web-tech-games/index.html", '100%', 820)}}

+{{EmbedGHLiveSample("web-tech-games/index.html", '100%', 820)}} -

Développement de jeux pour le web

+## Développement de jeux pour le web -

Bienvenue dans le centre de développement de jeux MDN ! Dans cette zone du site, nous fournissons des ressources pour les développeurs web désireux de développer des jeux. Vous trouverez de nombreux tutoriels et articles techniques dans le menu principal à gauche, alors n'hésitez pas à explorer.

+Bienvenue dans le centre de développement de jeux MDN ! Dans cette zone du site, nous fournissons des ressources pour les développeurs web désireux de développer des jeux. Vous trouverez de nombreux tutoriels et articles techniques dans le menu principal à gauche, alors n'hésitez pas à explorer. -

Nous avons également inclus une section de références afin que vous puissiez facilement trouver des informations sur toutes les API les plus courantes utilisées dans le développement de jeux.

+Nous avons également inclus une section de références afin que vous puissiez facilement trouver des informations sur toutes les API les plus courantes utilisées dans le développement de jeux. -
-

Note : La création de jeux sur le Web s'appuie sur un certain nombre de technologies Web de base telles que HTML, CSS et JavaScript. La Zone "Apprendre" est un bon endroit pour commencer avec les bases.

-
+> **Note :** La création de jeux sur le Web s'appuie sur un certain nombre de technologies Web de base telles que HTML, CSS et JavaScript. La [Zone "Apprendre"](/fr/Apprendre) est un bon endroit pour commencer avec les bases. +## Portez des jeux natifs sur le Web -

Portez des jeux natifs sur le Web

+Si vous êtes un développeur natif (par exemple écrivant des jeux en C ++), et que vous êtes intéressé par la façon dont vous pouvez porter vos jeux sur le Web, vous devriez en apprendre plus sur notre outil [Emscripten](http://kripken.github.io/emscripten-site/index.html) - c'est un compilateur LLVM vers JavaScript, qui prend le "bytecode LLVM" (par exemple, généré à partir de C / C ++ en utilisant Clang ou un autre langage) et le compile dans [asm.js](/fr/docs/Games/Tools/asm.js) , qui peut être exécuté sur le Web. -

Si vous êtes un développeur natif (par exemple écrivant des jeux en C ++), et que vous êtes intéressé par la façon dont vous pouvez porter vos jeux sur le Web, vous devriez en apprendre plus sur notre outil Emscripten - c'est un compilateur LLVM vers JavaScript, qui prend le "bytecode LLVM" (par exemple, généré à partir de C / C ++ en utilisant Clang ou un autre langage) et le compile dans asm.js , qui peut être exécuté sur le Web.

+Pour commencer, voir : -

Pour commencer, voir :

+- [About Emscripten](http://kripken.github.io/emscripten-site/docs/introducing_emscripten/about_emscripten.html) pour une introduction incluant des détails de haut niveau. +- [D/gameswnload and Install](http://kripken.github.io/emscripten-site/docs/getting_started/downloads.html) pour installer la chaîne d'outils . +- [Emscripten Tutorial](http://kripken.github.io/emscripten-site/docs/getting_started/Tutorial.html) pour un tutoriel qui vous enseigne comment commencer. - +## Exemples -

Exemples

+Pour une liste d'exemples de jeux, voir notre [page exemples](/fr/docs/Games/Examples). Consultez aussi pour des ressources et des exemples plus utiles ! -

Pour une liste d'exemples de jeux, voir notre page exemples. Consultez aussi https://games.mozilla.org/ pour des ressources et des exemples plus utiles !

+## Voir aussi -

Voir aussi

- -
-
Build New Games (en)
-
Un site collaboratif avec de nombreux tutoriels concernant le développement de jeux vidéo sur le Web. N'a pas été très actif récemment, mais détient toujours de belles ressources.
-
Creative JS (en)
-
Un ensemble de techniques et d'expérimentations JavaScript, pas nécessairement liées au domaine vidéo-ludique mais qui se révèlent plutôt utiles et impressionnantes. N'a pas été très actif récemment, mais détient toujours de belles ressources.
-
Game programming patterns (en)
-
Un livre en ligne, écrit par Bob Nystrom, qui traite des modèles de programmation dans le contexte du développement de jeux, dans le but d'aider les développeurs de jeux à produire un code plus réussi et plus opérationnel.
-
Gamedev.js Weekly (en)
-
Bulletin hebdomadaire sur le développement de jeux HTML5, envoyé tous les vendredis. Contient les derniers articles, didacticiels, outils et ressources.
-
HTML5 Game Devs Forum (en)
-
Forums pour développeurs, créateurs de "framework" et éditeurs. Posez des questions, obtenez des commentaires, aidez les autres.
-
HTML5 Game Engine (en)
-
Liste des architectures de jeux HTML5 les plus populaires ainsi que leurs classement, fonctionnalités et exemples.
-
JSBreakouts (en)
-
Comparez les clones JavaScript Breakout dans différents systèmes pour vous aider à choisir le bon pour vous.
-
Tuts+ Game Development (en)
-
Tutoriels et articles sur le developpement de jeux en général.
-
HTML5 Gamedev Starter (en)
-
De quoi démarrer pour les nouveaux développeurs de jeux, une liste organisée de liens vers diverses ressources utiles sur le web.
-
js13kGames (en)
-
Concours de codage JavaScript pour les développeurs de jeux HTML5 avec une limite de taille de fichier fixée à 13 kilo-octets. Tous les jeux soumis sont disponibles sous forme lisible sur GitHub.
-
Mozilla Hacks blog (en)
-
Catégorie Jeux sur le blog "Hacks" de Mozilla contenant des articles connexes intéressants.
-
\ No newline at end of file +- [Build New Games ](http://buildnewgames.com/)(en) + - : Un site collaboratif avec de nombreux tutoriels concernant le développement de jeux vidéo sur le Web. N'a pas été très actif récemment, mais détient toujours de belles ressources. +- [Creative JS ](http://creativejs.com/)(en) + - : Un ensemble de techniques et d'expérimentations JavaScript, pas nécessairement liées au domaine vidéo-ludique mais qui se révèlent plutôt utiles et impressionnantes. N'a pas été très actif récemment, mais détient toujours de belles ressources. +- [Game programming patterns ](http://gameprogrammingpatterns.com/)(en) + - : Un livre en ligne, écrit par Bob Nystrom, qui traite des modèles de programmation dans le contexte du développement de jeux, dans le but d'aider les développeurs de jeux à produire un code plus réussi et plus opérationnel. +- [Gamedev.js Weekly ](http://gamedevjsweekly/games.com/)(en) + - : Bulletin hebdomadaire sur le développement de jeux HTML5, envoyé tous les vendredis. Contient les derniers articles, didacticiels, outils et ressources. +- [HTML5 Game Devs Forum ](http://www.html5gamedevs.com/)(en) + - : Forums pour développeurs, créateurs de "framework" et éditeurs. Posez des questions, obtenez des commentaires, aidez les autres. +- [HTML5 Game Engine ](http://html5gameengine.com/)(en) + - : Liste des architectures de jeux HTML5 les plus populaires ainsi que leurs classement, fonctionnalités et exemples. +- [JSBreakouts](http://www.jsbreakouts.org/) (en) + - : Comparez les clones JavaScript Breakout dans différents systèmes pour vous aider à choisir le bon pour vous. +- [Tuts+ Game Development ](http://gamedevelopment.tutsplus.com/)(en) + - : Tutoriels et articles sur le developpement de jeux en général. +- [HTML5 Gamedev Starter ](http://html5devstarter.enclavegames.com/)(en) + - : De quoi démarrer pour les nouveaux développeurs de jeux, une liste organisée de liens vers diverses ressources utiles sur le web. +- [js13kGames ](http://js13kgames.com/)(en) + - : Concours de codage JavaScript pour les développeurs de jeux HTML5 avec une limite de taille de fichier fixée à 13 kilo-octets. Tous les jeux soumis sont disponibles sous forme lisible sur GitHub. +- [Mozilla Hacks blog ](https://hacks.mozilla.org/category/games/)(en) + - : Catégorie Jeux sur le blog "Hacks" de Mozilla contenant des articles connexes intéressants. diff --git a/files/fr/games/index/index.md b/files/fr/games/index/index.md index d42a4663e8..e71dad980f 100644 --- a/files/fr/games/index/index.md +++ b/files/fr/games/index/index.md @@ -6,6 +6,6 @@ tags: translation_of: Games/Index original_slug: Jeux/Index --- -
{{GamesSidebar}}
{{IncludeSubnav("/fr/docs/Jeux")}}
+{{GamesSidebar}}{{IncludeSubnav("/fr/docs/Jeux")}} -

{{Index("/fr/docs/Jeux")}}

+{{Index("/fr/docs/Jeux")}} diff --git a/files/fr/games/introduction/index.md b/files/fr/games/introduction/index.md index 9f98c00cd2..ab1da728d2 100644 --- a/files/fr/games/introduction/index.md +++ b/files/fr/games/introduction/index.md @@ -9,120 +9,77 @@ tags: translation_of: Games/Introduction original_slug: Jeux/Introduction --- -
{{GamesSidebar}}
- -

  {{IncludeSubnav("/fr/docs/Jeux")}}  

- -
Le Web d'aujourd'hui est désormais une plate-forme viable pour créer des jeux époustouflants et de bonne qualité, mais aussi et surtout pour distribuer ces jeux.
- -
 
- -
Imaginez tous les jeux qui peuvent être créés...
- -

Grâce aux technologies web actuelles et aux navigateurs récents, il est tout à fait possible de créer un jeu excellent pour le Web. Et nous ne parlons pas ici de jeux de cartes ou de jeux sociaux multi-joueurs déjà créés il y a longtemps, avec Flash®, mais bien de jeux de tirs en 3D, de RPG etc. Grâce aux améliorations des performances des compilateurs juste-à-temps JavaScript et aux nouvelles APIs, vous pouvez construire des jeux vidéo qui fonctionnent dans un navigateur (ou sur des plateformes HTML5 comme Firefox OS) sans compromettre les performances.

- -

La plateforme HTML5 pour les jeux

- -

Le Web peut vraiment se concevoir comme une plateforme pour les jeux : "le Web est la plateforme". La liste qui suit présente les technologies au cœur de celle-ci.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FonctionnalitésTechnologie
AudioWeb Audio API
GraphismeWebGL (OpenGL ES 2.0)
Mécanismes d'interface utilisateurÉvénements tactiles, Gamepad API, capteurs, WebRTC, Full Screen API, Pointer Lock API
LangageJavaScript (ou C/C++ utilisé avec Emscripten pour être compilé en JavaScript)
RéseauWebRTC et/ou les WebSockets
StockageIndexedDB ou le "cloud"
WebHTML, CSS, SVG, Social API (et plus encore...)
- -

 

- -

L'aspect commercial

- -
En tant que développeur de jeux vidéo, que vous soyez seul ou fassiez partie d'un studio plus grand, vous voulez savoir pourquoi le Web serait pertinent pour votre prochain jeu. Nous verrons ici en quoi le Web peut vous aider :
- -

 

- -
    -
  1. -
    La portée du Web est phénoménale : il est partout. Les jeux construits avec HTML5 peuvent fonctionner sur les smartphones, les tablettes, les PCs et les télévisions connectées.
    -
  2. -
  3. La visibilité de votre jeu et le marketing en sont améliorés. En effet, la promotion de votre jeu n'est pas limitée à un "app store" (magasin d'applications) maîtrisé par quelqu'un d'autre. Vous pouvez tout à fait promouvoir et faire la publicité de votre jeu sur le Web lui-même comme sur d'autres médias. Les liens, les partages effectués sur le Web sont autant d'avantages pour atteindre de nouveaux utilisateurs.
  4. -
  5. Vous disposez d'un contrôle à un endroit important : les paiements. Il n'est pas nécessaire pour vous de reverser 30% de vos revenus à  d'autres simplement parce que votre jeu fait partie de leur écosystème. Vous pouvez décider de votre propre politique tarifaire et utiliser le service de paiement que vous voulez.
  6. -
  7. Le contrôle, encore. Vous pouvez mettre à jour votre jeu dès que vous le souhaitez. Vous n'avez pas à attendre l'approbation de quelqu'un d'une autre entreprise décidant si oui ou non tel ou tel correctif sera livré aujourd'hui ou demain.
  8. -
  9. L'analytique. Plutôt que de vous reposer sur des décisions et influences externes quant aux données dont vous avez besoin, vous pouvez collecter les statistiques que vous voulez, ou bien utiliser un outil analytique tiers de votre choix afin de mesurer les ventes et la portée de votre jeu.
  10. -
  11. Vous pouvez gérer la relation clientèle de façon plus directe, sans que les retours des clients soient limités aux mécanismes d'un magasin d'application. Soyez directement au contact de vos clients, sans intermédiaire.
  12. -
  13. Le Web est partout et vos joueurs peuvent donc jouer où bon leur semble : leurs téléphones, tablettes, ordinateurs de bureau ou portables...
  14. -
- -

 

- -

Les technologies Web pour les développeurs de jeux vidéo

- -

Pour celles et ceux qui souhaitent plonger dans la technique, voici la liste des APIs et des technologies Web qui vont alimenter votre jeu.

- -
-
-
Full Screen API
-
Cette API simple permet à votre jeu de fonctionner en plein écran et d'offrir ainsi une expérience plus immersive.
-
Gamepad API
-
Si vous souhaitez que vos joueurs puissent utiliser des manettes ou d'autres contrôleurs pour votre jeu, vous aurez besoin de cette API.
-
HTML et CSS
-
Combinées ensembles, ces deux technologies vous permettent de construire et de mettre en forme l'interface utilisateur de votre jeu. L'élément HTML {{HTMLElement("canvas")}} permet de gérer des graphismes en deux dimensions.
-
HTML audio
-
L'élément HTML {{HTMLElement("audio")}} vous permet de jouer de la musique et des sons. Si vous souhaitez aller plus loin, l'API Web Audio vous offre plus de possibilités de traitement !
-
IndexedDB
-
Une API puissante, permettant de maintenir les données de l'utilsateur stockées sur son ordinateur ou son appareil. Une bonne façon de sauvegarder l'état d'un jeu ou autre information localement de telle sorte qu'elle ne sera pas téléchargée à chaque fois qu'on aura besoin d'elle. Aussi utile pour rendre le jeu utilisable même quand le joueur n'est pas connecté à internet (comme durant un long vol en avion...).
-
JavaScript
-
JavaScript, est un langage de programmation utilisé sur internet. Il a d'excellentes performances sur les navigateurs modernes et est sans cesse amélioré. Utilisez sa puissance pour coder vos jeux, ou regardez son utilisation dans des technologies comme Emscripten ou Asm.js pour porter facilement vos jeux existants.
-
Pointer Lock API
-
L'API Pointer Lock vous permet de bloquer la souris ou tout autre appareil de pointage à l'intérieur de l'interface de votre jeu, de telle sorte qu'au lieu de recevoir une position absolue du pointeur vous recevrez le delta des coordonnées. Ce qui vous donne une mesure plus précise de ce que fait l'utilisateur, mais aussi l'empêche d'envoyer accidentellement ses entrées ailleurs pour ne pas manquer des actions importantes.
-
SVG (Scalable Vector Graphics)
-
Vous permet de créer des graphiques vectoriels dont l'échelle est fluide, quelle que soit la taille ou la résolution de l'affichage de l'utilisateur.
-
Typed Arrays
-
Les tableaux typés JavaScript vous donnent accès à des données binaires brutes depuis JavaScript ; cela vous permet de manipuler des textures GL, des données de jeu ou tout autre chose, même si ce n'est pas dans un format JavaScript natif.
-
Web Audio API
-
Cette API pour contrôler la lecture, la synthèse et la manipulation de l'audio à partir du code JavaScript vous permet de créer des effets sonores impressionnants, de jouer et de manipuler de la musique en temps réel.
-
WebGL
-
Vous permet de créer à partir de contenu internet des graphismes de hautes performances, avec l'accélération matérielle de graphisme 3D (et 2D). C'est une implémentation qui permet la prise en charge web de OpenGL ES 2.0.
-
WebRTC
-
L'API WebRTC (Real-Time Communications) vous donne le pouvoir de contrôler les données audio et vidéo, y compris la téléconférence, et de transmettre des données d'applications aux utilisateurs et entre utilisateurs. Vous voulez que vos joueurs discutent lorsqu'ils explosent des monstres ? Cette API est faite pour vous.
-
WebSockets
-
L'API WebSocket vous permet de connecter votre application ou site à un serveur pour transmettre des données en temps réel. Parfait pour les jeux d'action multi-joueurs, services de "chat" (discussion) et autres.
-
Web Workers
-
Les "Workers" vous donnent la possibilité de créer des routines qui tournent en arrière-plan avec leur propre code javascript, pour prendre avantage des processeurs multi-core modernes.
-
XMLHttpRequest and File API
-
La combinaison de XMLHttpRequest et de l'API File vous permet d'envoyer et de recevoir toutes les sortes de données que vous voulez (ne vous fiez pas au "XML" dans son nom !) depuis un serveur Web. Il s'agit d'une bonne façon de réaliser diverses choses comme télécharger de nouveaux niveaux du jeu et les éléments de graphismes ou encore transmettre (pas en temps réel) les informations de l'état du jeu vers votre serveur.
-
-
- -

 

+{{GamesSidebar}} + +{{IncludeSubnav("/fr/docs/Jeux")}} + +Le Web d'aujourd'hui est désormais une plate-forme viable pour créer des jeux époustouflants et de bonne qualité, mais aussi et surtout pour distribuer ces jeux. Imaginez tous les jeux qui peuvent être créés... + +Grâce aux technologies web actuelles et aux navigateurs récents, il est tout à fait possible de créer un jeu excellent pour le Web. Et nous ne parlons pas ici de jeux de cartes ou de jeux sociaux multi-joueurs déjà créés il y a longtemps, avec Flash®, mais bien de jeux de tirs en 3D, de RPG etc. Grâce aux améliorations des performances des compilateurs juste-à-temps [JavaScript](/fr/docs/JavaScript "/fr/docs/JavaScript") et aux nouvelles APIs, vous pouvez construire des jeux vidéo qui fonctionnent dans un navigateur (ou sur des plateformes HTML5 comme [Firefox OS](/fr/docs/Mozilla/Firefox_OS "/fr/docs/Mozilla/Firefox_OS")) sans compromettre les performances. + +## La plateforme HTML5 pour les jeux + +Le Web peut vraiment se concevoir comme une plateforme pour les jeux : "le Web est la plateforme". La liste qui suit présente les technologies au cœur de celle-ci. + +| Fonctionnalités | Technologie | +| -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Audio** | [Web Audio API](/fr/docs/Web/API/Web_Audio_API "/fr/docs/Web_Audio_API") | +| **Graphisme** | [WebGL](/fr/docs/WebGL "/fr/docs/WebGL") ([OpenGL ES](http://www.khronos.org/opengles/ "http://www.khronos.org/opengles/") 2.0) | +| **Mécanismes d'interface utilisateur** | [Événements tactiles](/fr/docs/Web/Guide/DOM/Events/Touch_events "/fr/docs/Web/Guide/DOM/Events/Touch_events"), [Gamepad API](/fr/docs/Web/Guide/API/Gamepad "/fr/docs/Web/Guide/API/Gamepad"), capteurs, [WebRTC](/fr/docs/WebRTC "/fr/docs/WebRTC"), [Full Screen API](/fr/docs/Web/Guide/DOM/Using_full_screen_mode "/fr/docs/Web/Guide/DOM/Using_full_screen_mode"), [Pointer Lock API](/fr/docs/WebAPI/Pointer_Lock "/fr/docs/WebAPI/Pointer_Lock") | +| **Langage** | [JavaScript](/fr/docs/JavaScript "/fr/docs/JavaScript") (ou C/C++ utilisé avec [Emscripten](https://github.com/kripken/emscripten/wiki "https://github.com/kripken/emscripten/wiki") pour être compilé en JavaScript) | +| **Réseau** | [WebRTC](/fr/docs/WebRTC "/fr/docs/WebRTC") et/ou les [WebSockets](/fr/docs/WebSockets "/fr/docs/WebSockets") | +| **Stockage** | [IndexedDB](/fr/docs/IndexedDB "/fr/docs/IndexedDB") ou le "cloud" | +| **Web** | [HTML](/fr/docs/Web/HTML "/fr/docs/Web/HTML"), [CSS](/fr/docs/Web/CSS "/fr/docs/Web/CSS"), [SVG](/fr/docs/SVG "/fr/docs/SVG"), [Social API](/fr/docs/Social_API "/fr/docs/Social_API") (et plus encore...) | + + + +## L'aspect commercial + +En tant que développeur de jeux vidéo, que vous soyez seul ou fassiez partie d'un studio plus grand, vous voulez savoir pourquoi le Web serait pertinent pour votre prochain jeu. Nous verrons ici en quoi le Web peut vous aider : + + + +1. La portée du Web est phénoménale : il est partout. Les jeux construits avec HTML5 peuvent fonctionner sur les smartphones, les tablettes, les PCs et les télévisions connectées. +2. La visibilité de votre jeu et le marketing en sont améliorés. En effet, la promotion de votre jeu n'est pas limitée à un "app store" _(magasin d'applications)_ maîtrisé par quelqu'un d'autre. Vous pouvez tout à fait promouvoir et faire la publicité de votre jeu sur le Web lui-même comme sur d'autres médias. Les liens, les partages effectués sur le Web sont autant d'avantages pour atteindre de nouveaux utilisateurs. +3. Vous disposez d'un contrôle à un endroit important : les paiements. Il n'est pas nécessaire pour vous de reverser 30% de vos revenus à  d'autres simplement parce que votre jeu fait partie de leur écosystème. Vous pouvez décider de votre propre politique tarifaire et utiliser le service de paiement que vous voulez. +4. Le contrôle, encore. Vous pouvez mettre à jour votre jeu dès que vous le souhaitez. Vous n'avez pas à attendre l'approbation de quelqu'un d'une autre entreprise décidant si oui ou non tel ou tel correctif sera livré aujourd'hui ou demain. +5. L'analytique. Plutôt que de vous reposer sur des décisions et influences externes quant aux données dont vous avez besoin, vous pouvez collecter les statistiques que vous voulez, ou bien utiliser un outil analytique tiers de votre choix afin de mesurer les ventes et la portée de votre jeu. +6. Vous pouvez gérer la relation clientèle de façon plus directe, sans que les retours des clients soient limités aux mécanismes d'un magasin d'application. Soyez directement au contact de vos clients, sans intermédiaire. +7. Le Web est partout et vos joueurs peuvent donc jouer où bon leur semble : leurs téléphones, tablettes, ordinateurs de bureau ou portables... + + + +## Les technologies Web pour les développeurs de jeux vidéo + +Pour celles et ceux qui souhaitent plonger dans la technique, voici la liste des APIs et des technologies Web qui vont alimenter votre jeu. + +- [Full Screen API](/fr/docs/Web/Guide/DOM/Using_full_screen_mode "/fr/docs/DOM/Using_fullscreen_mode") + - : Cette API simple permet à votre jeu de fonctionner en plein écran et d'offrir ainsi une expérience plus immersive. +- [Gamepad API](/fr/docs/Web/Guide/API/Gamepad "/fr/docs/API/Gamepad/Using_Gamepad_API") + - : Si vous souhaitez que vos joueurs puissent utiliser des manettes ou d'autres contrôleurs pour votre jeu, vous aurez besoin de cette API. +- [HTML](/fr/docs/Web/HTML "/fr/docs/HTML") et [CSS](/fr/docs/Web/CSS "/fr/docs/CSS") + - : Combinées ensembles, ces deux technologies vous permettent de construire et de mettre en forme l'interface utilisateur de votre jeu. L'élément HTML {{HTMLElement("canvas")}} permet de gérer des graphismes en deux dimensions. +- [HTML audio](/fr/docs/Web/HTML/Element/audio "/fr/docs/HTML/Element/audio") + - : L'élément HTML {{HTMLElement("audio")}} vous permet de jouer de la musique et des sons. Si vous souhaitez aller plus loin, l'API [Web Audio](/fr/docs/Web/API/Web_Audio_API "/fr/docs/Web_Audio_API") vous offre plus de possibilités de traitement ! +- [IndexedDB](/fr/docs/Web/API/API_IndexedDB "/fr/docs/IndexedDB") + - : Une API puissante, permettant de maintenir les données de l'utilsateur stockées sur son ordinateur ou son appareil. Une bonne façon de sauvegarder l'état d'un jeu ou autre information localement de telle sorte qu'elle ne sera pas téléchargée à chaque fois qu'on aura besoin d'elle. Aussi utile pour rendre le jeu utilisable même quand le joueur n'est pas connecté à internet (comme durant un long vol en avion...). +- [JavaScript](/fr/docs/Web/JavaScript "/fr/docs/JavaScript") + - : JavaScript, est un langage de programmation utilisé sur internet. Il a d'excellentes performances sur les navigateurs modernes et est sans cesse amélioré. Utilisez sa puissance pour coder vos jeux, ou regardez son utilisation dans des technologies comme [Emscripten](https://github.com/kripken/emscripten/wiki "https://github.com/kripken/emscripten/wiki") ou [Asm.js](http://asmjs.org/spec/latest/ "http://asmjs.org/spec/latest/") pour porter facilement vos jeux existants. +- [Pointer Lock API](/fr/docs/WebAPI/Pointer_Lock "/fr/docs/WebAPI/Pointer_Lock") + - : L'API Pointer Lock vous permet de bloquer la souris ou tout autre appareil de pointage à l'intérieur de l'interface de votre jeu, de telle sorte qu'au lieu de recevoir une position absolue du pointeur vous recevrez le delta des coordonnées. Ce qui vous donne une mesure plus précise de ce que fait l'utilisateur, mais aussi l'empêche d'envoyer accidentellement ses entrées ailleurs pour ne pas manquer des actions importantes. +- [SVG](/fr/docs/Web/SVG "/fr/docs/SVG") (Scalable Vector Graphics) + - : Vous permet de créer des graphiques vectoriels dont l'échelle est fluide, quelle que soit la taille ou la résolution de l'affichage de l'utilisateur. +- [Typed Arrays](/fr/docs/Web/JavaScript/Tableaux_typ%C3%A9s "/fr/docs/JavaScript/Typed_arrays") + - : Les tableaux typés JavaScript vous donnent accès à des données binaires brutes depuis JavaScript ; cela vous permet de manipuler des textures GL, des données de jeu ou tout autre chose, même si ce n'est pas dans un format JavaScript natif. +- [Web Audio API](/fr/docs/Web/API/Web_Audio_API "/fr/docs/Web_Audio_API") + - : Cette API pour contrôler la lecture, la synthèse et la manipulation de l'audio à partir du code JavaScript vous permet de créer des effets sonores impressionnants, de jouer et de manipuler de la musique en temps réel. +- [WebGL](/fr/docs/Web/API/WebGL_API "/fr/docs/WebGL") + - : Vous permet de créer à partir de contenu internet des graphismes de hautes performances, avec l'accélération matérielle de graphisme 3D (et 2D). C'est une implémentation qui permet la prise en charge web de [OpenGL ES](http://www.khronos.org/opengles/ "http://www.khronos.org/opengles/") 2.0. +- [WebRTC](/fr/docs/Web/API/WebRTC_API "/fr/docs/WebRTC") + - : L'API WebRTC (Real-Time Communications) vous donne le pouvoir de contrôler les données audio et vidéo, y compris la téléconférence, et de transmettre des données d'applications aux utilisateurs et entre utilisateurs. Vous voulez que vos joueurs discutent lorsqu'ils explosent des monstres ? Cette API est faite pour vous. +- [WebSockets](/fr/docs/WebSockets "/fr/docs/WebSockets") + - : L'API WebSocket vous permet de connecter votre application ou site à un serveur pour transmettre des données en temps réel. Parfait pour les jeux d'action multi-joueurs, services de "chat" _(discussion)_ et autres. +- [Web Workers](/fr/docs/Utilisation_des_web_workers "/fr/docs/DOM/Using_web_workers") + - : Les "Workers" vous donnent la possibilité de créer des routines qui tournent en arrière-plan avec leur propre code javascript, pour prendre avantage des processeurs multi-core modernes. +- [XMLHttpRequest](/fr/docs/Web/API/XMLHttpRequest "/fr/docs/DOM/XMLHttpRequest") and [File API](/fr/docs/Web/API/API_fichier_systeme "/fr/docs/DOM/File_API") + - : La combinaison de XMLHttpRequest et de l'API File vous permet d'envoyer et de recevoir toutes les sortes de données que vous voulez (ne vous fiez pas au "XML" dans son nom !) depuis un serveur Web. Il s'agit d'une bonne façon de réaliser diverses choses comme télécharger de nouveaux niveaux du jeu et les éléments de graphismes ou encore transmettre (pas en temps réel) les informations de l'état du jeu vers votre serveur. diff --git a/files/fr/games/introduction_to_html5_game_development/index.md b/files/fr/games/introduction_to_html5_game_development/index.md index ef15c35b78..4c42097aa4 100644 --- a/files/fr/games/introduction_to_html5_game_development/index.md +++ b/files/fr/games/introduction_to_html5_game_development/index.md @@ -9,93 +9,58 @@ tags: translation_of: Games/Introduction_to_HTML5_Game_Development_(summary) original_slug: Jeux/Introduction_to_HTML5_Game_Gevelopment_(summary) --- -
{{GamesSidebar}}
+{{GamesSidebar}}{{IncludeSubnav("/fr/docs/Games")}} -
{{IncludeSubnav("/fr/docs/Games")}}
+## Avantages -

Avantages

+1. Les jeux construits avec HTML5 fonctionnent sur les smartphones, les tablettes, les PC et les téléviseurs intelligents. +2. Annoncez et promouvez votre jeu sur le Web, ainsi que sur d'autres médias. +3. Paiements. Chargez ce que vous voulez et utilisez le service de traitement des paiements de votre choix. +4. Mettez à jour votre jeu quand vous le souhaitez. +5. Collectez vos propres analyses ! +6. Connectez-vous plus étroitement avec vos clients, +7. Les joueurs peuvent jouer au jeu n'importe où, n'importe quand. -
    -
  1. Les jeux construits avec HTML5 fonctionnent sur les smartphones, les tablettes, les PC et les téléviseurs intelligents.
  2. -
  3. Annoncez et promouvez votre jeu sur le Web, ainsi que sur d'autres médias.
  4. -
  5. Paiements. Chargez ce que vous voulez et utilisez le service de traitement des paiements de votre choix.
  6. -
  7. Mettez à jour votre jeu quand vous le souhaitez.
  8. -
  9. Collectez vos propres analyses !
  10. -
  11. Connectez-vous plus étroitement avec vos clients,
  12. -
  13. Les joueurs peuvent jouer au jeu n'importe où, n'importe quand.
  14. -
+## Technologies Web -

Technologies Web

+| **Fonction** | Technologie | +| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Audio** | [Web Audio API](/fr/docs/Web/API/Web_Audio_API) | +| **Graphique** | [WebGL](/fr/docs/Web/API/WebGL_API) ([OpenGL ES](http://www.khronos.org/opengles/ "http://www.khronos.org/opengles/") 2.0) | +| **Input** | [Événements tactiles](/fr/docs/Web/Guide/DOM/Events/Touch_events), [Utiliser l'API Gamepad](/fr/docs/Web/Guide/API/Gamepad), capteurs de l'appareil , [L'API WebRTC](/fr/docs/Web/API/WebRTC_API), [Utiliser le mode plein écran](/fr/docs/Web/Guide/DOM/Using_full_screen_mode), [Pointer Lock API](/fr/docs/WebAPI/Pointer_Lock) | +| **Language** | [JavaScript](/fr/docs/JavaScript "/fr/docs/JavaScript") (ou C/C++  utilisant [Emscripten](https://github.com/kripken/emscripten/wiki "https://github.com/kripken/emscripten/wiki") pour compiler en JavaScript ) | +| **Networking** | [WebRTC](/fr/docs/WebRTC "/fr/docs/WebRTC") et/ou [WebSockets](/fr/docs/Web/API/WebSockets_API) | +| **Stockage** | [IndexedDB](/fr/docs/Web/API/API_IndexedDB)  ou le "cloud" | +| **Web** | [HTML](/fr/docs/Web/HTML), [CSS](/fr/docs/Web/CSS), [SVG](/fr/docs/Web/SVG), [Social API](/fr/docs/Social_API "/fr/docs/Social_API") ( et beaucoup plus! ) | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FonctionTechnologie
AudioWeb Audio API
GraphiqueWebGL (OpenGL ES 2.0)
InputÉvénements tactiles, Utiliser l'API Gamepad, capteurs de l'appareil , L'API WebRTC, Utiliser le mode plein écran, Pointer Lock API
LanguageJavaScript (ou C/C++  utilisant Emscripten pour compiler en JavaScript )
NetworkingWebRTC et/ou WebSockets
StockageIndexedDB  ou le "cloud"
WebHTML, CSS, SVG, Social API ( et beaucoup plus! )
- -
-
API plein écran
-
Gameplay en plein écran.
-
API Gamepad
-
Utilisez des manettes ou d'autres contrôleurs de jeu.
-
HTML et CSS
-
Créez, stylisez et aménagez l'interface utilisateur de votre jeu.
-
Audio HTML
-
Jouez facilement des effets sonores et de la musique simplement.
-
IndexedDB
-
Stockez les données utilisateur sur leur propre ordinateur ou appareil.
-
JavaScript
-
Langage de programmation Web rapide pour écrire le code de votre jeu.
- Pour porter facilement vos jeux existants Emscripten ou Asm.js
-
API de verrouillage de pointeur
-
Verrouillez la souris ou tout autre périphérique de pointage dans l'interface de votre jeu.
-
SVG (Scalable Vector Graphics)
-
Créez des graphiques vectoriels qui évoluent en douceur, quelle que soit la taille ou la résolution de l'écran de l'utilisateur.
-
Tableaux typés
-
Accédez aux données binaires brutes depuis JavaScript; Manipulez les textures GL, les données de jeu ou tout autre chose.
-
API Web Audio
-
Contrôlez la lecture, la synthèse et la manipulation de l'audio en temps réel.
-
WebGL
-
Créez des graphiques 3D (et 2D) haute performance à accélération matérielle. OpenGL ES 2.0.
-
WebRTC
-
Communications en temps réel pour contrôler les données audio et vidéo, y compris la téléconférence et la transmission d'autres données d'application entre deux utilisateurs comme le chat.
-
WebSockets
-
Connectez votre application ou votre site à un serveur pour transmettre des données en temps réel. Parfait pour l'action de jeu multijoueur, les services de chat, etc.
-
Web Workers
-
Créez des threads d'arrière-plan exécutant leur propre code JavaScript pour les processeurs multicœurs.
-
XMLHttpRequest et File API
-
Envoyez et recevez tout type de données que vous souhaitez à partir d'un serveur Web, comme le téléchargement de nouveaux niveaux de jeu et d'illustrations pour transmettre des informations sur l'état du jeu non en temps réel dans les deux sens.
-
\ No newline at end of file +- [API plein écran](/fr/docs/DOM/Using_fullscreen_mode "/fr/docs/DOM/Using_fullscreen_mode") + - : Gameplay en plein écran. +- [API Gamepad](/fr/docs/API/Gamepad/Using_Gamepad_API "/fr/docs/API/Gamepad/Using_Gamepad_API") + - : Utilisez des manettes ou d'autres contrôleurs de jeu. +- [HTML](/fr/docs/HTML "/fr/docs/HTML") et [CSS](/fr/docs/CSS "/fr/docs/CSS") + - : Créez, stylisez et aménagez l'interface utilisateur de votre jeu. +- [Audio HTML](/fr/docs/HTML/Element/audio "/fr/docs/HTML/Element/audio") + - : Jouez facilement des effets sonores et de la musique simplement. +- [IndexedDB](/fr/docs/IndexedDB "/fr/docs/IndexedDB") + - : Stockez les données utilisateur sur leur propre ordinateur ou appareil. +- [JavaScript](/fr/docs/JavaScript "/fr/docs/JavaScript") + - : Langage de programmation Web rapide pour écrire le code de votre jeu. + Pour porter facilement vos jeux existants [Emscripten](https://github.com/kripken/emscripten/wiki "https://github.com/kripken/emscripten/wiki") ou [Asm.js](http://asmjs.org/spec/latest/ "http://asmjs.org/spec/latest/") +- [API de verrouillage de pointeur](/fr/docs/WebAPI/Pointer_Lock "/fr/docs/WebAPI/Pointer_Lock") + - : Verrouillez la souris ou tout autre périphérique de pointage dans l'interface de votre jeu. +- [SVG](/fr/docs/SVG "/fr/docs/SVG") (Scalable Vector Graphics) + - : Créez des graphiques vectoriels qui évoluent en douceur, quelle que soit la taille ou la résolution de l'écran de l'utilisateur. +- [Tableaux typés](/fr/docs/JavaScript/Typed_arrays "/fr/docs/JavaScript/Typed_arrays") + - : Accédez aux données binaires brutes depuis JavaScript; Manipulez les textures GL, les données de jeu ou tout autre chose. +- [API Web Audio](/fr/docs/Web_Audio_API "/fr/docs/Web_Audio_API") + - : Contrôlez la lecture, la synthèse et la manipulation de l'audio en temps réel. +- [WebGL](/fr/docs/WebGL "/fr/docs/WebGL") + - : Créez des graphiques 3D (et 2D) haute performance à accélération matérielle. [OpenGL ES](http://www.khronos.org/opengles/ "http://www.khronos.org/opengles/") 2.0. +- [WebRTC](/fr/docs/WebRTC "/fr/docs/WebRTC") + - : Communications en temps réel pour contrôler les données audio et vidéo, y compris la téléconférence et la transmission d'autres données d'application entre deux utilisateurs comme le chat. +- [WebSockets](/fr/docs/WebSockets "/fr/docs/WebSockets") + - : Connectez votre application ou votre site à un serveur pour transmettre des données en temps réel. Parfait pour l'action de jeu multijoueur, les services de chat, etc. +- [Web Workers](/fr/docs/DOM/Using_web_workers "/fr/docs/DOM/Using_web_workers") + - : Créez des threads d'arrière-plan exécutant leur propre code JavaScript pour les processeurs multicœurs. +- [XMLHttpRequest](/fr/docs/DOM/XMLHttpRequest "/fr/docs/DOM/XMLHttpRequest") et [File API](/fr/docs/DOM/File_API "/fr/docs/DOM/File_API") + - : Envoyez et recevez tout type de données que vous souhaitez à partir d'un serveur Web, comme le téléchargement de nouveaux niveaux de jeu et d'illustrations pour transmettre des informations sur l'état du jeu non en temps réel dans les deux sens. diff --git a/files/fr/games/publishing_games/game_distribution/index.md b/files/fr/games/publishing_games/game_distribution/index.md index 303600a677..07ec6d25db 100644 --- a/files/fr/games/publishing_games/game_distribution/index.md +++ b/files/fr/games/publishing_games/game_distribution/index.md @@ -14,124 +14,112 @@ tags: - Web Stores - distribution --- -
{{GamesSidebar}}
+{{GamesSidebar}} -

Vous avez suivi un tutoriel ou deux et créé un jeu en HTML5 : c'est génial ! Cet article couvre tout ce que vous avez besoin de savoir sur la façon de distribuer votre nouveau jeu dans la nature : que vous l'hébergiez en ligne vous-même, que vous le proposiez sur des plateformes ouvertes, ou encore que vous le mettiez à disposition sur des plateformes privées comme Google Play ou l'App Store iOS d'Apple.

+Vous avez suivi un [tutoriel](/fr/docs/Games/Tutorials/2D_Breakout_game_pure_JavaScript) ou [deux](/fr/docs/Games/Tutorials/2D_breakout_game_Phaser) et créé un jeu en HTML5 : c'est génial ! Cet article couvre tout ce que vous avez besoin de savoir sur la façon de distribuer votre nouveau jeu dans la nature : que vous l'hébergiez en ligne vous-même, que vous le proposiez sur des plateformes ouvertes, ou encore que vous le mettiez à disposition sur des plateformes privées comme Google Play ou l'App Store iOS d'Apple. -

Avantages du HTML5 par rapport à du natif

+## Avantages du HTML5 par rapport à du natif -

Choisir du HTML5 pour développer des jeux vous offre un certain nombre d'avantages :

+Choisir du HTML5 pour développer des jeux vous offre un certain nombre d'avantages : -

Les joies du multi-plateformes

+### Les joies du multi-plateformes -

La technologie HTML5 en elle-même est multi-plateformes, donc vous pouvez écrire votre code une seule fois et viser plusieurs types d'appareils. Qu'il s'agisse de smartphone ou de tablettes bas de gamme, de PC portables ou de bureau, de smart TV, de montres, ou même d'un frigo si celui-ci supporte des navigateurs suffisamment récents!

+La technologie HTML5 en elle-même est multi-plateformes, donc vous pouvez écrire votre code une seule fois et viser plusieurs types d'appareils. Qu'il s'agisse de smartphone ou de tablettes bas de gamme, de PC portables ou de bureau, de smart TV, de montres, ou même d'un frigo si celui-ci supporte des navigateurs suffisamment récents! -

Vous n'avez pas besoin d'équipes dédiées pour travailler sur un même titre et visant différentes plateformes, et vous n'avez qu'un seul code source à gérer. Vous pouvez dédier plus de temps et d'argent à la promotion et à la monétisation de votre jeu.

+Vous n'avez pas besoin d'équipes dédiées pour travailler sur un même titre et visant différentes plateformes, et vous n'avez qu'un seul code source à gérer. Vous pouvez dédier plus de temps et d'argent à la [promotion](/fr/docs/Games/Publishing_games/Game_promotion) et à la [monétisation](/fr/docs/Games/Publishing_games/Game_monetization) de votre jeu. -

Des mises à jour immédiates

+### Des mises à jour immédiates -

Pas besoin d'attendre plusieurs jours pour mettre à jour le code source de votre jeu! Si un joueur trouve un bug, vous pouvez rapidement le corriger, mettre à jour le système et actualiser le jeu sur votre serveur pour offrir à vos joueurs une version mise à jour quasi instantanément.

+Pas besoin d'attendre plusieurs jours pour mettre à jour le code source de votre jeu! Si un joueur trouve un bug, vous pouvez rapidement le corriger, mettre à jour le système et actualiser le jeu sur votre serveur pour offrir à vos joueurs une version mise à jour quasi instantanément. - +### Distribution par lien direct et jeu instantané -

Avec les jeux HTML5, vous n'avez pas besoin de dire aux gens de chercher votre jeu sur un magasin d'applications. Vous pouvez simplement leur envoyer un lien direct pour accéder au jeu, et ils peuvent cliquer pour jouer sans attendre, sans qu'il soit nécessaire d'utiliser des plugins tiers, ou de télécharger et d'installer de gros packages. Gardez toutefois à l'esprit que le chargement de votre jeu peut prendre un peu de temps, en fonction de sa taille ou de la vitesse de votre connexion Internet. Dans tous les cas, il est beaucoup plus facile de faire la promotion de votre jeu si vous pouvez amener du trafic directement là où vous le souhaitez, sans avoir à passer toute une série d'obstacles avant de pouvoir jouer.

+Avec les jeux HTML5, vous n'avez pas besoin de dire aux gens de chercher votre jeu sur un magasin d'applications. Vous pouvez simplement leur envoyer un lien direct pour accéder au jeu, et ils peuvent cliquer pour jouer sans attendre, sans qu'il soit nécessaire d'utiliser des plugins tiers, ou de télécharger et d'installer de gros packages. Gardez toutefois à l'esprit que le chargement de votre jeu peut prendre un peu de temps, en fonction de sa taille ou de la vitesse de votre connexion Internet. Dans tous les cas, il est beaucoup plus facile de faire la promotion de votre jeu si vous pouvez amener du trafic directement là où vous le souhaitez, sans avoir à passer toute une série d'obstacles avant de pouvoir jouer. -

Ordinateur vs mobile

+## Ordinateur vs mobile -

La majeure partie du trafic qui nous intéresse (des personnes jouant à des jeux en HTML5) arrive par le biais d'appareils mobiles, il va donc falloir se concentrer dessus si l'on souhaite vraiment réussir. Les appareils mobiles sont des plateformes idéales pour faire briller la technologie HTML5 et profiter de ses avantages. Pas de Flash, et le HTML5 est totalement multi-plateformes.

+La majeure partie du trafic qui nous intéresse (des personnes jouant à des jeux en HTML5) arrive par le biais d'appareils mobiles, il va donc falloir se concentrer dessus si l'on souhaite vraiment réussir. Les appareils mobiles sont des plateformes idéales pour faire briller la technologie HTML5 et profiter de ses avantages. Pas de Flash, et le HTML5 est totalement multi-plateformes. -

Chercher à concurrencer les jeux pour ordinateur en direct est très difficile. Vous pouvez certes proposer votre jeu en HTML5 dans la même arène (voir la section Les boutiques de jeux pour ordinateur plus bas), et vous devriez d'ailleurs, car c'est une bonne chose que d'apporter de la diversité dans les plateformes que vous appréciez, mais souvenez-vous que les développeurs qui créent des jeux pour ordinateur ont des années d'expérience derrière eux, de supers outils et des canaux de distribution stables. Beaucoup de jeux HTML5 vont donc viser des segments de marché différents des jeux PC natifs : on proposera par exemple de petits jeux pour passer le temps dans les transports plutôt que des expériences hyper-immersives. De tels jeux sont souvent conçus pour être jouer à deux voire un seul doigt, de façon à pouvoir tenir votre appareil d'une main pour jouer et pouvoir garder votre seconde main libre peu importe ce dont vous avez besoin.

+Chercher à concurrencer les jeux pour ordinateur en direct est très difficile. Vous pouvez certes proposer votre jeu en HTML5 dans la même arène (voir la section [Les boutiques de jeux pour ordinateur](#native_desktop) plus bas), et vous devriez d'ailleurs, car c'est une bonne chose que d'apporter de la diversité dans les plateformes que vous appréciez, mais souvenez-vous que les développeurs qui créent des jeux pour ordinateur ont des années d'expérience derrière eux, de supers outils et des canaux de distribution stables. Beaucoup de jeux HTML5 vont donc viser des segments de marché différents des jeux PC natifs : on proposera par exemple de petits jeux pour passer le temps dans les transports plutôt que des expériences hyper-immersives. De tels jeux sont souvent conçus pour être jouer à deux voire un seul doigt, de façon à pouvoir tenir votre appareil d'une main pour jouer et pouvoir garder votre seconde main libre peu importe ce dont vous avez besoin. -

Ceci étant dit, les plateformes pour ordinateurs peuvent être utilisées très simplement pour distribuer vos jeux, grâce à des "wrappers", des fonctionnalités qui vous aident préparer des builds natifs de votre jeu (voir le paragraphe sur les packs de jeux). C'est également appréciable de prévoir des commandes pour ordinateurs dans vos jeux, même si vous visez principalement les mobiles. Les joueurs apprécient vos jeux sur n'importe quelle plateforme disponible, et les postes fixes en font partie. En outre, il est généralement plus facile de construire et de tester un jeu sur ordinateur d'abord, avant de se lancer dans le débogage de la version mobile.

+Ceci étant dit, les plateformes pour ordinateurs peuvent être utilisées très simplement pour distribuer vos jeux, grâce à des "wrappers", des fonctionnalités qui vous aident préparer des builds natifs de votre jeu (voir le paragraphe sur les [packs de jeux](#packaging_games)). C'est également appréciable de prévoir des commandes pour ordinateurs dans vos jeux, même si vous visez principalement les mobiles. Les joueurs apprécient vos jeux sur n'importe quelle plateforme disponible, et les postes fixes en font partie. En outre, il est généralement plus facile de construire et de tester un jeu sur ordinateur d'abord, avant de se lancer dans le débogage de la version mobile. -

Publier le jeu

+## Publier le jeu -

Il y a trois grandes possibilités à considérer lorsqu'on souhaite publier un jeu :

+Il y a trois grandes possibilités à considérer lorsqu'on souhaite publier un jeu : - +- Auto-hébergement +- Éditeurs +- Magasins -

Rappelez-vous que le nom de votre jeu doit être suffisamment distinctif pour être rapidement promu à l'avenir, mais également suffisamment accrocheur pour que les gens s'en rappellent.

+Rappelez-vous que le nom de votre jeu doit être suffisamment distinctif pour être rapidement [promu](/fr/docs/Games/Publishing_games/Game_promotion) à l'avenir, mais également suffisamment accrocheur pour que les gens s'en rappellent. -

Auto-hébergement

+### Auto-hébergement -

En tant que développeur.se front-end, vous savez sans doute déjà quoi faire : un jeu en HTML5 est simplement un autre site. Vous pouvez l'uploader sur un serveur distant, récupérer un nom de domaine accrocheur, et l'héberger vous-même.

+En tant que développeur.se front-end, vous savez sans doute déjà quoi faire : un jeu en HTML5 est simplement un autre site. Vous pouvez l'uploader sur un serveur distant, récupérer un nom de domaine accrocheur, et l'héberger vous-même. -

Si vous voulez gagner un peu d'argent avec le développement de jeux, prenez soin de sécuriser votre code source d'une façon ou d'une autre afin d'éviter que d'autres personnes ne vous le piquent et ne le vendent comme si c'était le leur. Vous pouvez par exemple concaténer et le réduire pour le rendre plus petit, ou encore le rendre beaucoup plus moche afin qu'il soit beaucoup plus difficile de déconstruire votre jeu. Une autre bonne mesure à prendre est de mettre à disposition une démo en ligne si vous prévoyez de le packager et de le vendre sur une boutique fermée du type iTunes ou Steam.

+Si vous voulez gagner un peu d'argent avec le développement de jeux, prenez soin de sécuriser votre code source d'une façon ou d'une autre afin d'éviter que d'autres personnes ne vous le piquent et ne le vendent comme si c'était le leur. Vous pouvez par exemple concaténer et le réduire pour le rendre plus petit, ou encore le rendre beaucoup plus moche afin qu'il soit beaucoup plus difficile de déconstruire votre jeu. Une autre bonne mesure à prendre est de mettre à disposition une démo en ligne si vous prévoyez de le packager et de le vendre sur une boutique fermée du type iTunes ou Steam. -

Si vous travaillez sur un projet annexe juste pour le plaisir, garder le code source ouvert bénéficiera à celles et ceux qui voudraient apprendre à partir de vos créations. Dans ce cas vous n'avez même pas besoin de vous soucier de trouver un fournisseur d'hébergement, puisqu'il est possible d'héberger vos jeux sur GitHub Pages. Vous bénéficiez d'un hébergement gratuit, d'un contrôle de versions et de contributeurs potentiels si votre projet est suffisamment intéressant.

+Si vous travaillez sur un projet annexe juste pour le plaisir, garder le code source ouvert bénéficiera à celles et ceux qui voudraient apprendre à partir de vos créations. Dans ce cas vous n'avez même pas besoin de vous soucier de trouver un fournisseur d'hébergement, puisqu'il est possible d'[héberger vos jeux sur GitHub Pages](https://dev.end3r.com/2014/02/host-your-html5-games-on-github-pages/). Vous bénéficiez d'un hébergement gratuit, d'un contrôle de versions et de contributeurs potentiels si votre projet est suffisamment intéressant. -

Éditeurs et portails

+### Éditeurs et portails -

Comme leur nom le suggère, les éditeurs peuvent gérer la publication de votre jeu pour vous. Que vous choisissiez cette option ou non dépend de vos attentes en matière de distribution de votre jeu : souhaitez-vous l'envoyer partout où c'est possible, ou préférez-vous limiter sa présence à ceux qui auront acheté une licence exclusive ? À vous de voir. Étudiez plusieurs options, expérimentez chacune et tirez-en vos propres conclusions. Les éditeurs vous seront expliqués plus en détail dans notre article dédié à la monétisation.

+Comme leur nom le suggère, les éditeurs peuvent gérer la publication de votre jeu pour vous. Que vous choisissiez cette option ou non dépend de vos attentes en matière de distribution de votre jeu : souhaitez-vous l'envoyer partout où c'est possible, ou préférez-vous limiter sa présence à ceux qui auront acheté une [licence exclusive](/fr/docs/Games/Publishing_games/Game_monetization) ? À vous de voir. Étudiez plusieurs options, expérimentez chacune et tirez-en vos propres conclusions. Les éditeurs vous seront expliqués plus en détail dans notre article dédié à la [monétisation](/fr/docs/Games/Techniques/Publishing_games/Game_monetization/). -

Il existe également des portails indépendants qui rassemblent des jeux intéressants, citons par exemple HTML5Games.com, GameArter.com, MarketJS.com, GameFlare, GameDistribution.com ou encore Poki. Vous pouvez y publier votre jeu et il recevra naturellement de la visibilité grâce au trafic conséquent que ces sites génèrent. Certains d'entre eux prennent vos fichiers et les hébergent sur leur serveur, tandis que d'autres renverront simplement un lien vers votre site web ou intègreront votre jeu sur leur site. Une telle exposition peuvent apporter uniquement de la visibilité à votre jeu, ou, si vous avez des publicités à côté de votre jeu (ou toute autre méthode de monétisation) cela peut également vous procurer des revenus.

+Il existe également des portails indépendants qui rassemblent des jeux intéressants, citons par exemple [HTML5Games.com](https://html5games.com/), [GameArter.com](https://www.gamearter.com/), [MarketJS.com](https://www.marketjs.com/), [GameFlare](https://distribution.gameflare.com/), [GameDistribution.com](https://gamedistribution.com/) ou encore [Poki](https://developers.poki.com/). Vous pouvez y publier votre jeu et il recevra naturellement de la visibilité grâce au trafic conséquent que ces sites génèrent. Certains d'entre eux prennent vos fichiers et les hébergent sur leur serveur, tandis que d'autres renverront simplement un lien vers votre site web ou intègreront votre jeu sur leur site. Une telle exposition peuvent apporter uniquement de la [visibilité](/fr/docs/Games/Techniques/Publishing_games/Game_promotion/) à votre jeu, ou, si vous avez des publicités à côté de votre jeu (ou toute autre méthode de monétisation) cela peut également vous procurer des revenus. -

Le Web et les magasins d'applications natifs

+### Le Web et les magasins d'applications natifs -

Vous pouvez aussi uploader et publier votre jeu directement sur différentes boutiques, ou marketplaces (places de marché). Pour cela vous devrez au préalable préparer et empaqueter votre jeu dans un format de construction spécifique à chaque écosystème d'application que vous visez. Voir à ce sujet la section {{anch("Marketplaces — Plateformes de distribution")}} pour obtenir plus de détails sur les différents types de marketplace disponibles.

+Vous pouvez aussi uploader et publier votre jeu directement sur différentes boutiques, ou marketplaces (places de marché). Pour cela vous devrez au préalable préparer et empaqueter votre jeu dans un format de construction spécifique à chaque écosystème d'application que vous visez. Voir à ce sujet la section {{anch("Marketplaces — Plateformes de distribution")}} pour obtenir plus de détails sur les différents types de marketplace disponibles. -

Marketplaces — Plateformes de distribution

+## Marketplaces — Plateformes de distribution -

Voyons quelles options sont à notre disposition en matière de marketplaces/magasins d'applications disponibles pour chaque plateforme et système d'exploitation.

+Voyons quelles options sont à notre disposition en matière de marketplaces/magasins d'applications disponibles pour chaque plateforme et système d'exploitation. -
-

Note : Ces plateformes de distribution sont les plus populaires, mais cela ne signifie pas qu'elles sont les seules. Plutôt que d'essayer d'ajouter votre jeu à des milliers d'autres dans l'app store iOS par exemple, vous pouvez également tenter de trouver une niche et faire la promotion de votre jeu directement auprès d'une audience qui sera intéressée par vos jeux. Il est essentiel de faire preuve de créativité ici.

-
+> **Note :** Ces plateformes de distribution sont les plus populaires, mais cela ne signifie pas qu'elles sont les seules. Plutôt que d'essayer d'ajouter votre jeu à des milliers d'autres dans l'app store iOS par exemple, vous pouvez également tenter de trouver une niche et faire la promotion de votre jeu directement auprès d'une audience qui sera intéressée par vos jeux. Il est essentiel de faire preuve de créativité ici. -

Boutiques en ligne

+### Boutiques en ligne -

Les meilleures plateformes de jeux HTML5 sont des boutiques Web. Il est facile de préparer un jeu pour ces plateformes, puisque cela ne demande que très peu voire aucune modification au jeu lui-même : il suffit en général d'ajouter une simple notice explicative ("manifeste") avec toutes les informations nécessaires dans un dossier zip contenant l'ensemble des ressources.

+Les meilleures plateformes de jeux HTML5 sont des boutiques Web. Il est facile de [préparer un jeu pour ces plateformes](https://code.tutsplus.com/tutorials/preparing-for-firefox-os--mobile-18515), puisque cela ne demande que très peu voire aucune modification au jeu lui-même : il suffit en général d'ajouter une simple notice explicative ("manifeste") avec toutes les informations nécessaires dans un dossier zip contenant l'ensemble des ressources. - +- Le magasin d'applications [Chrome Web Store](https://chrome.google.com/webstore/) représente également une option intéressante : une notice explicative, votre jeu dans un dossier zip et un formulaire de soumission à remplir en ligne, c'est tout ce dont vous avez besoin pour mettre votre jeu à disposition. +- [Tizen](https://www.tizenstore.com/) accorde beaucoup d'importance au soutien des applications écrites en JavaScript : leur boutique fait partie des options disponibles. -

Les App Store natifs

+### Les App Store natifs -

Quand on s'intéresse aux supports mobiles, on retrouve l'App Store d'Apple pour iOS, Google Play pour Android, et tous leurs concurrents. Les App Store natifs comptent déjà des développeurs bien établis vendant de très bons jeux, il faudra donc avoir du talent et de la chance pour vous faire remarquer!

+Quand on s'intéresse aux supports mobiles, on retrouve l'App Store d'Apple pour iOS, Google Play pour Android, et tous leurs concurrents. Les App Store natifs comptent déjà des développeurs bien établis vendant de très bons jeux, il faudra donc avoir du talent et de la chance pour vous faire remarquer! - +- Il est relativement difficile d'intégrer l'App Store iOS, en raison des exigences assez strictes que doivent respecter les jeux; vous devrez en outre attendre une semaine ou deux avant d'être acceptés. Par ailleurs, comme il s'agit du magasin d'applications mobiles le plus en vu, avec des centaines de milliers d'applications disponibles, il sera extrêmement difficile de vous distinguer de la masse. +- Les exigences de Google Play étant moins strictes, la boutique est polluée par des jeux de mauvaise qualité. Il reste difficile de se faire remarquer puisque le nombre d'applications soumises chaque jour est énorme. C'est encore plus difficile de gagner de l'argent sur cette plateforme : la plupart des jeux payants sur iOS sont publiés gratuitement sur Android, les revenus monétaires provenant alors d'achats in-app au sein de l'application même (In-app purchases, IAPs) ou de publicités. +- D'autres boutiques natives pour les mobiles comme Windows Phone ou Blackberry travaillent dur pour récupérer une part du gâteau, mais sont loin derrière leurs concurrents. Ce peut être une bonne option de publier votre jeu sur ces boutiques, puisqu'il sera alors bien plus facile de vous faire remarquer. -

Si vous souhaitez obtenir plus d'informations sur les différents types de boutiques d'applications, vous pouvez jeter un oeil à la liste des plateformes de distribution de logiciels mobiles (en anglais) sur Wikipédia.

+Si vous souhaitez obtenir plus d'informations sur les différents types de boutiques d'applications, vous pouvez jeter un oeil à la [liste des plateformes de distribution de logiciels mobiles](https://en.wikipedia.org/wiki/List_of_mobile_software_distribution_platforms) (en anglais) sur Wikipédia. -

Les boutiques de jeux pour ordinateur

+### Les boutiques de jeux pour ordinateur -

Afin d'élargir votre audience, vous pouvez également viser l'écosystème des jeux pour ordinateur avec vos jeux en HTML5 - gardez toutefois à l'esprit tous les jeux de catégorie AAA qui captent la majeure partie du marché, et demandez vous bien si cela correspond à votre stratégie ou non. Pour faire les choses proprement sur ordinateur, vous devez apporter un support aux trois systèmes d'exploitation: Windows, Mac OS et Linux. La plus grosse plateforme en ligne de distribution de jeux est de loin Steam; les développeurs indépendants peuvent intégrer Steam via le programme Steam Direct. Rappelez-vous que vous devrez gérer les problématiques multi-plateformes vous-même en uploadant des versions différentes pour chaque plateforme.

+Afin d'élargir votre audience, vous pouvez également viser l'écosystème des jeux pour ordinateur avec vos jeux en HTML5 - gardez toutefois à l'esprit tous les jeux de catégorie AAA qui captent la majeure partie du marché, et demandez vous bien si cela correspond à votre stratégie ou non. Pour faire les choses proprement sur ordinateur, vous devez apporter un support aux trois systèmes d'exploitation: Windows, Mac OS et Linux. La plus grosse plateforme en ligne de distribution de jeux est de loin [Steam](https://steamcommunity.com/); les développeurs indépendants peuvent intégrer Steam via le programme [Steam Direct](https://partner.steamgames.com/steamdirect). Rappelez-vous que vous devrez gérer les problématiques multi-plateformes vous-même en uploadant des versions différentes pour chaque plateforme. -

Au-delà de Steam, il existe des initiatives qui font beaucoup parler d'elles, comme Humble Bundle, où les jeux indépendants les plus populaires sont présentés à une audience plus large. Mais voyez-le plutôt comme une excellente opportunité de se faire connaître que de gagner beaucoup d'argent, car le prix que l'on paie pour des jeux dans un lot est généralement assez faible.

+Au-delà de Steam, il existe des initiatives qui font beaucoup parler d'elles, comme [Humble Bundle](https://www.humblebundle.com/), où les jeux indépendants les plus populaires sont présentés à une audience plus large. Mais voyez-le plutôt comme une excellente opportunité de se faire connaître que de gagner beaucoup d'argent, car le prix que l'on paie pour des jeux dans un lot est généralement assez faible. -

Des packs de jeux

+## Des packs de jeux -

Le Web est le choix le plus évident et le plus intéressant pour des jeux HTML5, mais si vous souhaitez atteindre une audience plus large et distribuer votre jeu dans un écosystème fermé, vous avez toujours la possibilité de le proposer dans un lot. L'avantage c'est que vous n'aurez pas besoin de faire travailler des équipes sur un même jeu pour des plateformes différentes : vous pouvez construire le jeu une fois pour toutes et utiliser des outils comme Phonegap ou CocoonIO pour l'intégrer dans un package pour des boutiques natives. Les lots ainsi obtenus sont généralement assez fiables, mais vous devriez malgré tout les tester et rester à l'affût des petits problèmes ou bugs à corriger.

+Le Web est le choix le plus évident et le plus intéressant pour des jeux HTML5, mais si vous souhaitez atteindre une audience plus large et distribuer votre jeu dans un écosystème fermé, vous avez toujours la possibilité de le proposer dans un lot. L'avantage c'est que vous n'aurez pas besoin de faire travailler des équipes sur un même jeu pour des plateformes différentes : vous pouvez construire le jeu une fois pour toutes et utiliser des outils comme [Phonegap](/fr/docs/Web) ou [CocoonIO](/fr/docs/Web) pour l'intégrer dans un package pour des boutiques natives. Les lots ainsi obtenus sont généralement assez fiables, mais vous devriez malgré tout les tester et rester à l'affût des petits problèmes ou bugs à corriger. -

Outils disponibles

+### Outils disponibles -

Il existe toute une variété d'outils, à choisir en fonction de vos compétences, de vos frameworks favoris ou des plateformes que vous visez. Tout l'enjeu consiste à choisir le meilleur outil pour réaliser la tâche que vous souhaitez réaliser.

+Il existe toute une variété d'outils, à choisir en fonction de vos compétences, de vos frameworks favoris ou des plateformes que vous visez. Tout l'enjeu consiste à choisir le meilleur outil pour réaliser la tâche que vous souhaitez réaliser. - +- [Phonegap](https://phonegap.com/) — basé sur Cordova, c'est l'outil le plus populaire pour construire et packager des applications JavaScript à destination des plateformes natives. +- [CocoonIO](http://cocoon.io/) — le plus populaire des outils dédiés à la conception de jeux HTML5 pour de multiples boutiques natives. CocoonIO propose ses propres optimisations de performance pour les jeux utilisant Canvas, et fonctionne avec beaucoup de frameworks de jeu. +- [Ejecta](https://impactjs.com/ejecta) — un outil conçu spécifiquement pour packager les jeux créés avec le framework [ImpactJS](https://impactjs.com/) pour iOS, par ailleurs développé par le créateur d'ImpactJS. L'outil propose une intégration fluide avec ImpactJS, mais ne supporte qu'un framework et app store. +- [NW.js](https://nwjs.io/) — anciennement connu sous le nom de Node-Webkit, c'est la solution à privilégier lorsqu'on souhaite construire des jeux d'ordinateur qui fonctionnent sur Windows, Mac et Linux. Les distributions sont packagés grâce au moteur WebKit afin d'offrir un rendu sur n'importe quelle plateforme. -

Parmi les autres outils existants, on peut citer :

+Parmi les autres outils existants, on peut citer : - +- [Intel XDK](https://software.intel.com/fr/intel-xdk) — une alternative très intéressante, similaire à CocoonIO. +- [Electron](https://electron.atom.io/) — connu sous Atom Shell — est un outil open-source et multi-plateformes de GitHub. +- [Manifold.js](http://manifoldjs.com/) — cet outil de l'équipe Microsoft peut créer des distributions natives de jeux HTML5 depuis iOS, Android et Windows. -

Résumé

+## Résumé -

La distribution permet d'offrir au monde entier un accès à votre jeu. Il existe de nombreuses possibilités et il n'existe pas de meilleure réponse, tout dépend de vos objectifs. Une fois que vous avez publié votre jeu, il est temps de se concentrer sur sa promotion : il est temps que les gens sachent que votre jeu existe! Si vous n'en faites pas la promotion, ils ne sauront même pas que votre jeu existe, et pourront encore moins y jouer.

+La distribution permet d'offrir au monde entier un accès à votre jeu. Il existe de nombreuses possibilités et il n'existe pas de meilleure réponse, tout dépend de vos objectifs. Une fois que vous avez publié votre jeu, il est temps de se concentrer sur sa [promotion](/fr/docs/Games/Techniques/Publishing_games/Game_promotion/) : il est temps que les gens sachent que votre jeu existe! Si vous n'en faites pas la promotion, ils ne sauront même pas que votre jeu existe, et pourront encore moins y jouer. diff --git a/files/fr/games/publishing_games/game_monetization/index.md b/files/fr/games/publishing_games/game_monetization/index.md index 4e5930c930..fe96148bc8 100644 --- a/files/fr/games/publishing_games/game_monetization/index.md +++ b/files/fr/games/publishing_games/game_monetization/index.md @@ -14,88 +14,88 @@ tags: translation_of: Games/Publishing_games/Game_monetization original_slug: Jeux/Publier_jeux/Game_monetization --- -
{{GamesSidebar}}
+{{GamesSidebar}} -

Lorsque vous avez passé votre temps à créer un jeu, à le distribuer et à en faire la promotion, vous devriez envisager d'en gagner de l'argent. Si votre travail est une entreprise sérieuse sur la voie de devenir un développeur de jeux indépendant capable de gagner sa vie, lisez la suite et voyez quelles sont vos options. La technologie est suffisamment mature; maintenant, il s'agit simplement de choisir la bonne approche.

+Lorsque vous avez passé votre temps à créer un jeu, à le [distribuer](/fr/docs/Games/Techniques/Publishing_games/Game_distribution) et à en faire la [promotion](/fr/docs/Games/Techniques/Publishing_games/Game_promotion), vous devriez envisager d'en gagner de l'argent. Si votre travail est une entreprise sérieuse sur la voie de devenir un développeur de jeux indépendant capable de gagner sa vie, lisez la suite et voyez quelles sont vos options. La technologie est suffisamment mature; maintenant, il s'agit simplement de choisir la bonne approche. -

Jeux payants

+## Jeux payants -

Le premier choix, le plus évident qui vous vient à l'esprit pourrait être de vendre les jeux de la même manière que pour d'énormes titres AAA — avec un prix initial fixe. Même si le marché numérique est essentiel et que vous n'avez pas besoin d'imprimer des couvertures et de placer votre jeu dans un magasin physique dans des boîtes, pour gagner de l'argent décent en vendant vos jeux à un prix fixe, vous devez investir votre temps et votre argent dans le marketing.

+Le premier choix, le plus évident qui vous vient à l'esprit pourrait être de vendre les jeux de la même manière que pour d'énormes titres AAA — avec un prix initial fixe. Même si le marché numérique est essentiel et que vous n'avez pas besoin d'imprimer des couvertures et de placer votre jeu dans un magasin physique dans des boîtes, pour gagner de l'argent décent en vendant vos jeux à un prix fixe, vous devez investir votre temps et votre argent dans le marketing. -

Le prix que vous facturez pour votre jeu dépend du marché, de la qualité de votre jeu et de nombreux autres petits facteurs. Un titre arcade iOS peut être vendu pour 0.99 USD, mais un jeu de bureau plus long de style RPG sur Steam peut coûter 20 USD; les deux prix sont corrects. Vous devez suivre le marché et faire vos propres recherches — apprendre rapidement de vos erreurs est important.

+Le prix que vous facturez pour votre jeu dépend du marché, de la qualité de votre jeu et de nombreux autres petits facteurs. Un titre arcade iOS peut être vendu pour 0.99 USD, mais un jeu de bureau plus long de style RPG sur Steam peut coûter 20 USD; les deux prix sont corrects. Vous devez suivre le marché et faire vos propres recherches — apprendre rapidement de vos erreurs est important. -

Achats dans l'application

+## Achats dans l'application -

Au lieu de faire payer votre jeu à l'avance, vous pouvre proposer un jeu gratuit avec des achats intégrés (IAPs). Dans ce cas, le jeu peut être acquis sans dépenser un centime — donnez le jeu aux joueurs, mais offrez de la monnaie du jeu, des bonus ou des avantages en argent réel. Des exemples spécifiques peuvent inclure des niveaux bonus, de meilleurs armes ou sorts, ou le remplissage de l'énergie nécessaire pour jouer. Concevoir un bon système IAP est un art en soi.

+Au lieu de faire payer votre jeu à l'avance, vous pouvre proposer un jeu gratuit avec des achats intégrés (IAPs). Dans ce cas, le jeu peut être acquis sans dépenser un centime — donnez le jeu aux joueurs, mais offrez de la monnaie du jeu, des bonus ou des avantages en argent réel. Des exemples spécifiques peuvent inclure des niveaux bonus, de meilleurs armes ou sorts, ou le remplissage de l'énergie nécessaire pour jouer. Concevoir un bon système IAP est un art en soi. -

N'oubliez pas que vous avez besoin de milliers de téléchargements de votre jeu pour rendre les IAP efficaces — seule une petite fraction des joueurs paiera réellement pour les IAP. Comment petit? Cela varie, mais environ une personne sur mille est dans la moyenne. Plus il y a de personnes qui jouent à votre jeu, plus les chances que quelqu'un paie est élevée, donc vos revenus dépendent fortement de vos activités de promotion.

+N'oubliez pas que vous avez besoin de milliers de téléchargements de votre jeu pour rendre les IAP efficaces — seule une petite fraction des joueurs paiera réellement pour les IAP. Comment petit? Cela varie, mais environ une personne sur mille est dans la moyenne. Plus il y a de personnes qui jouent à votre jeu, plus les chances que quelqu'un paie est élevée, donc vos revenus dépendent fortement de vos activités de [promotion](/fr/docs/Games/Techniques/Publishing_games/Game_promotion). -

Freemium

+### Freemium -

Les jeux qui comportent des IAP sont souvent appelés freemium ou free-to-play — un jeu freemium peut être acquis et joué gratuitement, mais vous pouvez payer pour des fonctionnalités supplémentaires (premium), des biens virtuels ou d'autres avantages. Le mot lui-même a acquis des connotations négatives après que les grandes entreprises se soient concentrées sur la création de jeux, dont le but principal était d'obtenir autant d'argent que possible des joueurs au lieu de proposer une expérience amusante. Les pires cas étaient lorsque vous pouviez utiliser de l'argent réel pour payer pour obtenir des avantages par rapport aux autres joueurs, ou lorsqu'ils restreignaient l'accès aux étapes suivantes du jeu à moins que les joueurs ne paient. Le terme «pay to win» a été inventé et cette approche n'est pas appréciée par de nombreux joueurs et développeurs. Si vous souhaitez mettre en œuvre des IAP, essayez d'ajouter de la valeur au jeu avec quelque chose que les joueurs apprécieront au lieu de le retirer et de le facturer.

+Les jeux qui comportent des IAP sont souvent appelés **freemium** ou free-to-play — un jeu freemium peut être acquis et joué gratuitement, mais vous pouvez payer pour des fonctionnalités supplémentaires (premium), des biens virtuels ou d'autres avantages. Le mot lui-même a acquis des connotations négatives après que les grandes entreprises se soient concentrées sur la création de jeux, dont le but principal était d'obtenir autant d'argent que possible des joueurs au lieu de proposer une expérience amusante. Les pires cas étaient lorsque vous pouviez utiliser de l'argent réel pour payer pour obtenir des avantages par rapport aux autres joueurs, ou lorsqu'ils restreignaient l'accès aux étapes suivantes du jeu à moins que les joueurs ne paient. Le terme «pay to win» a été inventé et cette approche n'est pas appréciée par de nombreux joueurs et développeurs. Si vous souhaitez mettre en œuvre des IAP, essayez d'ajouter de la valeur au jeu avec quelque chose que les joueurs apprécieront au lieu de le retirer et de le facturer. -

Add-ons et DLCs

+### Add-ons et DLCs -

Les Add-ons et les DLCs sont un bon moyen de fournir une valeur supplémentaire à un jeu déjà sorti, mais n'oubliez pas que vous devrez proposer un contenu décent et divertissant pour attirer les gens à l'acheter. Un tout nouvel ensemble de niveaux avec de nouveaux personnages, de nouvelles armes et une nouvelle histoire est un bon matériau pour le DLC, mais pour avoir suffisamment de ventes, le jeu lui-même doit être populaire, sinon aucun joueur ne voudra dépenser son argent durement gagné.

+Les Add-ons et les DLCs sont un bon moyen de fournir une valeur supplémentaire à un jeu déjà sorti, mais n'oubliez pas que vous devrez proposer un contenu décent et divertissant pour attirer les gens à l'acheter. Un tout nouvel ensemble de niveaux avec de nouveaux personnages, de nouvelles armes et une nouvelle histoire est un bon matériau pour le DLC, mais pour avoir suffisamment de ventes, le jeu lui-même doit être populaire, sinon aucun joueur ne voudra dépenser son argent durement gagné. -

Advertisements

+## Advertisements -

Au lieu de vendre activement les jeux, vous pouvez également essayer de vous procurer un revenu passif — afficher des publicités et s'appuyer sur des activités précédentes liées à la promotion de votre jeu peut en bénéficier, mais votre jeu doit crée une dépendance, ce qui n'est pas aussi facile qu'il y paraît. Vous devez encore le planifier, et à un moment donné vous aurez également besoin d'un peu de chance. Si votre jeu devient viral et que les gens commencent à le partager, vous pouvez obtenir beaucoup de téléchargements et d'argent grâce aux publicités.

+Au lieu de vendre activement les jeux, vous pouvez également essayer de vous procurer un revenu passif — afficher des publicités et s'appuyer sur des activités précédentes liées à la [promotion](/fr/docs/Games/Techniques/Publishing_games/Game_promotion) de votre jeu peut en bénéficier, mais votre jeu doit crée une dépendance, ce qui n'est pas aussi facile qu'il y paraît. Vous devez encore le planifier, et à un moment donné vous aurez également besoin d'un peu de chance. Si votre jeu devient viral et que les gens commencent à le partager, vous pouvez obtenir beaucoup de téléchargements et d'argent grâce aux publicités. -

De nombreuses entreprises proposent des systèmes de publicité - vous vous inscrivez et leur permettez de diffuser des publicités en échange d'un pourcentage des revenus. On dit que Google AdSense est le plus efficace, mais il n'est pas conçu pour les jeux et c'est une très mauvaise pratique de l'utiliser à cette fin. Au lieu de risquer de fermer votre compte et de bloquer tout l'argent, essayez d'utiliser les portails habituels ciblés par gamedev comme LeadBolt. Ils offrent des systèmes faciles à mettre en œuvre pour afficher les publicités dans vos jeux et partager les gains avec vous.

+De nombreuses entreprises proposent des systèmes de publicité - vous vous inscrivez et leur permettez de diffuser des publicités en échange d'un pourcentage des revenus. On dit que Google AdSense est le plus efficace, mais il n'est pas conçu pour les jeux et c'est une très mauvaise pratique de l'utiliser à cette fin. Au lieu de risquer de fermer votre compte et de bloquer tout l'argent, essayez d'utiliser les portails habituels ciblés par gamedev comme [LeadBolt](https://www.leadbolt.com/). Ils offrent des systèmes faciles à mettre en œuvre pour afficher les publicités dans vos jeux et partager les gains avec vous. -

Les publicités vidéo sont de plus en plus populaires, en particulier sous la forme d'un pré-roll - elles sont diffusées au début de votre jeu pendant son chargement. Et pour savoir où placer les publicités dans votre jeu, cela dépend vraiment de vous. Il doit être aussi subtil que possible pour ne pas trop gêner les joueurs, mais suffisamment visible pour les faire cliquer ou du moins en prendre note. L'ajout de publicités entre les sessions de jeu sur les écrans de jeu est une approche populaire.

+Les publicités vidéo sont de plus en plus populaires, en particulier sous la forme d'un pré-roll - elles sont diffusées au début de votre jeu pendant son chargement. Et pour savoir où placer les publicités dans votre jeu, cela dépend vraiment de vous. Il doit être aussi subtil que possible pour ne pas trop gêner les joueurs, mais suffisamment visible pour les faire cliquer ou du moins en prendre note. L'ajout de publicités entre les sessions de jeu sur les écrans de jeu est une approche populaire. -

Licence

+## Licence -

Il existe une approche qui peut fonctionner comme un modèle de monétisation à elle seule, et qui consiste à vendre des licences pour la distribution de votre jeu. Il y a de plus en plus de portails intéressés à montrer vos jeux sur leurs sites Web. Ils suivent diverses stratégies pour gagner de l'argent via vos jeux, mais vous n'avez pas à vous soucier de tout cela car la vente de la licence est généralement une transaction unique. Vous obtenez de l'argent et ils peuvent faire preuve de créativité en utilisant votre jeu pour gagner de l'argent.

+Il existe une approche qui peut fonctionner comme un modèle de monétisation à elle seule, et qui consiste à vendre des licences pour la distribution de votre jeu. Il y a de plus en plus de portails intéressés à montrer vos jeux sur leurs sites Web. Ils suivent diverses stratégies pour gagner de l'argent via vos jeux, mais vous n'avez pas à vous soucier de tout cela car la vente de la licence est généralement une transaction unique. Vous obtenez de l'argent et ils peuvent faire preuve de créativité en utilisant votre jeu pour gagner de l'argent. -

Trouver des éditeurs peut être difficile au début — esssayez de les rechercher sur les forums HTML5 Gamedevs. Si vous êtes bien connu, ils peuvent vous contacter. La plupart des offres sont conclues par e-mail lorsque vous parlez à une personne dédiée du côté de l'éditeur. Certains sites Web d'éditeurs ont ces informations facilement disponibles, tandis que d'autres sont plus difficiles à trouver. Lorsque vous atteignez un éditeur, essayez d'être gentil et direct - ce sont des gens occupés.

+Trouver des éditeurs peut être difficile au début — esssayez de les rechercher sur les [forums HTML5 Gamedevs](http://www.html5gamedevs.com/). Si vous êtes bien connu, ils peuvent vous contacter. La plupart des offres sont conclues par e-mail lorsque vous parlez à une personne dédiée du côté de l'éditeur. Certains sites Web d'éditeurs ont ces informations facilement disponibles, tandis que d'autres sont plus difficiles à trouver. Lorsque vous atteignez un éditeur, essayez d'être gentil et direct - ce sont des gens occupés. -

Licences exclusives

+### Licences exclusives -

La licence exclusive est un type de licence pour un éditeur — vous avez créé un jeu et vous en vendez tous les droits à une seule entité ainsi que les droits de le redistribuer — Softgames est un exemple d'un tel éditeur. Vous ne pouvez pas le revendre sous quelque forme que ce soit tant que l'éditeur en a les droits - c'est pourquoi les accords exclusifs valent beaucoup d'argent. Combien exactement? Cela dépend de la qualité du jeu, de son genre, de son éditeur et de bien d'autres, mais généralement, ce sera entre 2000 et 5000 USD. Une fois que vous avez vendu une licence exclusive, vous pouvez oublier la promotion de ce jeu particulier car vous ne gagnerez pas plus, alors ne concluez un tel accord que si vous êtes sûr qu'il est suffisamment rentable.

+La licence exclusive est un type de licence pour un éditeur — vous avez créé un jeu et vous en vendez tous les droits à une seule entité ainsi que les droits de le redistribuer — [Softgames](http://www.softgames.de/) est un exemple d'un tel éditeur. Vous ne pouvez pas le revendre sous quelque forme que ce soit tant que l'éditeur en a les droits - c'est pourquoi les accords exclusifs valent beaucoup d'argent. Combien exactement? Cela dépend de la qualité du jeu, de son genre, de son éditeur et de bien d'autres, mais généralement, ce sera entre 2000 et 5000 USD. Une fois que vous avez vendu une licence exclusive, vous pouvez oublier la promotion de ce jeu particulier car vous ne gagnerez pas plus, alors ne concluez un tel accord que si vous êtes sûr qu'il est suffisamment rentable. -

Licences non exclusives

+### Licences non exclusives -

Cette approche est moins stricte - vous pouvez vendre une licence à plusieurs éditeurs. C'est l'approche la plus populaire car avec chaque nouvel éditeur (et ils apparaissent constamment), vous pouvez vendre vos jeux à des conditions non exclusives. N'oubliez pas qu'avec cette licence, l'éditeur ne peut pas la redistribuer davantage - cela s'appelle souvent un accord verrouillé sur le site, car il achète le droit de publier le jeu sur son propre portail. Le coût habituel d'une licence non exclusive est d'environ 500 USD.

+Cette approche est moins stricte - vous pouvez vendre une licence à plusieurs éditeurs. C'est l'approche la plus populaire car avec chaque nouvel éditeur (et ils apparaissent constamment), vous pouvez vendre vos jeux à des conditions non exclusives. N'oubliez pas qu'avec cette licence, l'éditeur ne peut pas la redistribuer davantage - cela s'appelle souvent un accord verrouillé sur le site, car il achète le droit de publier le jeu sur son propre portail. Le coût habituel d'une licence non exclusive est d'environ 500 USD. -

Abonnements

+### Abonnements -

Il existe également une option pour obtenir un revenu mensuel passif via un abonnement. Au lieu d'obtenir un paiement unique, vous pouvez obtenir une petite somme d'argent par jeu, par mois - cela peut représenter environ 20 à 50 USD par mois et par jeu. C'est normalement à vous de décider si vous voulez obtenir tout l'argent en une somme forfaitaire ou l'obtenir par mois. N'oubliez pas qu'il peut être annulé, ce n'est donc pas une solution qui fonctionne indéfiniment.

+Il existe également une option pour obtenir un revenu mensuel passif via un abonnement. Au lieu d'obtenir un paiement unique, vous pouvez obtenir une petite somme d'argent par jeu, par mois - cela peut représenter environ 20 à 50 USD par mois et par jeu. C'est normalement à vous de décider si vous voulez obtenir tout l'argent en une somme forfaitaire ou l'obtenir par mois. N'oubliez pas qu'il peut être annulé, ce n'est donc pas une solution qui fonctionne indéfiniment. -

Revenus publicitaires

+### Revenus publicitaires -

Vous pouvez implémenter vous-même des publicités dans votre jeu et essayer de trouver le trafic pour gagner un peu, mais vous pouvez également conclure un accord de partage des revenus avec un éditeur. Ils se chargeront de gérer le trafic et partageront les gains - généralement dans un accord 70/30 ou 50/50, collecté par mois.

+Vous pouvez implémenter vous-même des publicités dans votre jeu et essayer de trouver le trafic pour gagner un peu, mais vous pouvez également conclure un accord de partage des revenus avec un éditeur. Ils se chargeront de gérer le trafic et partageront les gains - généralement dans un accord 70/30 ou 50/50, collecté par mois. -

N'oubliez pas que de nombreux nouveaux éditeurs de mauvaise qualité voudront obtenir votre jeu pour des revenus publicitaires au lieu de l'octroi de licences, car cela leur coûtera moins cher et vous pourriez vous retrouver avec des revenus d'environ 2 USD par jeu pour l'ensemble de la transaction. Soyez prudent lorsque vous traitez avec de nouveaux éditeurs - il est parfois préférable de réduire le coût de la licence pour un éditeur connu plutôt que de risquer une fraude avec un éditeur inconnu pour plus d'argent.

+N'oubliez pas que de nombreux nouveaux éditeurs de mauvaise qualité voudront obtenir votre jeu pour des revenus publicitaires au lieu de l'octroi de licences, car cela leur coûtera moins cher et vous pourriez vous retrouver avec des revenus d'environ 2 USD par jeu pour l'ensemble de la transaction. Soyez prudent lorsque vous traitez avec de nouveaux éditeurs - il est parfois préférable de réduire le coût de la licence pour un éditeur connu plutôt que de risquer une fraude avec un éditeur inconnu pour plus d'argent. -

Les éditeurs prenant vos jeux pour le partage des revenus et / ou l'octroi de licences peuvent nécessiter la mise en œuvre de leurs propres API, ce qui peut demander un travail supplémentaire, alors considérez cela également dans vos tarifs.

+Les éditeurs prenant vos jeux pour le partage des revenus et / ou l'octroi de licences peuvent nécessiter la mise en œuvre de leurs propres API, ce qui peut demander un travail supplémentaire, alors considérez cela également dans vos tarifs. -

L'image de marque

+### L'image de marque -

Vous pouvez vendre les droits d'utilisation de votre jeu à des fins de branding ou le faire vous-même. Dans le premier cas, c'est presque comme une licence non exclusive, mais le client achètera généralement les droits pour le code et implémentera ses propres graphiques. Dans le second cas, c'est comme un accord indépendant, mais vous réutilisez le code et ajoutez des graphiques fournis par le client, parfois en les implémentant comme il vous le demande. Par exemple, si vous avez un jeu dans lequel un joueur tape des aliments, vous pouvez changer la nourriture des produits du client pour leur faire de la publicité. Les prix de ce modèle varient considérablement en fonction de la marque, du client et de la quantité de travail que vous effectuez.

+Vous pouvez vendre les droits d'utilisation de votre jeu à des fins de branding ou le faire vous-même. Dans le premier cas, c'est presque comme une licence non exclusive, mais le client achètera généralement les droits pour le code et implémentera ses propres graphiques. Dans le second cas, c'est comme un accord indépendant, mais vous réutilisez le code et ajoutez des graphiques fournis par le client, parfois en les implémentant comme il vous le demande. Par exemple, si vous avez un jeu dans lequel un joueur tape des aliments, vous pouvez changer la nourriture des produits du client pour leur faire de la publicité. Les prix de ce modèle varient considérablement en fonction de la marque, du client et de la quantité de travail que vous effectuez. -

Autres stratégies de monétisation non axées sur le jeu

+## Autres stratégies de monétisation non axées sur le jeu -

Il existe d'autres façons de gagner de l'argent lors de la création de jeux HTML5, et cela n'a même pas besoin d'être lié au jeu.

+Il existe d'autres façons de gagner de l'argent lors de la création de jeux HTML5, et cela n'a même pas besoin d'être lié au jeu. -

Vendre des ressources

+### Vendre des ressources -

Si vous êtes graphiste, vous pouvez vendre les actifs des jeux que vous avez créés ou quelque chose de nouveau exclusivement à cette fin dans des boutiques en ligne comme Envato Market. Ce n'est pas beaucoup, mais si vous êtes un designer connu, cela peut être un flux de revenus passif supplémentaire.

+Si vous êtes graphiste, vous pouvez vendre les actifs des jeux que vous avez créés ou quelque chose de nouveau exclusivement à cette fin dans des boutiques en ligne comme [Envato Market](http://market.envato.com/). Ce n'est pas beaucoup, mais si vous êtes un designer connu, cela peut être un flux de revenus passif supplémentaire. -

Rédaction d'articles et de tutoriels

+### Rédaction d'articles et de tutoriels -

Il est possible d'écrire des articles sur vos jeux et même d'être payé pour eux. La promotion et la monétisation de jeux en même temps sont gagnant-gagnant, et si vous n'en abusez pas avec trop de publicité, les lecteurs apprécieront de les lire et d'apprendre une chose ou deux. Si vous vous concentrez d'abord sur le partage des connaissances et que vous utilisez vos jeux comme des exemples, cela devrait être correct. Consultez Tuts+ Game Development ou des sites Web similaires pour des opportunités d'écriture.

+Il est possible d'écrire des articles sur vos jeux et même d'être payé pour eux. La [promotion](/fr/docs/Games/Techniques/Publishing_games/Game_promotion) et la monétisation de jeux en même temps sont gagnant-gagnant, et si vous n'en abusez pas avec trop de publicité, les lecteurs apprécieront de les lire et d'apprendre une chose ou deux. Si vous vous concentrez d'abord sur le partage des connaissances et que vous utilisez vos jeux comme des exemples, cela devrait être correct. Consultez [Tuts+ Game Development](http://gamedevelopment.tutsplus.com/) ou des sites Web similaires pour des opportunités d'écriture. -

Marchandise

+### Marchandise -

Vous pouvez vendre des t-shirts, des autocollants ou d'autres gadgets — certains développeurs gagnent plus d'argent avec la marchandise qu'avec les jeux eux-mêmes, mais cela ne fonctionne que sur des jeux très populaires et reconnaissables comme Angry Birds. Pourtant, cela pourrait être un autre petit flux de revenus passifs. Plus vos revenus sont diversifiés, meilleure est la stabilité de votre entreprise.

+Vous pouvez vendre des t-shirts, des [autocollants](https://www.stickermule.com/user/1070634890/stickers) ou d'autres gadgets — certains développeurs gagnent plus d'argent avec la marchandise qu'avec les jeux eux-mêmes, mais cela ne fonctionne que sur des jeux très populaires et reconnaissables comme Angry Birds. Pourtant, cela pourrait être un autre petit flux de revenus passifs. Plus vos revenus sont diversifiés, meilleure est la stabilité de votre entreprise. -

Donations

+### Donations -

Lorsque tout le reste échoue, vous pouvez essayer de mettre un bouton de don sur la page de votre jeu et demander le soutien de la communauté. Parfois, cela fonctionne, mais seulement si le joueur vous connaît et estime que cela vous aidera dans votre situation. C'est pourquoi il est si important de gérer soigneusement votre communauté. Cela a fonctionné avec la compétition js13kGames — chaque participant a reçu un t-shirt gratuit, et certains ont même rendu quelques dollars pour l'aider à continuer dans les années à venir.

+Lorsque tout le reste échoue, vous pouvez essayer de mettre un bouton de don sur la page de votre jeu et demander le soutien de la communauté. Parfois, cela fonctionne, mais seulement si le joueur vous connaît et estime que cela vous aidera dans votre situation. C'est pourquoi il est si important de gérer soigneusement votre communauté. Cela a fonctionné avec la compétition [js13kGames](http://js13kgames.com/) — chaque participant a reçu un t-shirt gratuit, et certains ont même rendu quelques dollars pour l'aider à continuer dans les années à venir. -

Résumé

+## Résumé -

Il existe de nombreuses façons de gagner de l'argent - tout ce qui s'applique au monde du jeu AAA "normal" peut être plus ou moins appliqué aux jeux HTML5 occasionnels. Cependant, vous pouvez également vous concentrer sur la vente de licences, la création de marque ou le partage des revenus grâce aux publicités. C'est à vous de décider quel chemin vous allez suivre.

+Il existe de nombreuses façons de gagner de l'argent - tout ce qui s'applique au monde du jeu AAA "normal" peut être plus ou moins appliqué aux jeux HTML5 occasionnels. Cependant, vous pouvez également vous concentrer sur la vente de licences, la création de marque ou le partage des revenus grâce aux publicités. C'est à vous de décider quel chemin vous allez suivre. diff --git a/files/fr/games/publishing_games/game_promotion/index.md b/files/fr/games/publishing_games/game_promotion/index.md index 5c35777d31..e22dc20d84 100644 --- a/files/fr/games/publishing_games/game_promotion/index.md +++ b/files/fr/games/publishing_games/game_promotion/index.md @@ -10,84 +10,84 @@ tags: - blog - competitions --- -
{{GamesSidebar}}
+{{GamesSidebar}} -

Développer un jeu et le mettre en ligne ne suffit pas. Vous devez faire connaître au monde que vous avez un jeu intéressant auquel les gens auront envie de jouer. Il y a bien des façons de promouvoir votre jeu ; la plupart sont gratuites, donc même si vous avez du mal à gagner votre vie en tant que développeur indépendant, vous pouvez malgré tout faire beaucoup de choses pour faire connaître votre super nouveau jeu aux autres, y compris sans budget. Faire la promotion d'un jeu sera également très utile lorsque vous voudrez le monétiser, il est donc important de le faire correctement.

+Développer un jeu et le mettre en ligne ne suffit pas. Vous devez faire connaître au monde que vous avez un jeu intéressant auquel les gens auront envie de jouer. Il y a bien des façons de promouvoir votre jeu ; la plupart sont gratuites, donc même si vous avez du mal à gagner votre vie en tant que développeur indépendant, vous pouvez malgré tout faire beaucoup de choses pour faire connaître votre super nouveau jeu aux autres, y compris sans budget. Faire la promotion d'un jeu sera également très utile lorsque vous voudrez le [monétiser](/fr/docs/Games/Publishing_games/Game_monetization), il est donc important de le faire correctement. -

Compétitions

+## Compétitions -

Participer à des compétitions n'aura pas seulement pour effet d'accroître vos talents pour le développement de jeu et de sympathiser avec de nouvelles développeuses et développeurs auprès desquels vous pourrez apprendre : cela vous fera également intégrer une communauté. Si vous créez un bon jeu à l'occasion d'un tournoi et que vous gagnez des prix au passage, votre jeu sera automatiquement promu par les organisateurs et les autres participants. À vous la richesse et la gloire ! ou quelque chose dans le genre.

+Participer à des [compétitions](https://compohub.net/) n'aura pas seulement pour effet d'accroître vos talents pour le développement de jeu et de sympathiser avec de nouvelles développeuses et développeurs auprès desquels vous pourrez apprendre : cela vous fera également intégrer une communauté. Si vous créez un bon jeu à l'occasion d'un tournoi et que vous gagnez des prix au passage, votre jeu sera automatiquement promu par les organisateurs et les autres participants. À vous la richesse et la gloire ! ou quelque chose dans le genre. -

Beaucoup de grands jeux naissent d'une petite démo rapide créée pendant une compétition. Si l'idée et sa réalisation sont suffisamment bonnes, vous réussirez. De plus, les tournois demandent généralement que les jeux suivent un thème obligatoire, donc vous pourrez vous montrer créatif sur un concept donné si vous peinez à trouver des idées.

+Beaucoup de grands jeux naissent d'une petite démo rapide créée pendant une compétition. Si l'idée et sa réalisation sont suffisamment bonnes, vous réussirez. De plus, les tournois demandent généralement que les jeux suivent un thème obligatoire, donc vous pourrez vous montrer créatif sur un concept donné si vous peinez à trouver des idées. -

Site internet et blog

+## Site internet et blog -

Vous avez tout intérêt à créer votre propre site internet comprenant toutes les informations relatives à vos jeux, de façon à montrer aux gens ce sur quoi vous avez travaillé. Plus vous pouvez intégrer d'informations, mieux c'est : captures d'écrans, descriptions, bande-annonce, dossier de presse, configurations nécessaires, plateformes disponibles, détails sur l'assistance, etc. Vous marquerez des points en autorisant vos utilisateurs à jouer directement à vos jeux en ligne, a minima à une démo. Vous devriez également travailler un peu votre référencement sur les moteurs de recherche (SEO - Search Engine Optimization) pour permettre aux gens de trouver vos jeux plus facilement.

+Vous avez tout intérêt à créer votre propre site internet comprenant toutes les informations relatives à vos jeux, de façon à montrer aux gens ce sur quoi vous avez travaillé. Plus vous pouvez intégrer d'informations, mieux c'est : captures d'écrans, descriptions, bande-annonce, dossier de presse, configurations nécessaires, plateformes disponibles, détails sur l'assistance, etc. Vous marquerez des points en autorisant vos utilisateurs à jouer directement à vos jeux en ligne, a minima à une démo. Vous devriez également travailler un peu votre référencement sur les moteurs de recherche (SEO - _Search Engine Optimization_) pour permettre aux gens de trouver vos jeux plus facilement. -

Vous pouvez également tenir un blog dédié à tout ce qui concerne vos activités de développeur⋅se de jeux. Décrivez votre processus de développement, discutez des bugs les plus affreux que vous rencontrez, partagez des anecdotes marrantes ou ce que vous avez appris, les hauts et les bas d'une vie de développeur de jeu. La publication régulière d'informations à propos de vos jeux aidera à éduquer d'autres personnes, à améliorer votre réputation au sein de la communauté, et améliorera également votre référencement. Une possibilité plus avancée consiste à publier un rapport mensuel qui synthétise vos progrès : il vous permet de voir ce que vous avez accompli au cours du mois passé, ce qu'il reste à faire, et il rappelle aux gens que votre jeu sera bientôt publié. C'est toujours une bonne chose de générer du buzz.

+Vous pouvez également tenir un blog dédié à tout ce qui concerne vos activités de développeur⋅se de jeux. Décrivez votre processus de développement, discutez des bugs les plus affreux que vous rencontrez, partagez des anecdotes marrantes ou ce que vous avez appris, les hauts et les bas d'une vie de développeur de jeu. La publication régulière d'informations à propos de vos jeux aidera à éduquer d'autres personnes, à améliorer votre réputation au sein de la communauté, et améliorera également votre référencement. Une possibilité plus avancée consiste à publier un [rapport mensuel](https://dev.end3r.com/?s=monthly+report) qui synthétise vos progrès : il vous permet de voir ce que vous avez accompli au cours du mois passé, ce qu'il reste à faire, et il rappelle aux gens que votre jeu sera bientôt publié. C'est toujours une bonne chose de générer du buzz. -

Bien que vous puissiez créer votre site web de zéro, il existe également des outils pour rendre le processus plus facile. ManaKeep par exemple est un constructeur de sites internet conçu spécifiquement pour les développeurs de jeux indépendants, et représente un super point de départ pour créer votre site. Presskit() quant à lui peut vous aider à monter une page dédiée à la presse que vous pouvez partager avec les médias.

+Bien que vous puissiez créer votre site web de zéro, il existe également des outils pour rendre le processus plus facile. [ManaKeep](https://manakeep.com) par exemple est un constructeur de sites internet conçu spécifiquement pour les développeurs de jeux indépendants, et représente un super point de départ pour créer votre site. [Presskit()](https://dopresskit.com/) quant à lui peut vous aider à monter une page dédiée à la presse que vous pouvez partager avec les médias. -

Médias sociaux

+## Médias sociaux -

Votre présence sur les médias en ligne est très importante : suivez les bons hashtags, faites-vous des amis, participez à des discussions, aidez d'autres développeuses et développeurs qui en ont besoin. L'honnêteté est essentielle ; soyez authentiques : personne n'aime les communiqués de presse ennuyants ni la publicité insistante. Le moment venu, le bouche-à-oreille généré par votre communauté vous aidera à faire connaître votre jeu.

+Votre présence sur les médias en ligne est très importante : suivez les bons [hashtags](https://twitter.com/hashtag/gamedev), faites-vous des amis, participez à des discussions, aidez d'autres développeuses et développeurs qui en ont besoin. L'honnêteté est essentielle ; soyez authentiques : personne n'aime les communiqués de presse ennuyants ni la publicité insistante. Le moment venu, le bouche-à-oreille généré par votre communauté vous aidera à faire connaître votre jeu. -

Twitter et Facebook sont également à compter parmi les réseaux nécessaires, soyez présent⋅e⋅s sur les bons forums : le plus populaire s'appelle HTML5GameDevs.com. Partagez-y les nouvelles relatives au développement de votre jeu, répondez aux questions : les gens valoriseront ce que vous faites. Rappelez-vous de ne pas vous montrer trop insistant ni lourd quand vous parlez à tout le monde de votre jeu : après tout vous n'êtes pas un panneau publicitaire sur pattes !

+Twitter et Facebook sont également à compter parmi les réseaux nécessaires, soyez présent⋅e⋅s sur les bons forums : le plus populaire s'appelle [HTML5GameDevs.com](https://www.html5gamedevs.com/). Partagez-y les nouvelles relatives au développement de votre jeu, répondez aux questions : les gens valoriseront ce que vous faites. Rappelez-vous de ne pas vous montrer trop insistant ni lourd quand vous parlez à tout le monde de votre jeu : après tout vous n'êtes pas un panneau publicitaire sur pattes ! -

Faites grandir votre groupe de fans en discutant avec eux, en partageant des astuces, en offrant des remises, en remettant des prix lors de compétitions et de challenges, ou plaignez-vous simplement de la météo ou du navigateur plein de bugs avec lequel vous essayez de vous dépatouiller. Soyez cool, généreux⋅se, soyez vous-mêmes et soyez là pour les autres, et vous serez traité⋅e avec respect.

+Faites grandir votre groupe de fans en discutant avec eux, en partageant des astuces, en offrant des remises, en remettant des prix lors de compétitions et de challenges, ou plaignez-vous simplement de la météo ou du navigateur plein de bugs avec lequel vous essayez de vous dépatouiller. Soyez cool, généreux⋅se, soyez vous-mêmes et soyez là pour les autres, et vous serez traité⋅e avec respect. -

Portails de jeux

+## Portails de jeux -

L'utilisation de portails de jeux est principalement liée à la monétisation. Cependant, si vous n'avez pas prévu de vendre des licences d'achat à vos utilisateurs mais que vous prévoyez à la place d'intégrer des publicités ou de passer par des achats dans l'application même, la promotion de votre jeu sur des portails gratuits peut être efficace.

+L'utilisation de portails de jeux est principalement liée à la [monétisation](/fr/docs/Games/Publishing_games/Game_monetization). Cependant, si vous n'avez pas prévu de [vendre des licences](/fr/docs/Games/Publishing_games/Game_monetization#licensing) d'achat à vos utilisateurs mais que vous prévoyez à la place [d'intégrer des publicités](/fr/docs/Games/Publishing_games/Game_monetization#advertisements) ou de passer par des achats dans l'application même, la promotion de votre jeu sur des portails gratuits peut être efficace. -

Plusieurs options s'offrent à vous en termes de publication, grâce à des portails comme CrazyGames.com, GameDistribution.com, Pffg.online, Lagged.com, PacoGames.com ,games4html5.com, HTML5Games.com, BestGamo.com ou encore Crazy Games, et au moins 20 ou 30 autres portails connus, avec ou sans API.

+Plusieurs options s'offrent à vous en termes de publication, grâce à des portails comme [CrazyGames.com](https://crazygames.com), [GameDistribution.com](https://gamedistribution.com/), [Pffg.online](https://www.pffg.online), [Lagged.com](https://lagged.com), [PacoGames.com](https://www.pacogames.com) ,[games4html5.com](https://www.games4html5.com/), [HTML5Games.com](https://html5games.com/), [BestGamo.com](https://www.bestgamo.com) ou encore [Crazy Games](https://www.crazygames4u.com/), et au moins 20 ou 30 autres portails connus, avec ou sans API. -

Les portails qui possèdent leur propre API vous permettront d'autoriser des accès pour vos utilisateurs, de sauvegarder leurs progrès ou de suivre leurs achats au sein de l'application. Vous pouvez également vendre une version complète de votre jeu depuis la version démo sur navigateur, ce qui peut être une excellente tactique au vu de la forte concurrence qui existe ; certains développeurs parviennent même à proposer des versions intégrales sur navigateur. La plupart des portails proposent soit des contrats de partage des revenus de votre jeu, soit vous achèteront des licences non exclusives.

+Les portails qui possèdent leur propre API vous permettront d'autoriser des accès pour vos utilisateurs, de sauvegarder leurs progrès ou de suivre leurs achats au sein de l'application. Vous pouvez également vendre une version complète de votre jeu depuis la version démo sur navigateur, ce qui peut être une excellente tactique au vu de la forte concurrence qui existe ; certains développeurs parviennent même à proposer des versions intégrales sur navigateur. La plupart des portails proposent soit des contrats de partage des revenus de votre jeu, soit vous achèteront des licences non exclusives. -

Les portails gratuits quant à eux vous amènent du trafic, mais seuls les meilleurs sont assez populaires pour vous permettre de générer des revenus grâce à la publicité ou aux achats in-app. D'un autre côté, ils représentent un excellent outil pour donner de la visibilité à vos jeux auprès d'une audience plus large, surtout quand vous n'avez pas de budget et peu de temps.

+Les portails gratuits quant à eux vous amènent du trafic, mais seuls les meilleurs sont assez populaires pour vous permettre de générer des revenus grâce à la publicité ou aux achats in-app. D'un autre côté, ils représentent un excellent outil pour donner de la visibilité à vos jeux auprès d'une audience plus large, surtout quand vous n'avez pas de budget et peu de temps. -

Presse

+## Presse -

Vous pouvez essayer de contacter la presse spécialisée à propos de votre jeu ; gardez toutefois à l'esprit que les journalistes reçoivent déjà des tonnes de demandes chaque jour qui passe : restez humble et patient si vous ne recevez pas de réponse tout de suite, et restez poli⋅e quand vous leur parlez. Assurez-vous au préalable qu'ils traitent bien du genre de jeu ou de plateformes dont vous souhaitez leur parler : vous éviterez ainsi de leur envoyer des demandes qui ne relèvent pas de leur domaine d'intérêt. Du moment que vous gardez une approche honnête et que votre jeu est bon, vous aurez de bien meilleures chances de réussite.

+Vous pouvez essayer de contacter la [presse](https://indiegames.com/) spécialisée à propos de votre jeu ; gardez toutefois à l'esprit que les journalistes reçoivent déjà des tonnes de demandes chaque jour qui passe : restez humble et patient si vous ne recevez pas de réponse tout de suite, et restez poli⋅e quand vous leur parlez. Assurez-vous au préalable qu'ils traitent bien du genre de jeu ou de plateformes dont vous souhaitez leur parler : vous éviterez ainsi de leur envoyer des demandes qui ne relèvent pas de leur domaine d'intérêt. Du moment que vous gardez une approche honnête et que votre jeu est bon, vous aurez de bien meilleures chances de réussite. -

Si vous souhaitez en savoir plus sur la déontologie et la façon de s'adresser à la presse, vous devriez absolument consulter ces deux ressources : un guide génial traduit par Game Sphere intitulé "Comment contacter la presse" (en français) (tiré du guide "How To Contact Press" en anglais), et des listes de YouTubers et de sites (y compris français) à contacter que PixelProspector propose.

+Si vous souhaitez en savoir plus sur la déontologie et la façon de s'adresser à la presse, vous devriez absolument consulter ces deux ressources : un guide génial traduit par Game Sphere intitulé ["Comment contacter la presse"](http://www.game-sphere.fr/comment-contacter-la-presse/) (en français) (tiré du guide ["How To Contact Press"](https://app.box.com/s/p0ft5zdolpi0ydkrykab) en anglais), et des [listes de YouTubers et de sites](https://pixelprospector.com/videogamejournaliser.html) (y compris français) à contacter que PixelProspector propose. -

Tutoriels

+## Tutoriels -

C'est une bonne idée de partager vos connaissances avec d'autres dévs : après tout, vous avez sans doute vous aussi appris une chose ou l'autre grâce à des articles en ligne, donc c'est une façon de prendre le temps à votre tour de diffuser des connaissances. Discuter ou écrire à propos de quelque chose que vous avez accompli, ou de problèmes que vous avez réussi à résoudre intéresse les gens. En plus vous pouvez utiliser votre propre jeu comme exemple : exemple, si vous publiez un tutoriel dans lequel vous montrez comment faire quelque chose que vous avez déjà implémenté. De cette façon, tout le monde est gagnant : votre audience apprend de nouvelles choses, votre jeu gagne en popularité, et si vous avez de la chance vous pouvez même être payés pour écrire un tutoriel s'il est assez bon.

+C'est une bonne idée de partager vos connaissances avec d'autres dévs : après tout, vous avez sans doute vous aussi appris une chose ou l'autre grâce à des articles en ligne, donc c'est une façon de prendre le temps à votre tour de diffuser des connaissances. Discuter ou écrire à propos de quelque chose que vous avez accompli, ou de problèmes que vous avez réussi à résoudre intéresse les gens. En plus vous pouvez utiliser votre propre jeu comme exemple : exemple, si vous publiez un tutoriel dans lequel vous montrez [comment faire quelque chose que vous avez déjà implémenté](/fr/docs/Games/Techniques/Controls_Gamepad_API). De cette façon, tout le monde est gagnant : votre audience apprend de nouvelles choses, votre jeu gagne en popularité, et si vous avez de la chance vous pouvez même être payés pour écrire un tutoriel s'il est assez bon. -

Il existe des portails comme Tuts+ Game Development qui seront plus qu'heureux de recevoir vos contributions ; ils rémunèrent le contenu, mais toutes les idées d'articles ne sont pas acceptées. Quand vous écrivez un tutoriel, assurez-vous d'apporter quelque chose que votre audience valorise. Elle veut apprendre quelque chose : offrez votre expertise et utilisez votre jeu comme cas d'étude. Concentrez-vous sur un aspect donné, et essayez d'expliquer de façon exhaustive et en détail. Enfin, pensez à poursuivre la conversation dans les commentaires si les gens ont des questions.

+Il existe des portails comme [Tuts+ Game Development](https://gamedevelopment.tutsplus.com/) qui seront plus qu'heureux de recevoir vos contributions ; ils rémunèrent le contenu, mais toutes les idées d'articles ne sont pas acceptées. Quand vous écrivez un tutoriel, assurez-vous d'apporter quelque chose que votre audience valorise. Elle veut apprendre quelque chose : offrez votre expertise et utilisez votre jeu comme cas d'étude. Concentrez-vous sur un aspect donné, et essayez d'expliquer de façon exhaustive et en détail. Enfin, pensez à poursuivre la conversation dans les commentaires si les gens ont des questions. -

Si les portails que vous contactez ne sont pas intéressés par votre contenu parce que vous n'avez pas d'expérience, vous pouvez toujours écrire des tutoriels et les publier sur votre propre blog d'abord. C'est la façon la plus simple de développer vos talents d'écrivain par vous-même.

+Si les portails que vous contactez ne sont pas intéressés par votre contenu parce que vous n'avez pas d'expérience, vous pouvez toujours écrire des tutoriels et les publier sur [votre propre blog](#website_and_blog) d'abord. C'est la façon la plus simple de développer vos talents d'écrivain par vous-même. -

YouTubeurs et YouTubeuses

+## YouTubeurs et YouTubeuses -

C'est une tendance croissante ; ne sous-estimez pas l'influence des YouTubeurs et YouTubeuses qui jouent à votre jeu, en parlent et partagent leur expérience en direct quand il s'agit de donner de la visibilité à votre jeu. Restez réalistes toutefois : ne pensez pas que ça suffise à faire décoller vos téléchargements ou le nombre de visites, et surtout soyez prêt⋅e⋅s à devoir gérer des critiques aussi bien négatives que positives.

+C'est une tendance croissante ; ne sous-estimez pas l'influence des YouTubeurs et YouTubeuses qui jouent à votre jeu, en parlent et partagent leur expérience en direct quand il s'agit de donner de la visibilité à votre jeu. Restez réalistes toutefois : ne pensez pas que ça suffise à faire décoller vos téléchargements ou le nombre de visites, et surtout soyez prêt⋅e⋅s à devoir gérer des critiques aussi bien négatives que positives. -

Il y a deux façons d'attirer l'attention des YouTubeurs : la première c'est de les contacter directement et de leur envoyer un lien vers votre jeu, par mail ou dans un message privé. La seconde s'inscrit dans la durée : si vous êtes suffisamment connu⋅e, les YouTubeurs vous contacteront eux-mêmes pour vous demander un lien ou un exécutable de votre jeu. Cette méga Liste de YouTubeurs est un très bon point de départ. Vous pouvez également trouver des influenceurs YouTube et Twitch.tv sur gameInfluencer.com pour aider à faire la promotion de votre jeu.

+Il y a deux façons d'attirer l'attention des YouTubeurs : la première c'est de les contacter directement et de leur envoyer un lien vers votre jeu, par mail ou dans un message privé. La seconde s'inscrit dans la durée : si vous êtes suffisamment connu⋅e, les YouTubeurs vous contacteront eux-mêmes pour vous demander un lien ou un exécutable de votre jeu. Cette [méga Liste de YouTubeurs](https://docs.google.com/spreadsheets/d/1MVrNBLVkL-VzKe4pFHHVx0bfCdInB3G2FVJbc9V4CUk/edit#gid=0) est un très bon point de départ. Vous pouvez également trouver des influenceurs YouTube et Twitch.tv sur [gameInfluencer.com](https://gameinfluencer.com/) pour aider à faire la promotion de votre jeu. -

Évènements

+## Évènements -

Si vous avez déjà testé toutes les options listées ci-dessus, vous pouvez encore trouver de nouvelles façons, plus créatives, de faire la promotion de votre jeu : les événements en constituent un bon exemple. Participer à des événements, qu'ils soient locaux ou plus globaux, vous offre une occasion de rencontrer vos fans en vrai, ainsi que d'autres membres de la communauté du développement. Ils passent du temps pour vous voir, réjouissez-vous !

+Si vous avez déjà testé toutes les options listées ci-dessus, vous pouvez encore trouver de nouvelles façons, plus créatives, de faire la promotion de votre jeu : les événements en constituent un bon exemple. Participer à des événements, qu'ils soient locaux ou plus globaux, vous offre une occasion de rencontrer vos fans en vrai, ainsi que d'autres membres de la communauté du développement. Ils passent du temps pour vous voir, réjouissez-vous ! -

Conférences

+### Conférences -

Il existe de nombreuses conférences où vous pouvez prendre la parole pour décrire des difficultés techniques que vous avez résolues, ou comment vous avez implémenté telle ou telle API. Encore une fois, utilisez-y vos jeux comme cas d'étude. Il est important de se concentrer sur la dimension "connaissances" et de réduire la dimension "marketing" : les développeurs sont assez sensibles à ces aspects et vous risquer d'irritier votre audience si vous vous contentez d'essayer de leur vendre quelque chose.

+Il existe de nombreuses conférences où vous pouvez prendre la parole pour décrire des difficultés techniques que vous avez résolues, ou comment vous avez implémenté telle ou telle API. Encore une fois, utilisez-y vos jeux comme cas d'étude. Il est important de se concentrer sur la dimension "connaissances" et de réduire la dimension "marketing" : les développeurs sont assez sensibles à ces aspects et vous risquer d'irritier votre audience si vous vous contentez d'essayer de leur vendre quelque chose. -

Salons et foires

+### Salons et foires -

Les foires, salons ou expos sont une autre possibilité en matière d'événementiel : dans ce genre de rendez-vous vous pouvez occuper un stand parmi d'autres développeurs et faire la promotion de votre jeu à tous les participants qui passent devant. Si vous le faites, essayez de vous montrer unique et original⋅e, de façon à vous distinguer de la foule. Faites-le de la bonne manière et tout le monde parlera de vous et de votre jeu. Le fait d'avoir un stand vous donne la possibilité d'interagir avec vos fans directement : au-delà de la dimension promotionnelle vous pouvez également tester de nouvelles versions de votre jeu auprès de personnes ordinaires et de corriger n'importe quel bug (ou intégrer n'importe quelle idée) qu'ils relèvent. Vous ne pouvez pas deviner ce qui peut se produire lorsque des gens jouent à votre jeu, ou quelles erreurs évidentes vous avez pu louper pendant que vous passiez des heures à l'affiner.

+Les foires, salons ou expos sont une autre possibilité en matière d'événementiel : dans ce genre de rendez-vous vous pouvez occuper un stand parmi d'autres développeurs et faire la promotion de votre jeu à tous les participants qui passent devant. Si vous le faites, essayez de vous montrer unique et original⋅e, de façon à vous distinguer de la foule. Faites-le de la bonne manière et tout le monde parlera de vous et de votre jeu. Le fait d'avoir un stand vous donne la possibilité d'interagir avec vos fans directement : au-delà de la dimension promotionnelle vous pouvez également tester de nouvelles versions de votre jeu auprès de personnes ordinaires et de corriger n'importe quel bug (ou intégrer n'importe quelle idée) qu'ils relèvent. Vous ne pouvez pas deviner ce qui peut se produire lorsque des gens jouent à votre jeu, ou quelles erreurs évidentes vous avez pu louper pendant que vous passiez des heures à l'affiner. -

Codes promo

+## Codes promo -

Si vous vendez votre jeu, intégrez-y la possibilité d'appliquer des codes promotionnels pour jouer gratuitement à votre jeu (ou au moins à une démo ou à une version limitée dans le temps), puis envoyez ce code à des journalistes, YouTubeuses et YouTubeurs, partagez-les comme récompenses dans un tournoi, etc. Si vous touchez les bonnes personnes cela vous fera une publicité gratuite auprès de milliers de joueurs ; si vous êtes chanceux vous pourrez même obtenir un gain d'intérêt pour votre jeu qui dépassera tout le reste.

+Si vous vendez votre jeu, intégrez-y la possibilité d'appliquer des codes promotionnels pour jouer gratuitement à votre jeu (ou au moins à une démo ou à une version limitée dans le temps), puis envoyez ce code à des journalistes, YouTubeuses et YouTubeurs, partagez-les comme récompenses dans un tournoi, etc. Si vous touchez les bonnes personnes cela vous fera une publicité gratuite auprès de milliers de joueurs ; si vous êtes chanceux vous pourrez même obtenir un gain d'intérêt pour votre jeu qui dépassera tout le reste. -

Déveloper votre communauté

+## Déveloper votre communauté -

Vous pouvez aider votre communauté à grandir, et faire votre propre promotion ainsi que celle de vos jeux en même temps. En envoyant des newsletters hebdomadaires et en organisant des tournois en ligne ou des événements locaux vous montrerez aux autres que vous êtes passionné⋅e par ce que vous faites et qu'ils peuvent compter sur vous. Dès lors, si vous avez besoin d'un coup de main vous savez qu'ils seront là pour vous.

+Vous pouvez aider votre communauté à grandir, et faire votre propre promotion ainsi que celle de vos jeux en même temps. En envoyant des [newsletters hebdomadaires](https://gamedevjsweekly.com/) et en organisant des [tournois en ligne](https://js13kgames.com/) ou des [événements locaux](https://gamedevjs.com/) vous montrerez aux autres que vous êtes passionné⋅e par ce que vous faites et qu'ils peuvent compter sur vous. Dès lors, si vous avez besoin d'un coup de main vous savez qu'ils seront là pour vous. -

Résumé

+## Résumé -

Toutes les façons de faire la promotion de votre jeu sont bonnes. Vous avez tout un tas d'options qui vous sont offertes, et la plupart d'entre elles sont gratuites : tout ce qui compte c'est votre enthousiasme et le temps dont vous disposez ! Parfois vous devrez passer plus de temps à faire la promotion d'un jeu qu'à le développer. Mais rappelez-vous qu'il ne sert à rien d'avoir le meilleur jeu au monde… si personne ne sait qu'il existe!

+Toutes les façons de faire la promotion de votre jeu sont bonnes. Vous avez tout un tas d'options qui vous sont offertes, et la plupart d'entre elles sont gratuites : tout ce qui compte c'est votre enthousiasme et le temps dont vous disposez ! Parfois vous devrez passer plus de temps à faire la promotion d'un jeu qu'à le développer. Mais rappelez-vous qu'il ne sert à rien d'avoir le meilleur jeu au monde… si personne ne sait qu'il existe! -

Passons maintenant à la monétisation de votre jeu, et comment vous pouvez gagner votre vie avec.

+Passons maintenant à la [monétisation](/fr/docs/Games/Publishing_games/Game_monetization) de votre jeu, et comment vous pouvez gagner votre vie avec. diff --git a/files/fr/games/publishing_games/index.md b/files/fr/games/publishing_games/index.md index fc12eab7ad..d95350c1e0 100644 --- a/files/fr/games/publishing_games/index.md +++ b/files/fr/games/publishing_games/index.md @@ -12,18 +12,18 @@ tags: translation_of: Games/Publishing_games original_slug: Jeux/Publier_jeux --- -
{{GamesSidebar}}
+{{GamesSidebar}} -

Les jeux en HTML5 ont un avantage certain face à ceux écrits dans un langage natif en terme de publication et de distribution — vous avez en effet la liberté de distribuer, promouvoir et monétiser votre jeu sur Internet au lieu de voir chaque version de votre jeu emprisonnée au sein d'un store propriétaire. En étant sur le web, vous bénéficiez automatiquement d'un jeu multi plate-formes. Cette série d'articles vous présente les options dont vous disposez afin de publier et de distribuer votre jeu et de gagner quelque chose en attendant de faire de votre jeu un incontournable.

+Les jeux en HTML5 ont un avantage certain face à ceux écrits dans un langage natif en terme de publication et de distribution — vous avez en effet la liberté de distribuer, promouvoir et monétiser votre jeu sur Internet au lieu de voir chaque version de votre jeu emprisonnée au sein d'un store propriétaire. En étant sur le web, vous bénéficiez automatiquement d'un jeu multi plate-formes. Cette série d'articles vous présente les options dont vous disposez afin de publier et de distribuer votre jeu et de gagner quelque chose en attendant de faire de votre jeu un incontournable. -

Distribuer votre jeu

+## Distribuer votre jeu -

Vous avez déjà suivi un tutoriel ou deux et vous avez créé un jeu en HTML5 ? Génial ! L'article Distribuer votre jeu vous indique tout ce que vous devez savoir sur les moyens de partager votre toute dernière création — y compris comment vous pouvez l'héberger en ligne, le proposer sur les boutiques en ligne ouvertes, et le soumettre aux stores propriétaires comme Google Play ou Apple Store.

+Vous avez déjà suivi un [tutoriel](/fr/docs/Games/Workflows/2D_Breakout_game_pure_JavaScript) ou [deux](/fr/docs/Games/Workflows/2D_Breakout_game_Phaser) et vous avez créé un jeu en HTML5 ? Génial ! L'article [Distribuer votre jeu](/fr/docs/Games/Publishing_games/Game_distribution) vous indique tout ce que vous devez savoir sur les moyens de partager votre toute dernière création — y compris comment vous pouvez l'héberger en ligne, le proposer sur les boutiques en ligne ouvertes, et le soumettre aux stores propriétaires comme Google Play ou Apple Store. -

Promouvoir votre jeu

+## Promouvoir votre jeu -

Développer et finaliser un jeu ne suffit pas. Vous devez informer le monde que vous avez réalisé quelque chose d'intéressant, avec lequel les gens auront plaisir à jouer. Il y a de nombreux moyens de Promouvoir votre jeu — beaucoup d'entre-eux sont gratuits — et donc, même si vous avez du mal à gagner votre vie en tant que développeur indépendant avec un budget nul, vous disposez malgré tout de nombreux moyens d'informer les gens de votre nouveau super jeu. Faire la promotion de votre jeu vous aidera beaucoup notamment si vous souhaitez le monétiser par la suite, il est donc important de le faire correctement.

+Développer et finaliser un jeu ne suffit pas. Vous devez informer le monde que vous avez réalisé quelque chose d'intéressant, avec lequel les gens auront plaisir à jouer. Il y a de nombreux moyens de [Promouvoir votre jeu](/fr/docs/Games/Publishing_games/Game_promotion) — beaucoup d'entre-eux sont gratuits — et donc, même si vous avez du mal à gagner votre vie en tant que développeur indépendant avec un budget nul, vous disposez malgré tout de nombreux moyens d'informer les gens de votre nouveau super jeu. Faire la promotion de votre jeu vous aidera beaucoup notamment si vous souhaitez le monétiser par la suite, il est donc important de le faire correctement. -

Monétiser votre jeu

+## Monétiser votre jeu -

Après avoir passé beaucoup de temps à coder, publier et promouvoir votre jeu, vous penserez sans doute à un moyen de rémunérer votre travail. Monétiser son jeu est essentiel à quiconque considère que le travail qu'il a réalisé pour créer son jeu est fait sérieusement par un développeur de jeux indépendant désormais capable de vivre de ses créations. Découvrez quelles sont vos options. La technologie est suffisamment avancée, la question est de savoir quelle approche sera la meilleure pour vous.

+Après avoir passé beaucoup de temps à coder, publier et promouvoir votre jeu, vous penserez sans doute à un moyen de rémunérer votre travail. [Monétiser son jeu ](/fr/docs/Games/Publishing_games/Game_monetization)est essentiel à quiconque considère que le travail qu'il a réalisé pour créer son jeu est fait sérieusement par un développeur de jeux indépendant désormais capable de vivre de ses créations. Découvrez quelles sont vos options. La technologie est suffisamment avancée, la question est de savoir quelle approche sera la meilleure pour vous. diff --git a/files/fr/games/techniques/2d_collision_detection/index.md b/files/fr/games/techniques/2d_collision_detection/index.md index d8f6c3687c..2cdee32e6a 100644 --- a/files/fr/games/techniques/2d_collision_detection/index.md +++ b/files/fr/games/techniques/2d_collision_detection/index.md @@ -9,86 +9,84 @@ tags: - Jeux translation_of: Games/Techniques/2D_collision_detection --- -
{{GamesSidebar}}

  {{IncludeSubnav("/fr/docs/Jeux")}}  

+{{GamesSidebar}} -

Les algorithmes de détection de collisions dans les jeux en 2 dimensions dépendent de la forme des objets à détecter (par exemple : rectangle contre rectangle, cercle contre rectangle, cercle contre cercle…). Habituellement, il est préférable d’utiliser une forme générique appelée masque de collision (« hitbox ») qui couvrira l’entité. Ainsi, les collisions ne seront pas assurées au pixel près mais cela permettra d’avoir de bonnes performances pour un grand nombre d’entités à tester.

+{{IncludeSubnav("/fr/docs/Jeux")}} -

Cet article donne un résumé des techniques les plus utilisées pour la détection des collisions dans les jeux en deux dimensions.

+Les algorithmes de détection de collisions dans les jeux en 2 dimensions dépendent de la forme des objets à détecter (par exemple : rectangle contre rectangle, cercle contre rectangle, cercle contre cercle…). Habituellement, il est préférable d’utiliser une forme générique appelée masque de collision (« *hitbox* ») qui couvrira l’entité. Ainsi, les collisions ne seront pas assurées au pixel près mais cela permettra d’avoir de bonnes performances pour un grand nombre d’entités à tester. -

Boîtes englobantes alignées sur les axes

+Cet article donne un résumé des techniques les plus utilisées pour la détection des collisions dans les jeux en deux dimensions. -

Une des formes les plus simples de détection de collision est une collision entre deux rectangles alignés sur les mêmes axes (c’est-à-dire sans rotation). L’algorithme suivant fonctionne en vérifiant qu’il n’y a pas d’espace vide entre les 4 côtés du rectangle. Si l’ensemble du rectangle est entouré de vide, on en conclut qu’il n’y a pas de collision.

+## Boîtes englobantes alignées sur les axes -
var rect1 = {x: 5, y: 5, width: 50, height: 50}
+Une des formes les plus simples de détection de collision est une collision entre deux rectangles alignés sur les mêmes axes (c’est-à-dire sans rotation). L’algorithme suivant fonctionne en vérifiant qu’il n’y a pas d’espace vide entre les 4 côtés du rectangle. Si l’ensemble du rectangle est entouré de vide, on en conclut qu’il n’y a pas de collision.
+
+```js
+var rect1 = {x: 5, y: 5, width: 50, height: 50}
 var rect2 = {x: 20, y: 10, width: 10, height: 10}
 
-if (rect1.x < rect2.x + rect2.width &&
-   rect1.x + rect1.width > rect2.x &&
-   rect1.y < rect2.y + rect2.height &&
-   rect1.height + rect1.y > rect2.y) {
+if (rect1.x < rect2.x + rect2.width &&
+   rect1.x + rect1.width > rect2.x &&
+   rect1.y < rect2.y + rect2.height &&
+   rect1.height + rect1.y > rect2.y) {
     // collision détectée !
 }
 
-// remplissage des valeurs =>
+// remplissage des valeurs =>
 
-if (5 < 30 &&
-    55 > 20 &&
-    5 < 20 &&
-    55 > 10) {
+if (5 < 30 &&
+    55 > 20 &&
+    5 < 20 &&
+    55 > 10) {
     // collision détectée !
-}
+} +``` -
-

Note : vous pouvez tester un exemple interactif de cet algorithme sur jsFiddle, pour mieux comprendre le fonctionnement de ce code.

-
+> **Note :** vous pouvez tester un [exemple interactif de cet algorithme](http://jsfiddle.net/knam8/) sur jsFiddle, pour mieux comprendre le fonctionnement de ce code. -

Collision de cercles

+## Collision de cercles -

Une autre forme simple de détection de collision est la collision entre deux cercles. Cet algorithme fonctionne en prenant le point central de deux cercles puis il vérifie que la distance entre ces deux points est inférieure à la somme des rayons de ces deux cercles.

+Une autre forme simple de détection de collision est la collision entre deux cercles. Cet algorithme fonctionne en prenant le point central de deux cercles puis il vérifie que la distance entre ces deux points est inférieure à la somme des rayons de ces deux cercles. -
var circle1 = {radius: 20, x: 5, y: 5};
+```js
+var circle1 = {radius: 20, x: 5, y: 5};
 var circle2 = {radius: 12, x: 10, y: 5};
 
 var dx = circle1.x - circle2.x;
 var dy = circle1.y - circle2.y;
 var distance = Math.sqrt(dx * dx + dy * dy);
 
-if (distance < circle1.radius + circle2.radius) {
+if (distance < circle1.radius + circle2.radius) {
     // collision détectée !
-}
+} +``` -
-

Note : vous pouvez tester un exemple interactif de cet algorithme sur jsFiddle, pour mieux comprendre le fonctionnement de ce code.

-
+> **Note :** vous pouvez tester un [exemple interactif de cet algorithme](http://jsfiddle.net/gQ3hD/2/) sur jsFiddle, pour mieux comprendre le fonctionnement de ce code. -

Théorème des axes séparateurs

+## Théorème des axes séparateurs -

Cet algorithme permet de détecter une collision entre deux polygones convexes. Cet algorithme est plus compliqué à implémenter que les deux précédents mais il est bien plus puissant. La complexité d’un tel algorithme induit de prendre en considération l’optimisation des performances (voir section suivante).

+Cet algorithme permet de détecter une collision entre deux polygones _convexes_. Cet algorithme est plus compliqué à implémenter que les deux précédents mais il est bien plus puissant. La complexité d’un tel algorithme induit de prendre en considération l’optimisation des performances (voir section suivante). -

L’implémentation de cet algorithme est hors de propos sur cette page, nous vous conseillons les articles suivants :

+L’implémentation de cet algorithme est hors de propos sur cette page, nous vous conseillons les articles suivants : -
    -
  1. Separating Axis Theorem (SAT) explanation ;
  2. -
  3. (Anglais) Collision detection and response (en) ;
  4. -
  5. Collision detection Using the Separating Axis Theorem (en) ;
  6. -
  7. SAT (Separating Axis Theorem) (en) ;
  8. -
  9. Separation of Axis Theorem (SAT) for Collision Detection (en).
  10. -
+1. [Separating Axis Theorem (SAT) explanation](http://www.sevenson.com.au/actionscript/sat/) ; +2. [(Anglais) Collision detection and response (en)](http://www.metanetsoftware.com/technique/tutorialA.html) ; +3. [Collision detection Using the Separating Axis Theorem (en)](http://gamedevelopment.tutsplus.com/tutorials/collision-detection-using-the-separating-axis-theorem--gamedev-169) ; +4. [SAT (Separating Axis Theorem) (en)](http://www.codezealot.org/archives/55) ; +5. [Separation of Axis Theorem (SAT) for Collision Detection (en)](http://rocketmandevelopment.com/blog/separation-of-axis-theorem-for-collision-detection/). -

Performances

+## Performances -

Alors que la plupart de ces algorithmes de détection de collision sont très simples à calculer, cela peut être une perte de ressources de tester chaque entité avec les autres entités. Habituellement les jeux découpent les collisions en deux phases : large (« broad ») et étroite (« narrow »).

+Alors que la plupart de ces algorithmes de détection de collision sont très simples à calculer, cela peut être une perte de ressources de tester _chaque entité_ avec les autres entités. Habituellement les jeux découpent les collisions en deux phases : large (« *broad* ») et étroite (« *narrow* »). -

Phase large

+### Phase large -

La phase large sert à récupérer une liste d’entités qui pourraient entrer en collision. Cela peut être facilement implémenté avec une structure de données spaciale qui vous donnera une meilleure idée d’où est situé chaque entité et de ce qui existe autour d’elle. Par exemple :

+La phase large sert à récupérer une liste d’entités qui _pourraient_ entrer en collision. Cela peut être facilement implémenté avec une structure de données spaciale qui vous donnera une meilleure idée d’où est situé chaque entité et de ce qui existe autour d’elle. Par exemple : - +- Les _Quad Trees_ (exemple : [JavaScript QuadTree Implementation (en)](http://blogs.adobe.com/digitalmedia/2011/03/javascript-quadtree-implementation/)) ; +- Les _R-Trees_ (voir [R-Tree sur Wikipedia.org (en)](http://en.wikipedia.org/wiki/R-tree)) ; +- Une « *hashmap* ». -

Phase étroite

+### Phase étroite -

Quand vous avez une liste réduite d’entités à vérifier, il convient d’utiliser un algorithme de phase étroite tels que ceux décrits ci-dessus afin de détecter s’il y a bien une collision entre deux objets ou non.

+Quand vous avez une liste réduite d’entités à vérifier, il convient d’utiliser un algorithme de phase étroite tels que ceux décrits ci-dessus afin de détecter s’il y a bien une collision entre deux objets ou non. diff --git a/files/fr/games/techniques/3d_on_the_web/basic_theory/index.md b/files/fr/games/techniques/3d_on_the_web/basic_theory/index.md index 4243e68e9a..9c1447274b 100644 --- a/files/fr/games/techniques/3d_on_the_web/basic_theory/index.md +++ b/files/fr/games/techniques/3d_on_the_web/basic_theory/index.md @@ -11,116 +11,107 @@ tags: - vertex translation_of: Games/Techniques/3D_on_the_web/Basic_theory --- -
{{GamesSidebar}}

  {{IncludeSubnav("/fr/docs/Jeux")}}

+{{GamesSidebar}} -

Cet article explique l'ensemble des bases théoriques utiles à connaître lorsque vous commencez à travailler avec la 3D.

+{{IncludeSubnav("/fr/docs/Jeux")}} -

Système de coordonnées

+Cet article explique l'ensemble des bases théoriques utiles à connaître lorsque vous commencez à travailler avec la 3D. -

La 3D est principalement basée sur la représentation de formes 3D dans l'espace, avec un système de coordonnées utilisé pour calculer leurs positions.

+## Système de coordonnées -

+La 3D est principalement basée sur la représentation de formes 3D dans l'espace, avec un système de coordonnées utilisé pour calculer leurs positions. -

WebGL utilise le système de coordonnées de droite — l'axe x pointe vers la droite, l'axe y vers le haut et l'axe z dans la profondeur, comme shématisé ci-dessus.

+![](mdn-games-3d-coordinate-system.png) -

Objets

+WebGL utilise le système de coordonnées de droite — l'axe x pointe vers la droite, l'axe y vers le haut et l'axe z dans la profondeur, comme shématisé ci-dessus. -

Differents types d'objets sont construits en utilisant les sommets. Un Sommet (Vertex) est un point dans l'espace ayant sa propre position 3D dans le système de coordonnées et souvent quelques informations supplémentaires qui le définissent. Chaque sommet est décrit par ces attributs :

+## Objets - +Differents types d'objets sont construits en utilisant les sommets. Un Sommet (Vertex) est un point dans l'espace ayant sa propre position 3D dans le système de coordonnées et souvent quelques informations supplémentaires qui le définissent. Chaque sommet est décrit par ces attributs : -

Vous pouvez faire de la géométrie en utilisant ces informations — voici l'exemple d'un cube :

+- **Position** : L'identifie dans un espace 3D (`x`, `y`, `z`). +- **Color** \*(Couleur)**\* **: Prend une valeur RVBA (R, V et B pour le Rouge, Vert et Bleu, A (alpha) pour l'opacité — toutes les valeurs comprises entre 0.0 et 1.0) +- **Normal :**  Une manière de décrire la direction à laquelle fait face le sommet. +- **Texture** : Une image 2D que le sommet peut utiliser pour décorer la surface dont il fait partie à la place d'une simple couleur. -

Cube

+Vous pouvez faire de la géométrie en utilisant ces informations — voici l'exemple d'un cube : -

Une face de la forme donnée est un plan entre des sommets. Par exemple, un cube a 8 différents sommets (points dans l'espace) et 6 différentes faces, chacune construite à partir de 4 sommets. Une norme définit de quelle manière la face est orientée. De plus, en connectant les points, on crée les arêtes du cube.La géométrie est basée sur les sommets et les faces, où le matériau est une texture, utilisant une couleur ou une image. Si l'on connecte la géométrie avec le matériau, on obtient une maille (mesh)

+![Cube](mdn-games-3d-cube.png) -

Rendu des tuyaux (pipeline)

+Une face de la forme donnée est un plan entre des sommets. Par exemple, un cube a 8 différents sommets (points dans l'espace) et 6 différentes faces, chacune construite à partir de 4 sommets. Une norme définit de quelle manière la face est orientée. De plus, en connectant les points, on crée les arêtes du cube.La géométrie est basée sur les sommets et les faces, où le matériau est une texture, utilisant une couleur ou une image. Si l'on connecte la géométrie avec le matériau, on obtient une maille (mesh) -

Le rendu des tuyaux est un procédé avec lequel les images sont préparées et affichées sur l'écran. Les graphismes utilisant les rendus de tuyaux prennent des objets 3D construits à partir de primitives décrites à l'aide de sommets, les transforment, calculent les fragments, et les affichent sur un écran 2D en tant que pixels.

+## Rendu des tuyaux (_pipeline_) -

Rendering pipeline

+Le rendu des tuyaux est un procédé avec lequel les images sont préparées et affichées sur l'écran. Les graphismes utilisant les rendus de tuyaux prennent des objets 3D construits à partir de primitives décrites à l'aide de sommets, les transforment, calculent les fragments, et les affichent sur un écran 2D en tant que pixels. -

Terminologie utilisée dans le diagramme ci-dessus :

+![Rendering pipeline](mdn-games-3d-rendering-pipeline.png) - +Terminologie utilisée dans le diagramme ci-dessus : -

Le traitement des sommets et des fragments est programmable — vous pouvez écrire vos propres shaders qui manipulent le rendu.

+- Une **Primitive** : Une source pour le tuyau — construite à partir de sommets et peut être un triangle, un point ou une ligne. +- Un **Fragment** : Une projection 3D d'un pixel, qui a les mêmes attributs qu'un pixel. +- Un **Pixel** : Un point sur l'écran arrangé sur une grille 2D, qui prend une couleur RVBA. -

Traitement de sommet

+Le traitement des sommets et des fragments est programmable — vous pouvez [écrire vos propres shaders](/fr/docs/Games/Techniques/3D_on_the_web/GLSL_Shaders) qui manipulent le rendu. -

Le traitement de sommet consiste à combiner les informations à propos de chaque sommet dans des primitives et de définir leurs coordonnées dans l'espace 3D pour le spectateur. C'est comme prendre une photo de la scène donnée que vous avez préparée — vous devez placer les objets en premier, configurer la caméra, et prendre la photo.

+## Traitement de sommet -

+Le traitement de sommet consiste à combiner les informations à propos de chaque sommet dans des primitives et de définir leurs coordonnées dans l'espace 3D pour le spectateur. C'est comme prendre une photo de la scène donnée que vous avez préparée — vous devez placer les objets en premier, configurer la caméra, et prendre la photo. -

Il y a 4 étapes dans ce traitement : la première implique d'arranger les objets dans le monde, elle est appelée la transformation du modèle. Ensuite, il y a la transformation de la vue, qui prend soin de positionner et de régler l'orientation de la caméra dans l'espace 3D. La caméra a 3 paramètres — position, direction et orientation — qui doivent être définis pour la scène nouvellement créée.

+![](mdn-games-3d-vertex-processing.png) -

Camera

+Il y a 4 étapes dans ce traitement : la première implique d'arranger les objets dans le monde, elle est appelée la **transformation du modèle**. Ensuite, il y a la **transformation de la vue**, qui prend soin de positionner et de régler l'orientation de la caméra dans l'espace 3D. La caméra a 3 paramètres — position, direction et orientation — qui doivent être définis pour la scène nouvellement créée. -

La transformation de la projection (aussi appelée transformation de la perspective) définit ensuite les réglages de la caméra. Elle définit ce qui peut être vu par la caméra — la configuration inclut le champ de vision, le ratio d'aspect, et éventuellement les plans proches et éloignés. Lisez le paragraphe sur la Caméra dans l'article de Three.js pour en savoir plus.

+![Camera](mdn-games-3d-camera.png) -

+La **transformation de la projection** (aussi appelée transformation de la perspective) définit ensuite les réglages de la caméra. Elle définit ce qui peut être vu par la caméra — la configuration inclut le champ de vision, le ratio d'aspect, et éventuellement les plans proches et éloignés. Lisez le [paragraphe sur la Caméra](/fr/docs/Games/Techniques/3D_on_the_web/Building_up_a_basic_demo_with_Three.js#Camera) dans l'article de Three.js pour en savoir plus. -

La dernière étape est la transformation de la fenêtre, qui implique la production de tout pour la prochaine étape dans le rendu du tuyau.

+![](mdn-games-3d-camera-settings.png) -

Rastérisation

+La dernière étape est la transformation de la fenêtre, qui implique la production de tout pour la prochaine étape dans le rendu du tuyau. -

La rastérisation convertit les primitives (des sommets reliés) à un ensemble de fragments.

+## Rastérisation -

+La rastérisation convertit les primitives (des sommets reliés) à un ensemble de fragments. -

Ces fragments — qui sont des projections 3D de pixels 2D — sont alignés sur la grille de pixels, donc éventuellement ils peuvent être affichés comme des pixels sur un écran 2D durant la phase de fusion du résultat.

+![](mdn-games-3d-rasterization.png) -

Traitement de fragment

+Ces fragments — qui sont des projections 3D de pixels 2D — sont alignés sur la grille de pixels, donc éventuellement ils peuvent être affichés comme des pixels sur un écran 2D durant la phase de fusion du résultat. -

Le traitement de fragment se concentre sur les textures et les lumières — il calcule les couleurs finales à partir des paramètres donnés.

+## Traitement de fragment -

+Le traitement de fragment se concentre sur les textures et les lumières — il calcule les couleurs finales à partir des paramètres donnés. -

Textures

+![](mdn-games-3d-fragment-processing.png) -

Les textures sont des images 2D utilisées dans l'espace 3D pour faire que les objets rendent mieux et paraissent plus réalistes. Les textures sont combinées à partir de simples éléments de texture appelés texels, de la même manière que les images sont combinées à partir de pixels. Appliquer des textures sur des objets durant le traitement des fragments, vous permet de l'ajuster en lui donnant une enveloppe ou des filtres si nécessaire.

+### Textures -

L'habillage de texture permet de répéter l'image 2D autour de l'objet 3D. Le filtrage de texture est appliqué lorsque la résolution d'origine ou l'image de texture est différente du fragment affiché — elle sera réduite ou agrandie en conséquence.

+Les textures sont des images 2D utilisées dans l'espace 3D pour faire que les objets rendent mieux et paraissent plus réalistes. Les textures sont combinées à partir de simples éléments de texture appelés texels, de la même manière que les images sont combinées à partir de pixels. Appliquer des textures sur des objets durant le traitement des fragments, vous permet de l'ajuster en lui donnant une enveloppe ou des filtres si nécessaire. -

Lumières

+L'habillage de texture permet de répéter l'image 2D autour de l'objet 3D. Le filtrage de texture est appliqué lorsque la résolution d'origine ou l'image de texture est différente du fragment affiché — elle sera réduite ou agrandie en conséquence. -

Les couleurs que nous voyons sur l'écran sont le résultat d'une source de lumière intéragissant avec la couleur à la surface des matériaux des objets. La lumière peut être absorbée ou réfléchie. Le modèle de lumière Phong standard implémenté dans WebGL a 4 types de base de lumière :

+### Lumières - +Les couleurs que nous voyons sur l'écran sont le résultat d'une source de lumière intéragissant avec la couleur à la surface des matériaux des objets. La lumière peut être absorbée ou réfléchie. Le **modèle de lumière Phong** standard implémenté dans WebGL a 4 types de base de lumière : -

Fusion de sortie

+- **Diffuse** _(diffusion)_ : Une lumière directionnelle distante, comme le Soleil. +- **Specular** _(Particulier)_ : Un point de lumière, comme un bulle de lumière dans une pièce ou un flash. +- **Ambient** \*(Ambiant)**\* **: Une lumière constante appliquée à tous les objets dans la scène. +- **Emissive** _(Émission)_ : La lumière émise directement par un objet. -

Durant l'étape de manipulation du résultat, tous les fragments des primitives de l'espace 3D sont transformés sur une grille de pixels 2D qui est ensuite affichée sur l'écran.

+## Fusion de sortie -

Durant la fusion de sortie, quelques traitements sont aussi appliqués pour ignorer de l'information qui n'est pas utile — par exemple, les paramètres des objets qui sont à l'extérieur de l'écran ou derrière d'autres, et par conséquent non visibles, ne sont pas calculés.

+Durant l'étape de manipulation du résultat, tous les fragments des primitives de l'espace 3D sont transformés sur une grille de pixels 2D qui est ensuite affichée sur l'écran.![](mdn-games-3d-output-merging.png) - +Durant la fusion de sortie, quelques traitements sont aussi appliqués pour ignorer de l'information qui n'est pas utile — par exemple, les paramètres des objets qui sont à l'extérieur de l'écran ou derrière d'autres, et par conséquent non visibles, ne sont pas calculés. -

Conclusion

+## Conclusion -

Maintenant vous connaissez les bases de la théorie derrière la manipulation 3D, si vous voulez passer à la pratique et voir quelques démonstrations en action, continuez avec les tutoriels ci-dessous :

+Maintenant vous connaissez les bases de la théorie derrière la manipulation 3D, si vous voulez passer à la pratique et voir quelques démonstrations en action, continuez avec les tutoriels ci-dessous : - +- [Construction d'une démo de base avec Three.js](/fr/docs/Games/Techniques/3D_on_the_web/Building_up_a_basic_demo_with_Three.js) +- [Construction d'une démo de base avec Babylon.js](/fr/docs/Games/Techniques/3D_on_the_web/Building_up_a_basic_demo_with_Babylon.js) +- [Construction d'une démo de base avec PlayCanvas](/fr/docs/Games/Techniques/3D_on_the_web/Building_up_a_basic_demo_with_PlayCanvas) +- [Construction d'une démo de base avec](/fr/docs/Games/Techniques/3D_on_the_web/Building_up_a_basic_demo_with_A-Frame)[ A-Frame](/fr/docs/Games/Techniques/3D_on_the_web/Building_up_a_basic_demo_with_A-Frame) -

Allez-y et faites quelques expémentations 3D sympas par vous-même !

+Allez-y et faites quelques expémentations 3D sympas par vous-même ! diff --git a/files/fr/games/techniques/3d_on_the_web/building_up_a_basic_demo_with_playcanvas/index.md b/files/fr/games/techniques/3d_on_the_web/building_up_a_basic_demo_with_playcanvas/index.md index 8a10f15237..588289c009 100644 --- a/files/fr/games/techniques/3d_on_the_web/building_up_a_basic_demo_with_playcanvas/index.md +++ b/files/fr/games/techniques/3d_on_the_web/building_up_a_basic_demo_with_playcanvas/index.md @@ -12,38 +12,36 @@ tags: - camera translation_of: Games/Techniques/3D_on_the_web/Building_up_a_basic_demo_with_PlayCanvas --- -
{{GamesSidebar}}

PlayCanvas est un populaire moteur 3D WebGL de jeu, originellement concu par Will Eastcott et Dave Evans. Il est disponible en open-source sur GitHub, avec un éditeur en ligne et une bonne documentation. L'éditeur en ligne est gratuit pour les projets publics avec jusqu'à deux membres d'équipe, mais il y a aussi des plans payants si vous vous lancez dans un projet commercial privé avec plus de développeurs.

+{{GamesSidebar}} -

Site PlayCanvas

+**PlayCanvas** est un populaire moteur 3D WebGL de jeu, originellement concu par Will Eastcott et Dave Evans. Il est disponible en [open-source sur GitHub](https://github.com/playcanvas/engine), avec un [éditeur](http://developer.playcanvas.com/en/user-manual/designer/) en ligne et une bonne [documentation](http://developer.playcanvas.com/en/). L'éditeur en ligne est gratuit pour les projets publics avec jusqu'à deux membres d'équipe, mais il y a aussi des [plans payants](https://playcanvas.com/plans) si vous vous lancez dans un projet commercial privé avec plus de développeurs. -

Jeux et Démos

+![Site PlayCanvas](playcanvas-cover.png) -

PlayCanvas a publié quelques démos populaires présentant ses fonctionnalités.

+## Jeux et Démos - +PlayCanvas a publié quelques démos populaires présentant ses fonctionnalités. -

+- [Tanx](http://playcanv.as/p/aP0oxhUr) est un jeu de char multijoueur dans lequel vous pouvez conduire votre char, en tirant sur d'autres joueurs au fur et à mesure. +- [Swooop](http://playcanv.as/p/JtL2iqIH)  est un jeu de vol où vous pilotez votre avion autour d'une île magique tout en collectant des bijoux et du carburant. +- Des visualisations comme the [Star Lord](http://playcanv.as/b/FQbBsJTd) et [BMW i8](http://playcanv.as/p/RqJJ9oU9) mettent également en valeur les possibilités du moteur. -
-

Note : Consultez la liste des démos pour trouver plus d'exemples.

-
+![](playcanvas-demos.png) -

Moteur vs Éditeur

+> **Note :** Consultez la liste des [démos](https://playcanvas.com/explore) pour trouver plus d'exemples. -

Le moteur peut lui même être utilisé comme une bibliotheque standard en incluant directement ses fichiers JavaScript dans votre code HTML, vous permettant de commencer à coder instantanémment. De plus l'ensemble d'outils de PlayCanvas s'accompagne d'un éditeur en ligne vous permettant d'ajouter des éléments à la scène par glisser déposer — un formidable mode de création de jeux et autres applications nécessitant des scènes si vous êtes meilleur designer que codeur. Ces approches sont différentes mais se valent dans l'atteinte des objectifs.

+## Moteur vs Éditeur -

Moteur PlayCanvas

+Le moteur peut lui même être utilisé comme une bibliotheque standard en incluant directement ses fichiers JavaScript dans votre code HTML, vous permettant de commencer à coder instantanémment. De plus l'ensemble d'outils de PlayCanvas s'accompagne d'un éditeur en ligne vous permettant d'ajouter des éléments à la scène par glisser déposer — un formidable mode de création de jeux et autres applications nécessitant des scènes si vous êtes meilleur designer que codeur. Ces approches sont différentes mais se valent dans l'atteinte des objectifs. -

Conçu pour les navigateurs modernes, PlayCanvas est un moteur de jeu 3D complet intégrant le chargement de ressources, un système d'entité et de composants, une manipulation avancée des graphismes, un moteur de collision et de physique (conçu avec ammo.js), la gestion du son et des simplifications pour la gestion des entrées de nombreux dispositifs (y compris les manettes de jeu). C'est une liste assez impressionnante de sonctionnalités — observez-en quelques-unes en action en consultant la rubrique Conception d'une démo de base avec PlayCanvas pour plus de détails.

+## Moteur PlayCanvas -

Éditeur PlayCanvas 

+Conçu pour les navigateurs modernes, PlayCanvas est un moteur de jeu 3D complet intégrant le chargement de ressources, un système d'entité et de composants, une manipulation avancée des graphismes, un moteur de collision et de physique (conçu avec [ammo.js](https://github.com/kripken/ammo.js/)), la gestion du son et des simplifications pour la gestion des entrées de nombreux dispositifs (y compris les manettes de jeu). C'est une liste assez impressionnante de sonctionnalités — observez-en quelques-unes en action en consultant la rubrique [Conception d'une démo de base avec PlayCanvas](/fr/docs/Games/Techniques/3D_on_the_web/Building_up_a_basic_demo_with_PlayCanvas/engine) pour plus de détails. -

Au lieu de tout coder à parir de zéro, vous pouvez également utiliser l'éditeur en ligne. Cela peut être un environnement de travail plus agréable si vous n'êtes pas très orienté codage. Voici la construction d'une démo de base avec l'éditeur de PlayCanvas pour plus de détails.

+## Éditeur PlayCanvas  -

Résumé

+Au lieu de tout coder à parir de zéro, vous pouvez également utiliser l'éditeur en ligne. Cela peut être un environnement de travail plus agréable si vous n'êtes pas très orienté codage. Voici la [construction d'une démo de base avec l'éditeur de PlayCanvas](/fr/docs/Games/Techniques/3D_on_the_web/Building_up_a_basic_demo_with_PlayCanvas/editor) pour plus de détails. -

Votre approche sera déterminante. Les designers préféreront utiliser l'éditeur en ligne alors que les programmeurs voudront avoir le contrôle total de l'environnement de codage et utiliseront probablement les fichiers source du moteur. Ce qui est intéressant est que vous êtes libre dans le choix des outils vous convenant le mieux.

+## Résumé + +Votre approche sera déterminante. Les designers préféreront utiliser l'éditeur en ligne alors que les programmeurs voudront avoir le contrôle total de l'environnement de codage et utiliseront probablement les fichiers source du moteur. Ce qui est intéressant est que vous êtes libre dans le choix des outils vous convenant le mieux. diff --git a/files/fr/games/techniques/3d_on_the_web/building_up_a_basic_demo_with_three.js/index.md b/files/fr/games/techniques/3d_on_the_web/building_up_a_basic_demo_with_three.js/index.md index ea4b25a2c8..f94d68c5be 100644 --- a/files/fr/games/techniques/3d_on_the_web/building_up_a_basic_demo_with_three.js/index.md +++ b/files/fr/games/techniques/3d_on_the_web/building_up_a_basic_demo_with_three.js/index.md @@ -3,264 +3,274 @@ title: Building up a basic demo with Three.js slug: Games/Techniques/3D_on_the_web/Building_up_a_basic_demo_with_Three.js translation_of: Games/Techniques/3D_on_the_web/Building_up_a_basic_demo_with_Three.js --- -
{{GamesSidebar}}
+{{GamesSidebar}} -

Une scène 3D  dans un jeu - même la plus simple - contient des éléments standard comme des formes situées dans un système de coordonnées, une caméra pour les voir réellement, des lumières et des matériaux pour amelioré son esthétique, des animations pour la rendre vivante, etc. Three.js, comme avec toute autre bibliothèque 3D, fournit des fonctions d'assistance intégrées pour vous aider à implémenter plus rapidement les fonctionnalités 3D courantes. Dans cet article, nous vous expliquerons les bases de l'utilisation de Three, notamment la configuration d'un environnement de développement, la structuration du code HTML nécessaire, les objets fondamentaux de Three et la manière de créer une démonstration de base.

+Une scène 3D  dans un jeu - même la plus simple - contient des éléments standard comme des formes situées dans un système de coordonnées, une caméra pour les voir réellement, des lumières et des matériaux pour amelioré son esthétique, des animations pour la rendre vivante, etc. **Three\*\***.js\*\*, comme avec toute autre bibliothèque 3D, fournit des fonctions d'assistance intégrées pour vous aider à implémenter plus rapidement les fonctionnalités 3D courantes. Dans cet article, nous vous expliquerons les bases de l'utilisation de Three, notamment la configuration d'un environnement de développement, la structuration du code HTML nécessaire, les objets fondamentaux de Three et la manière de créer une démonstration de base. -
-

Note : Nous avons choisi Three car il s'agit de l'une des bibliothèques WebGL les plus populaires, et il est facile de commencer. Nous n'essayons pas de dire que c'est mieux que toute autre bibliothèque WebGL disponible, et vous devriez vous sentir libre d'essayer une autre bibliothèque, comme CopperLicht, GLGE ou PlayCanvas

-
+> **Note :** Nous avons choisi Three car il s'agit de l'une des bibliothèques WebGL les plus populaires, et il est facile de commencer. Nous n'essayons pas de dire que c'est mieux que toute autre bibliothèque WebGL disponible, et vous devriez vous sentir libre d'essayer une autre bibliothèque, comme CopperLicht, GLGE ou PlayCanvas -

Configuration de l environnement de Developpement

+## Configuration de l environnement de Developpement -

Pour commencer a developper avec Three.js :

+Pour commencer a developper avec **Three.js :** - +- Assurez-vous d utiliser un navigateur moderne avec une bonne prise en charge de **WebGL,** comme le dernier Firefox ou Chrome. +- Creer un repertoire ou stocker vos experience +- Enregistrez une copie à jour de la bibliotheque Three.js réduite dans votre repertoire +- Ouvrir la documentation de **Three.js** dans un nouvel onglet, il est utile de s'y référer. -

Structure HTML

+## Structure HTML -

Voici la structure que nous allons utiliser

+Voici la structure que nous allons utiliser -
<!DOCTYPE html>
-<html>
-<head>
-	<meta charset="utf-8">
-	<title>MDN Games: Three.js demo</title>
-	<style>
+```html
+
+
+
+	
+	MDN Games: Three.js demo
+	
+
+
+
+
+
+
+```
 
-

 Cette structure contient des informations de base , un peu de CSS pour definir la largeur et la hauteur de l élément canvas, ici 100% pour remplir tout l'espace disponnible.

+Cette structure contient des informations de base , un peu de CSS pour definir la largeur et la hauteur de l élément canvas, ici 100% pour remplir tout l'espace disponnible. -

la premeire balise de script inclut la bibliotheque Three.js dans la page. nous ecrirons notre code dans la deuxieme balise script.

+la premeire balise de script inclut la bibliotheque **Three.js** dans la page. nous ecrirons notre code dans la deuxieme balise script. -

nous avons deja inclut deux variables d assitance pour stocké la alrgeur et la hauteur de la fenetre.

+nous avons deja inclut deux variables d assitance pour stocké la alrgeur et la hauteur de la fenetre. -

avant de poursuivre copier se code dans un fichier nommé index.html.

+avant de poursuivre copier se code dans un fichier nommé index.html. -

Renderer ou Moteur de rendue

+## Renderer ou Moteur de rendue -

un Moteur de rendue est un outil qui affiche les scénes directement dans votre navigateur.Il existe plusieur moteur different :WebGL est la valeur par défaut, vous pouvez utilisercanvas,SVG,CSS et DOM . ils différent dans la façons dont il gere le  rendu. Malgres leurs differences , l experience utilisateur sera la meme.

+un Moteur de rendue est un outil qui affiche les scénes directement dans votre navigateur.Il existe plusieur moteur different :WebGL est la valeur par défaut, vous pouvez utilisercanvas,SVG,CSS et DOM . ils différent dans la façons dont il gere le  rendu. Malgres leurs differences , l experience utilisateur sera la meme. -

Grace à cette approche, une solution de secour peut etre  utilisée , si une technologie n'est pas prise en charge par le navigatueur.

+Grace à cette approche, une solution de secour peut etre  utilisée , si une technologie n'est pas prise en charge par le navigatueur. -
var renderer = new THREE.WebGLRenderer({antialias:true});
+```js
+var renderer = new THREE.WebGLRenderer({antialias:true});
 renderer.setSize(WIDTH, HEIGHT);
 renderer.setClearColor(0xDDDDDD, 1);
 document.body.appendChild(renderer.domElement);
-
+``` -

Nous créons un nouveau rendu WebGL, définissons sa taille pour qu'elle corresponde à tout l'espace disponible à l'écran et ajoutons la structure DOM à la page. Vous avez peut-être remarqué le paramètre d'antialias dans la première ligne - cela rend les bords des formes plus fluides. La méthode setClearColor () définit notre arrière-plan sur une couleur gris clair, au lieu de la couleur noire par défaut.
-
- Ajoutez ce code dans notre deuxième balise script du fichier index.html, juste en dessous du commentaire JavaScript.

+Nous créons un nouveau rendu WebGL, définissons sa taille pour qu'elle corresponde à tout l'espace disponible à l'écran et ajoutons la structure DOM à la page. Vous avez peut-être remarqué le paramètre d'antialias dans la première ligne - cela rend les bords des formes plus fluides. La méthode setClearColor () définit notre arrière-plan sur une couleur gris clair, au lieu de la couleur noire par défaut. -

Scene

+Ajoutez ce code dans notre deuxième balise script du fichier index.html, juste en dessous du commentaire JavaScript. -

Une scène est l'endroit où tout se passe. Lors de la création de nouveaux objets dans la démo, nous les ajoutons tous à l'intérieur de la scène pour devenir visibles à l'écran. Dans three.js, la scène est représentée par un objet Scene. Créons-le, en ajoutant la ligne suivante sous nos lignes précédentes:

+## Scene -
var scene = new THREE.Scene();
-
+Une scène est l'endroit où tout se passe. Lors de la création de nouveaux objets dans la démo, nous les ajoutons tous à l'intérieur de la scène pour devenir visibles à l'écran. Dans **three.js**, la scène est représentée par un objet Scene. Créons-le, en ajoutant la ligne suivante sous nos lignes précédentes: -

plutard nous utiliserons la methode add() , pour ajouter des objets a cette scene.

+```js +var scene = new THREE.Scene(); +``` -

Camera

+plutard nous utiliserons la methode add() , pour ajouter des objets a cette scene. -

Nous avons la scène , mais nous devons encore ajouter une caméra pour voir notre travail - imaginez un film sans caméra. Les lignes suivantes mettent la caméra en place dans le système de coordonnées 3D et la pointent dans la direction de notre scène, afin que nous puissions enfin voir quelque chose:

+## Camera -
var camera = new THREE.PerspectiveCamera(70, WIDTH/HEIGHT);
+Nous avons la scène , mais nous devons encore ajouter une caméra pour voir notre travail - imaginez un film sans caméra. Les lignes suivantes mettent la caméra en place dans le système de coordonnées 3D et la pointent dans la direction de notre scène, afin que nous puissions enfin voir quelque chose:
+
+```js
+var camera = new THREE.PerspectiveCamera(70, WIDTH/HEIGHT);
 camera.position.z = 50;
 scene.add(camera);
-
+``` + +Ajoutez les lignes ci-dessus à votre code, en dessous de celles précédemment ajoutées. -

Ajoutez les lignes ci-dessus à votre code, en dessous de celles précédemment ajoutées.
-
- Il existe d'autres types de camera (Cube, Orthographique), mais la plus simple est Perspective. Pour l'initialiser, nous devons définir son champ de vision et son rapport d'aspect: le premier est utilisé pour définir la quantité de vue, et le second est important pour que les objets à l'écran aient les bonnes proportions lors du rendu, et ne semblent pas étirés . Expliquons les valeurs que nous définissons pour le code ci-dessus:>

+Il existe d'autres types de camera (Cube, Orthographique), mais la plus simple est Perspective. Pour l'initialiser, nous devons définir son champ de vision et son rapport d'aspect: le premier est utilisé pour définir la quantité de vue, et le second est important pour que les objets à l'écran aient les bonnes proportions lors du rendu, et ne semblent pas étirés . Expliquons les valeurs que nous définissons pour le code ci-dessus:> -
    -
  • La valeur que nous fixons pour le champ de vision, 70, est quelque chose que nous pouvons expérimenter: plus la valeur est élevée, plus la quantité de scène que la caméra affichera sera grande. Imaginez une vue de caméra normale, par opposition à un effet fish-eye, qui permet de voir beaucoup plus. La valeur par défaut est 50.
  • -
  • Le rapport hauteur / largeur est défini sur la largeur et la hauteur actuelles de la fenêtre afin qu'il soit ajusté dynamiquement. Nous pourrions définir un rapport fixe - par exemple 16 ⁄ 9, qui est le rapport d'aspect d'un téléviseur à écran large. La valeur par défaut est 1.
  • -
  • La position z, avec une valeur de 50 unités, est la distance entre la caméra et le centre de la scène sur l'axe z. Ici, nous reculons la caméra, afin que les objets de la scène puissent être visualisés. 50 se sent bien. Ce n'est ni trop près, ni trop loin, et la taille des objets leur permet de rester sur la scène, dans le champ de vision donné. Les valeurs x et y, si elles ne sont pas spécifiées, seront définies par défaut sur 0.
  • -
+- La valeur que nous fixons pour le champ de vision, 70, est quelque chose que nous pouvons expérimenter: plus la valeur est élevée, plus la quantité de scène que la caméra affichera sera grande. Imaginez une vue de caméra normale, par opposition à un effet fish-eye, qui permet de voir beaucoup plus. La valeur par défaut est 50. +- Le rapport hauteur / largeur est défini sur la largeur et la hauteur actuelles de la fenêtre afin qu'il soit ajusté dynamiquement. Nous pourrions définir un rapport fixe - par exemple 16 ⁄ 9, qui est le rapport d'aspect d'un téléviseur à écran large. La valeur par défaut est 1. +- La position z, avec une valeur de 50 unités, est la distance entre la caméra et le centre de la scène sur l'axe z. Ici, nous reculons la caméra, afin que les objets de la scène puissent être visualisés. 50 se sent bien. Ce n'est ni trop près, ni trop loin, et la taille des objets leur permet de rester sur la scène, dans le champ de vision donné. Les valeurs x et y, si elles ne sont pas spécifiées, seront définies par défaut sur 0. -

Vous devez expérimenter ces valeurs et voir comment elles changent ce que vous voyez dans la scène. .

+Vous devez expérimenter ces valeurs et voir comment elles changent ce que vous voyez dans la scène. . -
-

Note : Les valeurs de distance (par exemple pour la position z de la caméra) sont sans unité et peuvent être tout ce que vous jugez approprié pour votre scène: millimètres, mètres, pieds ou miles.

-
+> **Note :** Les valeurs de distance (par exemple pour la position z de la caméra) sont sans unité et peuvent être tout ce que vous jugez approprié pour votre scène: millimètres, mètres, pieds ou miles. -

Rendu de la scene

+## Rendu de la scene -

Tout est prêt, mais on ne voit toujours rien. Bien que nous ayons configuré le moteur de rendu, nous devons toujours effetué le rendu. Notre fonction render () fera ce travail, avec un peu d'aide de requestAnimationFrame (), ce qui fait que la scène sera  restituée sur chaque image:

+Tout est prêt, mais on ne voit toujours rien. Bien que nous ayons configuré le moteur de rendu, nous devons toujours effetué le rendu. Notre fonction render () fera ce travail, avec un peu d'aide de requestAnimationFrame (), ce qui fait que la scène sera  restituée sur chaque image: -
function render() {
+```js
+function render() {
 	requestAnimationFrame(render);
 	renderer.render(scene, camera);
 }
 render();
-
+``` -

On every new frame the render function is invoked, and the renderer renders the scene and the camera. Right after the function declaration, we're invoking it for the first time to start the loop, after which it will be used indefinitely.

+On every new frame the `render` function is invoked, and the `renderer` renders the `scene` and the `camera`. Right after the function declaration, we're invoking it for the first time to start the loop, after which it will be used indefinitely. -

Again, add this new code below your previous additions. Try saving the file and opening it in your browser. You should now see a gray window. Congratulations!

+Again, add this new code below your previous additions. Try saving the file and opening it in your browser. You should now see a gray window. Congratulations! -

Geometry

+## Geometry -

Now our scene is properly rendering, we can start adding 3D shapes. To speed up development, Three.js provides a bunch of predefined primitives, which you can use to create shapes instantly in a single line of code. There's cubes, spheres, cylinders, and more complicated shapes available. Detail like drawing required vertices and faces, for a given shape, is handled by the Three framework, so we can focus on higher level coding. Let's start, by defining the geometry for a cube shape, adding the following just above the render() function:

+Now our scene is properly rendering, we can start adding 3D shapes. To speed up development, Three.js provides a bunch of predefined primitives, which you can use to create shapes instantly in a single line of code. There's cubes, spheres, cylinders, and more complicated shapes available. Detail like drawing required vertices and faces, for a given shape, is handled by the Three framework, so we can focus on higher level coding. Let's start, by defining the geometry for a cube shape, adding the following just above the `render()` function: -
var boxGeometry = new THREE.BoxGeometry(10, 10, 10);
-
+```js +var boxGeometry = new THREE.BoxGeometry(10, 10, 10); +``` -

In this case, we define a simple cube that is 10 x 10 x 10 units. The geometry itself is not enough though, we also need a material that will be used for our shape.

+In this case, we define a simple cube that is 10 x 10 x 10 units. The geometry itself is not enough though, we also need a material that will be used for our shape. -

Material

+## Material -

A material is what covers an object, the colors, or textures on its surface. In our case, we will choose a simple blue color to paint our box. There are a number of predefined materials which can be used: Basic, Phong, Lambert. Let's play with the last two later, but for now, the Basic one should be enough:

+A material is what covers an object, the colors, or textures on its surface. In our case, we will choose a simple blue color to paint our box. There are a number of predefined materials which can be used: Basic, Phong, Lambert. Let's play with the last two later, but for now, the Basic one should be enough: -
var basicMaterial = new THREE.MeshBasicMaterial({color: 0x0095DD});
-
+```js +var basicMaterial = new THREE.MeshBasicMaterial({color: 0x0095DD}); +``` -

Add this line below the previously added.

+Add this line below the previously added. -

Our material is now ready, what next?

+Our material is now ready, what next? -

Mesh

+## Mesh -

To apply the material to a geometry, a mesh is used. This takes on a shape, and adds the specified material to every face:

+To apply the material to a geometry, a mesh is used. This takes on a shape, and adds the specified material to every face: -
var cube = new THREE.Mesh(boxGeometry, basicMaterial);
-
+```js +var cube = new THREE.Mesh(boxGeometry, basicMaterial); +``` -

Again, add this line below the one you previously added.

+Again, add this line below the one you previously added. -

Adding the cube to the scene

+## Adding the cube to the scene -

We've now created a cube, using the geometry and material defined earlier. The last thing to do is to place the cube to our scene. Add this line below the previous one:

+We've now created a cube, using the geometry and material defined earlier. The last thing to do is to place the cube to our scene. Add this line below the previous one: -
scene.add(cube);
-
+```js +scene.add(cube); +``` -

If you save, and refresh your Web browser, our object will now look like a square, because it's facing the camera. The good thing about objects, is that we can move them on the scene, however we want. For example, rotating and scaling as we like. Let's apply a little rotation to the cube, so we can see more than one face.  Again, adding our code below the previous:

+If you save, and refresh your Web browser, our object will now look like a square, because it's facing the camera. The good thing about objects, is that we can move them on the scene, however we want. For example, rotating and scaling as we like. Let's apply a little rotation to the cube, so we can see more than one face.  Again, adding our code below the previous: -
cube.rotation.set(0.4, 0.2, 0);
-
+```js +cube.rotation.set(0.4, 0.2, 0); +``` -

Congratulations, you've created an object in a 3D environment! This might have proven easier than you first thought? Here's how it should look:

+Congratulations, you've created an object in a 3D environment! This might have proven easier than you first thought? Here's how it should look: -

+![](cube.png) -

And here's the code we have created so far:

+And here's the code we have created so far: -

{{JSFiddleEmbed("https://jsfiddle.net/end3r/bwup75fa/","","350")}}

+{{JSFiddleEmbed("https://jsfiddle.net/end3r/bwup75fa/","","350")}} -

You can also check it out on GitHub.

+You can also [check it out on GitHub](https://github.com/end3r/MDN-Games-3D/blob/gh-pages/Three.js/cube.html). -

More shapes and materials

+## More shapes and materials -

Now we will add more shapes to the scene, and explore other shapes, materials, lighting, and more. Let's move the cube to the left, to make space for some friends. Adding the following line just below the previous one:

+Now we will add more shapes to the scene, and explore other shapes, materials, lighting, and more. Let's move the cube to the left, to make space for some friends. Adding the following line just below the previous one: -
cube.position.x = -25;
-
+```js +cube.position.x = -25; +``` -

Now onto more shapes and materials. What might happen when you add a torus, wrapped in the Phong material? Try adding the following lines, just below the lines defining the cube.

+Now onto more shapes and materials. What might happen when you add a torus, wrapped in the Phong material? Try adding the following lines, just below the lines defining the cube. -
var torusGeometry = new THREE.TorusGeometry(7, 1, 6, 12);
+```js
+var torusGeometry = new THREE.TorusGeometry(7, 1, 6, 12);
 var phongMaterial = new THREE.MeshPhongMaterial({color: 0xFF9500});
 var torus = new THREE.Mesh(torusGeometry, phongMaterial);
 scene.add(torus);
-
+``` -

These lines will add a torus geometry; the TorusGeometry() method's parameters define, and the parameters are radius, tube diameter, radial segment count, and tubular segment count. The Phong material should look more glossy than the box's simple Basic material, though right now our torus will just look black.

+These lines will add a torus geometry; the `TorusGeometry()` method's parameters define, and the parameters are `radius`, `tube diameter`, `radial segment count`, and `tubular segment count`. The Phong material should look more glossy than the box's simple Basic material, though right now our torus will just look black. -

We can choose more fun predefined shapes. Let's play some more. Add the following lines, below those defining the torus:

+We can choose more fun predefined shapes. Let's play some more. Add the following lines, below those defining the torus: -
var dodecahedronGeometry = new THREE.DodecahedronGeometry(7);
+```js
+var dodecahedronGeometry = new THREE.DodecahedronGeometry(7);
 var lambertMaterial = new THREE.MeshLambertMaterial({color: 0xEAEFF2});
 var dodecahedron = new THREE.Mesh(dodecahedronGeometry, lambertMaterial);
 dodecahedron.position.x = 25;
 scene.add(dodecahedron);
-
+``` -

This time, we are creating a dodecahedron, a shape containing twelve flat faces. The parameter, DodecahedronGeometry(), defines the size of the object. We're using a Lambert material, similar to Phong, but should be less glossy. Again it's black, for now. We're moving the object to the right, so it's not in the same position as the box, or torus.

+This time, we are creating a dodecahedron, a shape containing twelve flat faces. The parameter, `DodecahedronGeometry(),` defines the size of the object. We're using a Lambert material, similar to Phong, but should be less glossy. Again it's black, for now. We're moving the object to the right, so it's not in the same position as the box, or torus. -

As mentioned above, the new objects currently just look black. To have both, the Phong and Lambert materials properly visible, we need to introduce a source of light.

+As mentioned above, the new objects currently just look black. To have both, the Phong and Lambert materials properly visible, we need to introduce a source of light. -

Lights

+## Lights -

There are various types of light sources available in Three.js. The most basic is PointLight, which works like a flashlight, shining a spotlight in a defined direction. Add the following lines, below your shape definitions:

+There are various types of light sources available in Three.js. The most basic is `PointLight`, which works like a flashlight, shining a spotlight in a defined direction. Add the following lines, below your shape definitions: -
var light = new THREE.PointLight(0xFFFFFF);
+```js
+var light = new THREE.PointLight(0xFFFFFF);
 light.position.set(-10, 15, 50);
 scene.add(light);
-
+``` -

We define a white point of light, set its position a little away from the center of the scene, so it can light up some parts of the shapes, finally adding it to the scene. Now everything works as it should, all three shapes are visible. You should check the documentation for other types of lights, like Ambient, Directional, Hemisphere, or Spot. Experiment placing them on our scene, to see how they affect it.

+We define a white point of light, set its position a little away from the center of the scene, so it can light up some parts of the shapes, finally adding it to the scene. Now everything works as it should, all three shapes are visible. You should check the documentation for other types of lights, like Ambient, Directional, Hemisphere, or Spot. Experiment placing them on our scene, to see how they affect it. -

+![](shapes.png) -

This looks a little boring though. In a game, something is usually happening. We might see animations and such. So let's try breathing a little life into these shapes, by animating them!

+This looks a little boring though. In a game, something is usually happening. We might see animations and such. So let's try breathing a little life into these shapes, by animating them! -

Animation

+## Animation -

We already used rotation, to adjust the position of the cube. We can also scale the shapes, or change their positions. To show animation, we need to make changes to these values inside the render loop, so they update on each frame.

+We already used rotation, to adjust the position of the cube. We can also scale the shapes, or change their positions. To show animation, we need to make changes to these values inside the render loop, so they update on each frame. -

Rotation

+### Rotation -

Rotating is straighforward. You add a value to a given direction of rotation on each frame. Add this line of code, right after the requestAnimationFrame() invocation inside the render function:

+Rotating is straighforward. You add a value to a given direction of rotation on each frame. Add this line of code, right after the `requestAnimationFrame()` invocation inside the `render` function: -
cube.rotation.y += 0.01;
-
+```js +cube.rotation.y += 0.01; +``` -

This rotates the cube on every frame, by a tiny bit, so the animation looks smooth.

+This rotates the cube on every frame, by a tiny bit, so the animation looks smooth. -

Scaling

+### Scaling -

We can also scale an object. Applying a constant value, we would make it grow, or shrink just once. Let's make things more interesting. First, we implement a helper variable, called t, for counting elapsed time. Add it right before the render() function:

+We can also scale an object. Applying a constant value, we would make it grow, or shrink just once. Let's make things more interesting. First, we implement a helper variable, called `t,` for counting elapsed time. Add it right before the `render()` function: -
var t = 0;
-
+```js +var t = 0; +``` -

Now let's increase the value by a given constant value, on each frame of the animation. Add the following lines, just below the requestAnimationFrame() invocation:

+Now let's increase the value by a given constant value, on each frame of the animation. Add the following lines, just below the `requestAnimationFrame()` invocation: -
t += 0.01;
+```js
+t += 0.01;
 torus.scale.y = Math.abs(Math.sin(t));
-
+``` -

We use Math.sin, ending up with quite an interesting result. This scales the torus, repeating the process, as sin is a periodic function. We're wrapping the scale value in Math.abs, to pass the absolute values, greater or equal to 0. As sin is between -1 and 1,  negative values might render out torus in unexpected way. In this case it looks black half the time.

+We use `Math.sin`, ending up with quite an interesting result. This scales the torus, repeating the process, as `sin` is a periodic function. We're wrapping the scale value in `Math.abs`, to pass the absolute values, greater or equal to 0. As sin is between -1 and 1,  negative values might render out torus in unexpected way. In this case it looks black half the time. -

Now, onto movement.

+Now, onto movement. -

Moving

+### Moving -

Aside from rotation, and scaling, we can additionally move objects around the scene. Add the following, again just below our requestAnimationFrame() invocation:

+Aside from rotation, and scaling, we can additionally move objects around the scene. Add the following, again just below our `requestAnimationFrame()` invocation: -
dodecahedron.position.y = -7*Math.sin(t*2);
-
+```js +dodecahedron.position.y = -7*Math.sin(t*2); +``` -

This will move the dodecahedron up and down, by applying the sin() value to the y axis on each frame, and a little adjustment to make it look cooler. Try changing these values, to see how it affects the animations.

+This will move the dodecahedron up and down, by applying the `sin()` value to the y axis on each frame, and a little adjustment to make it look cooler. Try changing these values, to see how it affects the animations. -

Conclusion

+## Conclusion -

Here's the final code:

+Here's the final code: -

{{JSFiddleEmbed("https://jsfiddle.net/rybr720u/","","350")}}

+{{JSFiddleEmbed("https://jsfiddle.net/rybr720u/","","350")}} -

You can also see it on GitHub and fork the repository, if you want to play with it locally. Now you understand the basics of Three.js, you can jump back to the parent page, 3D on the Web.

+You can also [see it on GitHub](https://github.com/end3r/MDN-Games-3D/blob/gh-pages/Three.js/shapes.html) and [fork the repository](https://github.com/end3r/MDN-Games-3D/), if you want to play with it locally. Now you understand the basics of Three.js, you can jump back to the parent page, [3D on the Web](/fr/docs/Games/Techniques/3D_on_the_web). -

You could also try learning raw WebGL, to gain a better understanding of what's going on underneath. See our WebGL documentation.

+You could also try learning raw WebGL, to gain a better understanding of what's going on underneath. See our [WebGL documentation](/fr/docs/Web/API/WebGL_API). diff --git a/files/fr/games/techniques/3d_on_the_web/index.md b/files/fr/games/techniques/3d_on_the_web/index.md index 47d25bbffd..e921ad5af4 100644 --- a/files/fr/games/techniques/3d_on_the_web/index.md +++ b/files/fr/games/techniques/3d_on_the_web/index.md @@ -10,104 +10,96 @@ tags: - three.js translation_of: Games/Techniques/3D_on_the_web --- -
{{GamesSidebar}}
+{{GamesSidebar}} -

  {{IncludeSubnav("/fr/docs/Jeux")}}

+{{IncludeSubnav("/fr/docs/Jeux")}} -

Pour des expériences de jeu riches sur le Web, l'arme de choix est WebGL, qui est fourni sur HTML {{htmlelement ("canvas")}}. WebGL est essentiellement un OpenGL ES 2.0 pour le Web - c'est une API JavaScript fournissant des outils pour créer des animations interactives riches et bien sûr aussi des jeux. Vous pouvez générer et rendre des graphiques 3D dynamiques avec du JavaScript accéléré.

+Pour des expériences de jeu riches sur le Web, l'arme de choix est WebGL, qui est fourni sur HTML {{htmlelement ("canvas")}}. WebGL est essentiellement un OpenGL ES 2.0 pour le Web - c'est une API JavaScript fournissant des outils pour créer des animations interactives riches et bien sûr aussi des jeux. Vous pouvez générer et rendre des graphiques 3D dynamiques avec du JavaScript accéléré. -

Documentation et support du navigateur

+## Documentation et support du navigateur -

La documentation et les spécifications du projet WebGL sont gérées par le Groupe Khronos, pas le W3C comme pour la plupart des API Web. Le support sur les navigateurs modernes est très bon, même sur mobile, donc vous n'avez pas trop à vous en soucier. Les principaux navigateurs prennent en charge WebGL et tout ce dont vous avez besoin est de vous concentrer sur l'optimisation des performances sur les appareils que vous utilisez.

+La documentation et les spécifications du projet [WebGL](/fr/docs/Web/API/WebGL_API) sont gérées par le [Groupe Khronos](https://www.khronos.org/), pas le W3C comme pour la plupart des API Web. Le support sur les navigateurs modernes est très bon, même sur mobile, donc vous n'avez pas trop à vous en soucier. Les principaux navigateurs prennent en charge WebGL et tout ce dont vous avez besoin est de vous concentrer sur l'optimisation des performances sur les appareils que vous utilisez. -

Il y a un effort continu pour rendre libre WebGL 2.0 (basé sur OpenGL ES 3.0) dans un proche avenir, ce qui apporterait de nombreuses améliorations et aiderait les développeurs à construire des jeux pour le Web moderne en utilisant le matériel puissant actuel.

+Il y a un effort continu pour rendre libre WebGL 2.0 (basé sur OpenGL ES 3.0) dans un proche avenir, ce qui apporterait de nombreuses améliorations et aiderait les développeurs à construire des jeux pour le Web moderne en utilisant le matériel puissant actuel. -

Explication des bases de la théorie 3D

+## Explication des bases de la théorie 3D -

Les bases de la théorie 3D s'articulent autour des formes représentées dans un espace 3D, avec un système de coordonnées utilisé pour calculer leurs positions. Consultez notre article de base sur la théorie 3D pour toutes les informations dont vous avez besoin.

+Les bases de la théorie 3D s'articulent autour des formes représentées dans un espace 3D, avec un système de coordonnées utilisé pour calculer leurs positions. Consultez [notre article de base sur la théorie 3D](/fr/docs/Games/Techniques/3D_on_the_web/Basic_theory) pour toutes les informations dont vous avez besoin. -

Concepts avancés

+## Concepts avancés -

Vous pouvez faire beaucoup plus avec WebGL. Il y a des concepts avancés dans lesquels vous devriez plonger et en apprendre davantage — les "shaders", la détection de collision ou le dernier sujet brûlant — la réalité virtuelle sur le Web.

+Vous pouvez faire beaucoup plus avec WebGL. Il y a des concepts avancés dans lesquels vous devriez plonger et en apprendre davantage — les "shaders", la détection de collision ou le dernier sujet brûlant — la réalité virtuelle sur le Web. -

Shaders

+### Shaders -

Il convient de distinguer les shaders, qui sont un cas particulier. Les Shaders utilisent GLSL, un langage d'ombrage OpenGL spécial avec une syntaxe similaire à C, qui est exécuté directement par le pipeline graphique. Ils peuvent être divisés en "Vertex Shaders" et "Fragment Shaders" (ou "Pixel Shaders") — le premier transforme les positions des formes en véritables coordonnées de dessin 3D, tandis que le second calcule les couleurs de rendu et d'autres attributs. Vous devriez absolument lire l'article GLSL Shaders pour en apprendre plus à leur sujet.

+Il convient de distinguer les shaders, qui sont un cas particulier. Les Shaders utilisent GLSL, un langage d'ombrage OpenGL spécial avec une syntaxe similaire à C, qui est exécuté directement par le pipeline graphique. Ils peuvent être divisés en "Vertex Shaders" et "Fragment Shaders" (ou "Pixel Shaders") — le premier transforme les positions des formes en véritables coordonnées de dessin 3D, tandis que le second calcule les couleurs de rendu et d'autres attributs. Vous devriez absolument lire l'article [GLSL Shaders](/fr/docs/Games/Techniques/3D_on_the_web/GLSL_Shaders) pour en apprendre plus à leur sujet. -

Détection de collision

+### Détection de collision -

Il est difficile d'imaginer un jeu sans la détection de collision — nous devons toujours mettre au point quand quelque chose frappe quelque chose d'autre. Nous avons des informations disponibles pour votre apprentissage de :

+Il est difficile d'imaginer un jeu sans la détection de collision — nous devons toujours mettre au point quand quelque chose frappe quelque chose d'autre. Nous avons des informations disponibles pour votre apprentissage de : - +- [détection de collision 2D](/fr/docs/Games/Techniques/2D_collision_detection) +- [détection de collision 3D](/fr/docs/Games/Techniques/3D_collision_detection) -

Réalité virtuelle sur le web

+### Réalité virtuelle sur le web -

Le concept de réalité virtuelle n'est pas nouveau, mais il est en train de conquérir le web grâce à des avancées matérielles telles que l' Oculus Rift et l'API WebVR (actuellement expérimental) pour capturer les informations du matériel de réalité virtuelle et les rendre disponibles pour les applications JavaScript. Pour en savoir plus, lisez WebVR - Réalité virtuelle pour le Web.

+Le concept de réalité virtuelle n'est pas nouveau, mais il est en train de conquérir le web grâce à des avancées matérielles telles que l' [Oculus Rift](https://www.oculus.com/en-us/rift/) et l'[API WebVR](/fr/docs/Web/API/WebVR_API) (actuellement expérimental) pour capturer les informations du matériel de réalité virtuelle et les rendre disponibles pour les applications JavaScript. Pour en savoir plus, lisez [WebVR - Réalité virtuelle pour le Web](/fr/docs/Games/Techniques/3D_on_the_web/WebVR). -

Il y a aussi la construction d'une démo de base avec l'article A-Frame qui montre comment il est facile de construire des environnements 3D pour la réalité virtuelle en utilisant le framework A-Frame .

+Il y a aussi la [construction d'une démo de base avec l'article A-Frame](/fr/docs/Games/Techniques/3D_on_the_web/Building_up_a_basic_demo_with_A-Frame) qui montre comment il est facile de construire des environnements 3D pour la réalité virtuelle en utilisant le framework [A-Frame](http://aframe.io/) . -

L'essor des bibliothèques et des cadres

+## L'essor des bibliothèques et des cadres -

Le codage de WebGL brut est assez complexe, mais vous aurez envie de le maîtriser à long terme, car vos projets seront plus avancés (consultez notre documentation WebGL pour commencer). Pour les projets de monde réel, vous utiliserez probablement aussi un "framework" pour accélérer le développement et vous aider à gérer le projet. L'utilisation d'un "framework" pour les jeux 3D permet également d'optimiser les performances, car les outils que vous utilisez vous permettent de vous concentrer sur la construction du jeu.

+Le codage de WebGL brut est assez complexe, mais vous aurez envie de le maîtriser à long terme, car vos projets seront plus avancés (consultez notre [documentation WebGL](/fr/docs/Web/API/WebGL_API) pour commencer). Pour les projets de monde réel, vous utiliserez probablement aussi un "framework" pour accélérer le développement et vous aider à gérer le projet. L'utilisation d'un "framework" pour les jeux 3D permet également d'optimiser les performances, car les outils que vous utilisez vous permettent de vous concentrer sur la construction du jeu. -

La bibliothèque 3D JavaScript la plus populaire est Three.js, un outil polyvalent qui rend les techniques 3D plus simples à implémenter. Il existe d'autres bibliothèques et cadres de développement de jeux populaires qui valent la peine d'être regardés ; A-FramePlayCanvas et Babylon.js sont parmi les plus reconnaissables avec une documentation riche, des éditeurs en ligne et des communautés actives.

+La bibliothèque 3D JavaScript la plus populaire est [Three.js](http://threejs.org/), un outil polyvalent qui rend les techniques 3D plus simples à implémenter. Il existe d'autres bibliothèques et cadres de développement de jeux populaires qui valent la peine d'être regardés ; [A-Frame](https://aframe.io), [PlayCanvas](https://playcanvas.com/) et [Babylon.js](http://www.babylonjs.com/) sont parmi les plus reconnaissables avec une documentation riche, des éditeurs en ligne et des communautés actives. -

Construction d'une démo de base avec A-Frame

+### Construction d'une démo de base avec A-Frame -

A-Frame est un "framework" web pour construire des expériences 3D et de la réalité virtuelle. Sous le capot, il s'agit d'un "framework" three.js avec un modèle déclaratif entité-composant, ce qui signifie que nous pouvons construire des scènes avec seulement du HTML. Voir la page Construction d'une démo de base avec A-Frame pour le processus étape par étape de création de la démo .

+A-Frame est un "framework" web pour construire des expériences 3D et de la réalité virtuelle. Sous le capot, il s'agit d'un "framework" three.js avec un modèle déclaratif entité-composant, ce qui signifie que nous pouvons construire des scènes avec seulement du HTML. Voir la page [Construction d'une démo de base avec](/fr/docs/Games/Techniques/3D_on_the_web/Building_up_a_basic_demo_with_A-Frame)[ A-Frame](/fr/docs/Games/Techniques/3D_on_the_web/Building_up_a_basic_demo_with_A-Frame) pour le processus étape par étape de création de la démo . -

Construction d'une démo de base avec Babylon.js

+### Construction d'une démo de base avec Babylon.js -

Babylon.js est l'un des moteurs de jeux 3D les plus populaires utilisés par les développeurs. Comme avec n'importe quelle autre bibliothèque 3D, il fournit des fonctions intégrées pour vous aider à implémenter les fonctionnalités 3D courantes plus rapidement. Voir la page Construction d'une démo de base avec Babylon.js sur les bases et l'utilisation de Babylon.js, y compris la mise en place d'un environnement de développement, la structuration du code HTML nécessaire et l'écriture du code JavaScript.

+Babylon.js est l'un des moteurs de jeux 3D les plus populaires utilisés par les développeurs. Comme avec n'importe quelle autre bibliothèque 3D, il fournit des fonctions intégrées pour vous aider à implémenter les fonctionnalités 3D courantes plus rapidement. Voir la page [Construction d'une démo de base avec Babylon.js](/fr/docs/Games/Techniques/3D_on_the_web/Building_up_a_basic_demo_with_Babylon.js) sur les bases et l'utilisation de Babylon.js, y compris la mise en place d'un environnement de développement, la structuration du code HTML nécessaire et l'écriture du code JavaScript. -

Construction d'une démo de base avec PlayCanvas

+### Construction d'une démo de base avec PlayCanvas -

PlayCanvas est un moteur de jeu 3D WebGL populaire ouvert sur GitHub, avec un éditeur disponible en ligne et une bonne documentation. Voir la page Construction d'une démo de base avec PlayCanvas pour des détails de haut niveau, et d'autres articles montrant comment créer des démos à l'aide de la bibliothèque PlayCanvas et de l'éditeur en ligne.

+PlayCanvas est un moteur de jeu 3D WebGL populaire ouvert sur GitHub, avec un éditeur disponible en ligne et une bonne documentation. Voir la page [Construction d'une démo de base avec PlayCanvas](/fr/docs/Games/Techniques/3D_on_the_web/Building_up_a_basic_demo_with_PlayCanvas) pour des détails de haut niveau, et d'autres articles montrant comment créer des démos à l'aide de la bibliothèque PlayCanvas et de l'éditeur en ligne. -

Construction d'une démo de base avec Three.js

+### Construction d'une démo de base avec Three.js -

Three.js, comme toute autre bibliothèque, vous donne un énorme avantage : au lieu d'écrire des centaines de lignes de code WebGL pour construire quelque chose d'intéressant, vous pouvez utiliser des fonctions intégrées pour le faire beaucoup plus facilement et plus rapidement. Voir la page Construction d'une démo de base avec Three.js  pour le processus étape par étape de création de la démo .

+Three.js, comme toute autre bibliothèque, vous donne un énorme avantage : au lieu d'écrire des centaines de lignes de code WebGL pour construire quelque chose d'intéressant, vous pouvez utiliser des fonctions intégrées pour le faire beaucoup plus facilement et plus rapidement. Voir la page [Construction d'une démo de base avec Three.js](/fr/docs/Games/Techniques/3D_on_the_web/Building_up_a_basic_demo_with_Three.js)  pour le processus étape par étape de création de la démo . -

Autres outils

+### Autres outils -

Les deux Unity et Unreal peuvent exporter votre jeu vers WebGL avec asm.js , de sorte que vous êtes libre d'utiliser leurs outils et techniques pour construire des jeux qui seront exportés vers le web.

+Les deux [Unity](http://unity3d.com/) et [Unreal](https://www.unrealengine.com/) peuvent exporter votre jeu vers [WebGL](/fr/docs/Web/API/WebGL_API) avec [asm.js](/fr/docs/Games/Tools/asm.js) , de sorte que vous êtes libre d'utiliser leurs outils et techniques pour construire des jeux qui seront exportés vers le web. -

+![](shapes.png) -

Où aller ensuite

+## Où aller ensuite -

Avec cet article, nous avons juste effleuré la surface de ce qu'il est possible de faire avec les technologies actuellement disponibles. Vous pouvez créer des jeux 3D immersifs, beaux et rapides à l'aide de WebGL, les bibliothèques et les frameworks s'appuient dessus.

+Avec cet article, nous avons juste effleuré la surface de ce qu'il est possible de faire avec les technologies actuellement disponibles. Vous pouvez créer des jeux 3D immersifs, beaux et rapides à l'aide de WebGL, les bibliothèques et les frameworks s'appuient dessus. -

Code source

+### Code source -

Vous pouvez trouver tous les codes source de cette série de démos sur GitHub.

+Vous pouvez trouver tous les codes source de cette série de [démos sur GitHub](http://end3r.github.io/MDN-Games-3D/). -

API

+### API - +- [Canvas API](/fr/docs/Web/HTML/Canvas) +- [WebGL API](/fr/docs/Web/API/WebGL_API) +- [WebVR API](/fr/docs/Web/API/WebVR_API) -

Frameworks

+### Frameworks - +- [Three.js](http://threejs.org/) +- [Whitestorm.js](http://whitestormjs.xyz/) (basé sur Three.js) +- [PlayCanvas](https://playcanvas.com/) +- [Babylon.js](http://www.babylonjs.com/) +- [A-Frame](http://aframe.io/) -

Tutorials

+### Tutorials - +- [Construction d'une démo de base avec Three.js](/fr/docs/Games/Techniques/3D_on_the_web/Building_up_a_basic_demo_with_Three.js) +- [Construction d'une démo de base avec PlayCanvas](/fr/docs/Games/Techniques/3D_on_the_web/Building_up_a_basic_demo_with_PlayCanvas) +- [Construction d'une démo de base avec Babylon.js](/fr/docs/Games/Techniques/3D_on_the_web/Building_up_a_basic_demo_with_Babylon.js) +- [Construction d'une démo de base avec](/fr/docs/Games/Techniques/3D_on_the_web/Building_up_a_basic_demo_with_A-Frame)[ A-Frame](/fr/docs/Games/Techniques/3D_on_the_web/Building_up_a_basic_demo_with_A-Frame) diff --git a/files/fr/games/techniques/audio_for_web_games/index.md b/files/fr/games/techniques/audio_for_web_games/index.md index a3bf43e413..c8b202f8ec 100644 --- a/files/fr/games/techniques/audio_for_web_games/index.md +++ b/files/fr/games/techniques/audio_for_web_games/index.md @@ -9,178 +9,173 @@ tags: - audio sprites translation_of: Games/Techniques/Audio_for_Web_Games --- -
{{GamesSidebar}}

  {{IncludeSubnav("/fr/docs/Jeux")}}

+{{GamesSidebar}} -

L'audio représente une chose essentielle dans n'importe quel jeu vidéo; il apporte de l'information et contribue à l'atmosphère du jeu. La prise en charge de l'audio a évolué de manière rapide mais il reste encore beaucoup de différences de prise en charge entre les navigateurs. Nous avons souvent besoin de décider quelles parties de notre contenu audio est intéressant et laquelle ne l'est pas, et mettre en place une stratégie en conséquence. Cet article fournit un guide détaillé sur l'implémentation de l'audio dans les jeux HTML5, détaillant quels choix technologiques fonctionneront sur le plus grand nombre de navigateurs.

+{{IncludeSubnav("/fr/docs/Jeux")}} -

Avertissement sur l'audio sur mobile

+L'audio représente une chose essentielle dans n'importe quel jeu vidéo; il apporte de l'information et contribue à l'atmosphère du jeu. La prise en charge de l'audio a évolué de manière rapide mais il reste encore beaucoup de différences de prise en charge entre les navigateurs. Nous avons souvent besoin de décider quelles parties de notre contenu audio est intéressant et laquelle ne l'est pas, et mettre en place une stratégie en conséquence. Cet article fournit un guide détaillé sur l'implémentation de l'audio dans les jeux HTML5, détaillant quels choix technologiques fonctionneront sur le plus grand nombre de navigateurs. -

Les plateformes mobiles sont de loin les plateformes où il est le plus difficile de mettre en place l'audio. Malheureusement c'est la plateforme la plus utilisée par les joueurs. Il y a certaines différences entre les plateformes de bureau (desktop) habituelles et les plateformes mobiles qui ont sûrement poussé les éditeurs de navigateur à faire des choix qui peuvent rendre difficle l'implémentation de l'audio par les utilisateurs. Regardons ensemble ces différences.

+## Avertissement sur l'audio sur mobile -

Lecture automatique

+Les plateformes mobiles sont de loin les plateformes où il est le plus difficile de mettre en place l'audio. Malheureusement c'est la plateforme la plus utilisée par les joueurs. Il y a certaines différences entre les plateformes de bureau (desktop) habituelles et les plateformes mobiles qui ont sûrement poussé les éditeurs de navigateur à faire des choix qui peuvent rendre difficle l'implémentation de l'audio par les utilisateurs. Regardons ensemble ces différences. -

Beaucoup de navigateurs mobiles vont simplement ignorer n'importe quelle requête de lancement automatique de musique faite par votre jeu; à la place, l'utilisateur va être obligé de lancer lui même la lecture via une action quelconque. Cela signifie que vous allez devoir prendre en compte cette diférence lors de l'implementation de votre lecture automatique. Ce problème est généralement atténué en chargeant l'audio à l'avance et en l'amorçant sur un événement initié par l'utilisateur.

+### Lecture automatique -

Pour une lecture automatique audio plus passive, par exemple une musique de fond qui commence dès qu'un jeu se charge, une astuce consiste à détecter l'événement * any * initié par l'utilisateur et à démarrer la lecture. Pour d'autres sons plus actifs qui seront utilisés pendant le jeu, nous pouvons envisager de les amorcer dès que l'on appuie sur un bouton de démarrage.

+Beaucoup de navigateurs mobiles vont simplement ignorer n'importe quelle requête de lancement automatique de musique faite par votre jeu; à la place, l'utilisateur va être obligé de lancer lui même la lecture via une action quelconque. Cela signifie que vous allez devoir prendre en compte cette diférence lors de l'implementation de votre lecture automatique. Ce problème est généralement atténué en chargeant l'audio à l'avance et en l'amorçant sur un événement initié par l'utilisateur. -

Pour faire primer l'audio de cette façon, nous voulons en jouer une partie ; pour cette raison, il est utile d'inclure un moment de silence à la fin de votre échantillon audio. Ce silence signifiera que nous pouvons maintenant utiliser JavaScript pour lire ce fichier à des points arbitraires.

+Pour une lecture automatique audio plus passive, par exemple une musique de fond qui commence dès qu'un jeu se charge, une astuce consiste à détecter l'événement \* any \* initié par l'utilisateur et à démarrer la lecture. Pour d'autres sons plus actifs qui seront utilisés pendant le jeu, nous pouvons envisager de les amorcer dès que l'on appuie sur un bouton de démarrage. -
-

Note : Jouer une partie de votre fichier au volume zéro pourrait également fonctionner si le navigateur vous permet de changer le volume (voir ci-dessous). Notez également que la lecture et la mise en pause immédiate de votre audio ne garantissent pas qu'un petit morceau d'audio ne sera pas lu.

-
+Pour faire primer l'audio de cette façon, nous voulons en jouer une partie ; pour cette raison, il est utile d'inclure un moment de silence à la fin de votre échantillon audio. Ce silence signifiera que nous pouvons maintenant utiliser JavaScript pour lire ce fichier à des points arbitraires. -
-

Note : L'ajout d'une application Web sur votre écran d'accueil mobile peut changer ses capacités. Dans le cas d'une lecture automatique sur iOS, cela semble être le cas actuellement. Si possible, vous devriez essayer votre code sur plusieurs appareils et platesformes pour voir comment cela fonctionne.

-
+> **Note :** Jouer une partie de votre fichier au volume zéro pourrait également fonctionner si le navigateur vous permet de changer le volume (voir ci-dessous). Notez également que la lecture et la mise en pause immédiate de votre audio ne garantissent pas qu'un petit morceau d'audio ne sera pas lu. -

Volume

+> **Note :** L'ajout d'une application Web sur votre écran d'accueil mobile peut changer ses capacités. Dans le cas d'une lecture automatique sur iOS, cela semble être le cas actuellement. Si possible, vous devriez essayer votre code sur plusieurs appareils et platesformes pour voir comment cela fonctionne. -

Le contrôle du volume programmé peut être désactivé dans les navigateurs mobiles. La raison souvent donnée est que l'utilisateur doit maîtriser le volume au niveau du système d'exploitation et cela ne doit pas être ignoré.

+### Volume -

Mise en mémoire tampon et préchargement

+Le contrôle du volume programmé peut être désactivé dans les navigateurs mobiles. La raison souvent donnée est que l'utilisateur doit maîtriser le volume au niveau du système d'exploitation et cela ne doit pas être ignoré. -

Probablement comme une tentative d'atténuation de l'utilisation des données du réseau mobile, nous trouvons souvent que la mise en mémoire tampon est désactivée avant que la lecture n'ait été lancée. La mise en mémoire tampon est le processus par lequel le navigateur télécharge le média à l'avance, ce que nous devons souvent faire pour assurer une lecture fluide.

+### Mise en mémoire tampon et préchargement -
-

Note : À bien des égards, le concept de mise en mémoire tampon est obsolète. Tant que les demandes de plage d'octets sont acceptées (ce qui est le comportement par défaut), nous devrions pouvoir sauter à un point spécifique de l'audio sans avoir à télécharger le contenu précédent. Cependant, le préchargement est toujours utile; sans cela, il faudrait toujours avoir une certaine communication client-serveur avant de commencer à jouer.

-
+Probablement comme une tentative d'atténuation de l'utilisation des données du réseau mobile, nous trouvons souvent que la mise en mémoire tampon est désactivée avant que la lecture n'ait été lancée. La mise en mémoire tampon est le processus par lequel le navigateur télécharge le média à l'avance, ce que nous devons souvent faire pour assurer une lecture fluide. -

Lecture audio simultanée

+> **Note :** À bien des égards, le concept de mise en mémoire tampon est obsolète. Tant que les demandes de plage d'octets sont acceptées (ce qui est le comportement par défaut), nous devrions pouvoir sauter à un point spécifique de l'audio sans avoir à télécharger le contenu précédent. Cependant, le préchargement est toujours utile; sans cela, il faudrait toujours avoir une certaine communication client-serveur avant de commencer à jouer. -

Une exigence de nombreux jeux est de jouer plus d'un morceau audio en même temps ; par exemple, il peut y avoir de la musique de fond et des effets sonores pour diverses actions se produisant dans le jeu. Bien que la situation évolue rapidement avec l'adoption de l' API Web Audio , la méthode actuellement la plus largement supportée, utilisant l'élément vanilla {{htmlelement ("audio")}}, produit des résultats inégaux sur les appareils mobiles.

+### Lecture audio simultanée -

Test et support

+Une exigence de nombreux jeux est de jouer plus d'un morceau audio en même temps ; par exemple, il peut y avoir de la musique de fond et des effets sonores pour diverses actions se produisant dans le jeu. Bien que la situation évolue rapidement avec l'adoption de l' [API Web Audio](/fr/docs/Web/API/Web_Audio_API) , la méthode actuellement la plus largement supportée, utilisant l'élément vanilla {{htmlelement ("audio")}}, produit des résultats inégaux sur les appareils mobiles. -

Voici un tableau qui montre quelles plateformes mobiles prennent en charge les fonctionnalités mentionnées ci-dessus.

+### Test et support + +Voici un tableau qui montre quelles plateformes mobiles prennent en charge les fonctionnalités mentionnées ci-dessus. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Mobile support for web audio features
Navigateur de mobileVersionLecture simultanéeLecture automatiqueAjustement du volumePréchargement
Chrome (Android)32+OuiNonNonNon
Firefox (Android)26+OuiOuiNonNon
Firefox OS1.2+OuiOuiOuiOui
IE Mobile11+OuiOuiNonOui
Opera Mobile11+NonNonNonNon
Safari (iOS)7+Oui/Non*NonNonOui
Android Browser2.3+NonNonNonNon
+ Mobile support for web audio features +
Navigateur de mobileVersionLecture simultanéeLecture automatiqueAjustement du volumePréchargement
Chrome (Android)32+OuiNonNonNon
Firefox (Android)26+OuiOuiNonNon
Firefox OS1.2+OuiOuiOuiOui
IE Mobile11+OuiOuiNonOui
Opera Mobile11+NonNonNonNon
Safari (iOS)7+Oui/Non*NonNonOui
Android Browser2.3+NonNonNonNon
-
-

Note : Safari 7 a des problèmes à jouer si vous essayez de démarrer tous les morceaux audio simultanément. Si vous échelonnez la lecture, vous aurez peut-être un certain succès.

-
+> **Note :** Safari 7 a des problèmes à jouer si vous essayez de démarrer tous les morceaux audio simultanément. Si vous échelonnez la lecture, vous aurez peut-être un certain succès. -
-

Note : La lecture audio simultanée est testée à l'aide de notre exemple de test audio simultané, avec lequel nous essayons de lire trois morceaux en même temps en utilisant l'API audio standard.

-
+> **Note :** La lecture audio simultanée est testée à l'aide de notre [exemple de test audio simultané](http://jsfiddle.net/dmkyaq0r/), avec lequel nous essayons de lire trois morceaux en même temps en utilisant l'API audio standard. -
-

Note : La fonctionnalité de lecture automatique simple est testée avec notre exemp;e test lecture automatique.

-
+> **Note :** La fonctionnalité de lecture automatique simple est testée avec notre [exemp;e test lecture automatique](http://jsfiddle.net/vpdspp2b/). -
-

Note : La variabilité du volume est testée avec notre exemple test volume.

-
+> **Note :** La variabilité du volume est testée avec notre [exemple test volume](http://jsfiddle.net/7ta12vw4/). -

Solutions de contournement pour mobile

+## Solutions de contournement pour mobile -

Bien que les navigateurs mobiles puissent présenter les problèmes évoqués ci-dessus, il existe des moyens de les contourner.

+Bien que les navigateurs mobiles puissent présenter les problèmes évoqués ci-dessus, il existe des moyens de les contourner. -

Les "sprites" audio

+### Les "sprites" audio -

Les "sprites" audio empruntent leur nom aux "sprites" CSS ; c'est une technique visuelle permettant d'utiliser CSS avec une seule ressource graphique pour la découper en une série d'objets-images. Nous pouvons appliquer le même principe à l'audio, au lieu de disposer d'un petit nombre de petits fichiers audio qui prennent du temps à charger et à lire, nous avons un fichier audio plus grand contenant tous les fragments audio plus petits dont nous avons besoin. Pour lire un son spécifique à partir du fichier, nous utilisons simplement les périodes de début et de fin connues pour chaque "sprite" audio.

+Les "sprites" audio empruntent leur nom aux ["sprites" CSS](/fr/docs/Web/CSS/CSS_Images/Sprites_CSS) ; c'est une technique visuelle permettant d'utiliser CSS avec une seule ressource graphique pour la découper en une série d'objets-images. Nous pouvons appliquer le même principe à l'audio, au lieu de disposer d'un petit nombre de petits fichiers audio qui prennent du temps à charger et à lire, nous avons un fichier audio plus grand contenant tous les fragments audio plus petits dont nous avons besoin. Pour lire un son spécifique à partir du fichier, nous utilisons simplement les périodes de début et de fin connues pour chaque "sprite" audio. -

L'avantage est que nous pouvons amorcer un morceau d'audio et avoir nos "sprites" prêts à partir. Pour ce faire, nous pouvons juste jouer et mettre en pause instantanément la plus grande partie de l'audio. Nous réduisons également le nombre de demandes de serveur et économisons de la bande passante.

+L'avantage est que nous pouvons amorcer un morceau d'audio et avoir nos "sprites" prêts à partir. Pour ce faire, nous pouvons juste jouer et mettre en pause instantanément la plus grande partie de l'audio. Nous réduisons également le nombre de demandes de serveur et économisons de la bande passante. -
var myAudio = document.createElement("audio");
+```js
+var myAudio = document.createElement("audio");
 myAudio.src = "mysprite.mp3";
 myAudio.play();
-myAudio.pause();
+myAudio.pause(); +``` -

Vous aurez besoin d'échantillonner l'heure actuelle pour savoir quand l'arrêter. Si vous espacez vos sons individuels d'au moins 500 ms, l'utilisation de l'événement timeUpdate (qui se déclenche toutes les 250 ms) devrait suffire. Vos fichiers peuvent être légèrement plus longs que ce qu'ils devraient être, mais le silence se compresse bien.

+Vous aurez besoin d'échantillonner l'heure actuelle pour savoir quand l'arrêter. Si vous espacez vos sons individuels d'au moins 500 ms, l'utilisation de l'événement `timeUpdate` (qui se déclenche toutes les 250 ms) devrait suffire. Vos fichiers peuvent être légèrement plus longs que ce qu'ils devraient être, mais le silence se compresse bien. -

Voici un exemple d'un lecteur de "sprite" audio - nous allons d'abord configurer l'interface utilisateur en HTML :

+Voici un exemple d'un lecteur de "sprite" audio - nous allons d'abord configurer l'interface utilisateur en HTML : -
lt;audio id="myAudio" src="http://jPlayer.org/tmp/countdown.mp3"></audio>
-<button data-start="18" data-stop="19">0</button>
-<button data-start="16" data-stop="17">1</button>
-<button data-start="14" data-stop="15">2</button>
-<button data-start="12" data-stop="13">3</button>
-<button data-start="10" data-stop="11">4</button>
-<button data-start="8"  data-stop="9">5</button>
-<button data-start="6"  data-stop="7">6</button>
-<button data-start="4"  data-stop="5">7</button>
-<button data-start="2"  data-stop="3">8</button>
-<button data-start="0"  data-stop="1">9</button>
+```html +lt;audio id="myAudio" src="http://jPlayer.org/tmp/countdown.mp3"> + + + + + + + + + + +``` -

Maintenant, nous avons des boutons avec des heures de début et de fin en quelques secondes. Le fichier MP3 "countdown.mp3" se compose d'un numéro qui est prononcé toutes les 2 secondes, l'idée étant de lire ce numéro lorsque le bouton correspondant est pressé.

+Maintenant, nous avons des boutons avec des heures de début et de fin en quelques secondes. Le fichier MP3 "countdown.mp3" se compose d'un numéro qui est prononcé toutes les 2 secondes, l'idée étant de lire ce numéro lorsque le bouton correspondant est pressé. -

Ajoutons du JavaScript pour que ça marche:

+Ajoutons du JavaScript pour que ça marche: -
var myAudio = document.getElementById('myAudio');
+```js
+var myAudio = document.getElementById('myAudio');
 var buttons = document.getElementsByTagName('button');
 var stopTime = 0;
 
-for (var i = 0; i < buttons.length; i++) {
+for (var i = 0; i < buttons.length; i++) {
   buttons[i].addEventListener('click', function() {
     myAudio.currentTime = this.getAttribute("data-start");
     stopTime = this.getAttribute("data-stop");
@@ -189,70 +184,66 @@ for (var i = 0; i < buttons.length; i++) {
 }
 
 myAudio.addEventListener('timeupdate', function() {
-  if (this.currentTime > stopTime) {
+  if (this.currentTime > stopTime) {
     this.pause();
   }
-}, false);
+}, false); +``` + +> **Note :** Vous pouvez [essayer notre lecteur de sprite audio](http://jsfiddle.net/59vwaame/) sur JSFiddle. -
-

Note : Vous pouvez essayer notre lecteur de sprite audio sur JSFiddle.

-
+> **Note :** Sur mobile nous pouvons avoir besoin de déclencher ce code à partir d'un événement initié par l'utilisateur, tel qu'un bouton de démarrage pressé, comme décrit ci-dessus. -
-

Note : Sur mobile nous pouvons avoir besoin de déclencher ce code à partir d'un événement initié par l'utilisateur, tel qu'un bouton de démarrage pressé, comme décrit ci-dessus.

-
+> **Note :** Attention aux débits binaires. L'encodage de votre audio à des débits binaires inférieurs signifie des tailles de fichier plus petites, mais une précision de recherche plus faible. -
-

Note : Attention aux débits binaires. L'encodage de votre audio à des débits binaires inférieurs signifie des tailles de fichier plus petites, mais une précision de recherche plus faible.

-
+## Musique de fond -

Musique de fond

+La musique dans les jeux peut avoir un effet émotionnel puissant. Vous pouvez mélanger et assortir divers échantillons de musique et, en supposant que vous pouvez contrôler le volume de votre élément audio, vous pouvez fondre différentes pièces musicales. En utilisant la méthode [`playbackRate()`](/fr/Apps/Fundamentals/Audio_and_video_delivery/WebAudio_playbackRate_explained) , vous pouvez même ajuster la vitesse de votre musique sans affecter la hauteur, pour mieux la synchroniser avec l'action. -

La musique dans les jeux peut avoir un effet émotionnel puissant. Vous pouvez mélanger et assortir divers échantillons de musique et, en supposant que vous pouvez contrôler le volume de votre élément audio, vous pouvez fondre différentes pièces musicales. En utilisant la méthode playbackRate() , vous pouvez même ajuster la vitesse de votre musique sans affecter la hauteur, pour mieux la synchroniser avec l'action.
-
- Tout ceci est possible en utilisant l'élément standard {{HTMLElement ("audio")}} associé à l'API {{domxref("HTMLMediaElement")}} , mais il devient beaucoup plus facile et flexible avec l'API Web Audio.

+Tout ceci est possible en utilisant l'élément standard {{HTMLElement ("audio")}} associé à l'API {{domxref("HTMLMediaElement")}} , mais il devient beaucoup plus facile et flexible avec l'[API Web Audio](/fr/docs/Web/API/Web_Audio_API). -

API Web Audio pour les jeux

+## API Web Audio pour les jeux -

Maintenant qu'il est supporté dans tous les navigateurs modernes à l'exception d'Opera Mini et d'Internet Explorer (bien que Microsoft travaille maintenant dessus), une approche acceptable pour de nombreuses situations est d'utiliser l'API Web Audio (voir la page Puis-je utiliser l'API Web Audio ? pour plus d'informations sur la compatibilité du navigateur). L'API Web Audio est une API JavaScript audio avancée, idéale pour l'audio du jeu. Les développeurs peuvent générer de l'audio et manipuler des échantillons audio tout en positionnant le son dans l'espace de jeu 3D.

+Maintenant qu'il est supporté dans tous les navigateurs modernes à l'exception d'Opera Mini et d'Internet Explorer ([bien que Microsoft travaille maintenant dessus](https://developer.microsoft.com/en-us/microsoft-edge/platform/status/webaudioapi/)), une approche acceptable pour de nombreuses situations est d'utiliser l'[API Web Audio](/fr/docs/Web/API/Web_Audio_API) (voir la page [Puis-je utiliser l'API Web Audio ?](http://caniuse.com/#search=web%20audio%20api) pour plus d'informations sur la compatibilité du navigateur). L'API Web Audio est une API JavaScript audio avancée, idéale pour l'audio du jeu. Les développeurs peuvent générer de l'audio et manipuler des échantillons audio tout en positionnant le son dans l'espace de jeu 3D. -

Une stratégie inter-navigateurs envisageable serait de fournir un son basique à l'aide de l'élément standard {{HTMLElement ("audio")}} et, là où cela est pris en charge, d'améliorer l'expérience en utilisant l'API Web Audio.

+Une stratégie inter-navigateurs envisageable serait de fournir un son basique à l'aide de l'élément standard {{HTMLElement ("audio")}} et, là où cela est pris en charge, d'améliorer l'expérience en utilisant l'API Web Audio. -
-

Note : De manière significative, iOS Safari prend désormais en charge l'API Web Audio, ce qui signifie qu'il est désormais possible d'écrire des jeux Web avec de l'audio de qualité native pour iOS.

-
+> **Note :** De manière significative, iOS Safari prend désormais en charge l'API Web Audio, ce qui signifie qu'il est désormais possible d'écrire des jeux Web avec de l'audio de qualité native pour iOS. -

Comme l'API Web Audio permet un timing et un contrôle précis de la lecture audio, nous pouvons l'utiliser pour jouer des échantillons à des moments spécifiques, ce qui est un aspect immersif crucial du jeu. Vous voulez que ces explosions soient accompagnées par un boom tonitruant, pas l'un après les autres, après tout.

+Comme l'API Web Audio permet un timing et un contrôle précis de la lecture audio, nous pouvons l'utiliser pour jouer des échantillons à des moments spécifiques, ce qui est un aspect immersif crucial du jeu. Vous voulez que ces explosions soient **accompagnées** par un boom tonitruant, pas **l'un après les autres**, après tout. -

Musique de fond avec l'API Web Audio

+### Musique de fond avec l'API Web Audio -

Bien que nous puissions utiliser l'élément {{HTMLElement ("audio")}} pour fournir une musique de fond linéaire, qui ne change pas en réaction à l'environnement du jeu, l'API Web Audio est idéale pour implémenter une expérience musicale plus dynamique. Vous pouvez vouloir que la musique change selon que vous essayez de créer du suspense ou d'encourager le joueur d'une manière ou d'une autre. La musique est une partie importante de l'expérience de jeu et, selon le type de jeu, vous voudrez peut-être investir des efforts considérables pour bien faire les choses.

+Bien que nous puissions utiliser l'élément {{HTMLElement ("audio")}} pour fournir une musique de fond linéaire, qui ne change pas en réaction à l'environnement du jeu, l'API Web Audio est idéale pour implémenter une expérience musicale plus dynamique. Vous pouvez vouloir que la musique change selon que vous essayez de créer du suspense ou d'encourager le joueur d'une manière ou d'une autre. La musique est une partie importante de l'expérience de jeu et, selon le type de jeu, vous voudrez peut-être investir des efforts considérables pour bien faire les choses. -

Une façon de rendre votre musique plus dynamique est de la diviser en boucles ou en pistes de composant. C'est souvent la façon dont les musiciens composent la musique de toute façon, et l'API Web Audio est extrêmement efficace pour garder ces parties synchronisées. Une fois que vous avez les différentes pistes qui composent votre morceau, vous pouvez apporter des pistes ou en retirer de la façon appropriée.

+Une façon de rendre votre musique plus dynamique est de la diviser en boucles ou en pistes de composant. C'est souvent la façon dont les musiciens composent la musique de toute façon, et l'API Web Audio est extrêmement efficace pour garder ces parties synchronisées. Une fois que vous avez les différentes pistes qui composent votre morceau, vous pouvez apporter des pistes ou en retirer de la façon appropriée. -

Vous pouvez également appliquer des filtres ou des effets à la musique. Votre personnage est-il dans une grotte ? Augmentez l'écho. Peut-être que vous avez des scènes sous-marines, alors appliquez un filtre qui étouffe le son.

+Vous pouvez également appliquer des filtres ou des effets à la musique. Votre personnage est-il dans une grotte ? Augmentez l'écho. Peut-être que vous avez des scènes sous-marines, alors appliquez un filtre qui étouffe le son. -

Regardons quelques techniques de l'API Web Audio pour ajuster dynamiquement la musique à partir de ses pistes de base.

+Regardons quelques techniques de l'API Web Audio pour ajuster dynamiquement la musique à partir de ses pistes de base. -

Chargement des pistes

+### Chargement des pistes -

Avec l'API Web Audio, vous pouvez charger individuellement des pistes et des boucles séparées en utilisant XMLHttpRequest, ce qui signifie que vous pouvez les charger de manière synchrone ou en parallèle. Le chargement synchrone peut signifier que certaines parties de votre musique sont prêtes plus tôt et vous pouvez commencer à les jouer pendant que d'autres se chargent.

+Avec l'API Web Audio, vous pouvez charger individuellement des pistes et des boucles séparées en utilisant [`XMLHttpRequest`](/fr/docs/Web/API/XMLHttpRequest), ce qui signifie que vous pouvez les charger de manière synchrone ou en parallèle. Le chargement synchrone peut signifier que certaines parties de votre musique sont prêtes plus tôt et vous pouvez commencer à les jouer pendant que d'autres se chargent. -

De toute façon, vous pouvez vouloir synchroniser des pistes ou des boucles. L'API Web Audio contient la notion d'horloge interne qui commence à cocher le moment où vous créez un contexte audio. Vous devez prendre en compte le temps entre la création d'un contexte audio et le moment où la première piste audio commence à jouer. L'enregistrement de ce décalage et l'interrogation de l'heure actuelle de la piste de lecture vous donnent suffisamment d'informations pour synchroniser des morceaux audio distincts.

+De toute façon, vous pouvez vouloir synchroniser des pistes ou des boucles. L'API Web Audio contient la notion d'horloge interne qui commence à cocher le moment où vous créez un contexte audio. Vous devez prendre en compte le temps entre la création d'un contexte audio et le moment où la première piste audio commence à jouer. L'enregistrement de ce décalage et l'interrogation de l'heure actuelle de la piste de lecture vous donnent suffisamment d'informations pour synchroniser des morceaux audio distincts. -

Pour voir cela en action, mettons en place des pistes distinctes :

+Pour voir cela en action, mettons en place des pistes distinctes : -
ul>
-  <li><a class="track" href="http://jPlayer.org/audio/mp3/gbreggae-leadguitar.mp3">Lead Guitar</a></li>
-  <li><a class="track" href="http://jPlayer.org/audio/mp3/gbreggae-drums.mp3">Drums</a></li>
-  <li><a class="track" href="http://jPlayer.org/audio/mp3/gbreggae-bassguitar.mp3">Bass Guitar</a></li>
-  <li><a class="track" href="http://jPlayer.org/audio/mp3/gbreggae-horns.mp3">Horns</a></li>
-  <li><a class="track" href="http://jPlayer.org/audio/mp3/gbreggae-clav.mp3">Clavi</a></li>
-</ul>
+```html +ul> +
  • Lead Guitar
  • +
  • Drums
  • +
  • Bass Guitar
  • +
  • Horns
  • +
  • Clavi
  • + +``` -

    Toutes ces pistes ont le même tempo et sont conçues pour être synchronisées les unes avec les autres.

    +Toutes ces pistes ont le même tempo et sont conçues pour être synchronisées les unes avec les autres. -
    window.AudioContext = window.AudioContext || window.webkitAudioContext;
    +```js
    +window.AudioContext = window.AudioContext || window.webkitAudioContext;
     
     var offset = 0;
     var context = new AudioContext();
    @@ -294,45 +285,41 @@ function playTrack(url) {
     
     var tracks = document.getElementsByClassName('track');
     
    -for (var i = 0, len = tracks.length; i < len; i++) {
    +for (var i = 0, len = tracks.length; i < len; i++) {
       tracks[i].addEventListener('click', function(e){
     
         playTrack(this.href);
         e.preventDefault();
       });
    -}
    +} +``` + +> **Note :** Vous pouvez essayer notre [démo multipiste API Web Audio](http://jsfiddle.net/c87z11jj/1/) sur JSFiddle. -
    -

    Note : Vous pouvez essayer notre démo multipiste API Web Audio sur JSFiddle.

    -
    +Regardons maintenant le code. Nous créons d'abord un nouveau {{domxref ("AudioContext")}} et créons une fonction `(playTrack ())` qui charge et commence à jouer une piste. -

    Regardons maintenant le code. Nous créons d'abord un nouveau {{domxref ("AudioContext")}} et créons une fonction (playTrack ()) qui charge et commence à jouer une piste.

    +`start()` (anciennement appelé `noteOn ())` commence à lire un élément audio. `start ()` demande trois paramètres (facultatifs) : -

    start() (anciennement appelé noteOn ()) commence à lire un élément audio. start () demande trois paramètres (facultatifs) :

    +1. when _(quand)_ : le temps absolu pour commencer la lecture . +2. where (offset) _(où)_ : la partie de l'audio qui doit commencer à être jouée. +3. how long _(combien de temps)_ : la durée pendant laquelle elle doit être jouée. -
      -
    1. when (quand) : le temps absolu pour commencer la lecture .
    2. -
    3. where (offset) (où) : la partie de l'audio qui doit commencer à être jouée.
    4. -
    5. how long (combien de temps) : la durée pendant laquelle elle doit être jouée.
    6. -
    +`stop()` prend un paramètre facultatif - when - qui est le délai avant l'arrêt. -

    stop() prend un paramètre facultatif - when - qui est le délai avant l'arrêt.
    -
    - Si le second paramètre de start () — the offset (le décalage) — est nul, nous commençons à jouer dès le début l'audio donné ; ce que nous faisons en premier. Nous stockons ensuite le {{domxref ("AudioContext.currentTime")}} — le décalage de la première lecture de la pièce, soustrayons celle des temps actuels pour calculer l'heure réelle, et utilisons cela pour synchroniser nos pistes.
    -
    - Dans le contexte de votre monde de jeu, vous pouvez avoir des boucles et des échantillons qui sont joués dans différentes circonstances, et il peut être utile de pouvoir les synchroniser avec d'autres pistes pour une expérience plus transparente.

    +Si le second paramètre de `start ()` — the offset (_le décalage_) — est nul, nous commençons à jouer dès le début l'audio donné ; ce que nous faisons en premier. Nous stockons ensuite le {{domxref ("AudioContext.currentTime")}} — le décalage de la première lecture de la pièce, soustrayons celle des temps actuels pour calculer l'heure réelle, et utilisons cela pour synchroniser nos pistes. -
    -

    Note : Cet exemple n'attend pas la fin du battement avant d'introduire le morceau suivant; nous pourrions le faire si nous connaissions le BPM (battement par minute) des pistes.

    -
    +Dans le contexte de votre monde de jeu, vous pouvez avoir des boucles et des échantillons qui sont joués dans différentes circonstances, et il peut être utile de pouvoir les synchroniser avec d'autres pistes pour une expérience plus transparente. -

    Vous pouvez trouver que l'introduction d'une nouvelle piste sonne plus naturelle si elle entre dans le battement, la mesure ou la phrase, selon l'unité que vous voulez pour votre musique de fond.

    +> **Note :** Cet exemple n'attend pas la fin du battement avant d'introduire le morceau suivant; nous pourrions le faire si nous connaissions le BPM (battement par minute) des pistes. -

    Pour ce faire, avant de jouer la piste que vous voulez synchroniser, vous devez calculer combien de temps cela va durer jusqu'au début de la prochaine unité musicale.

    +Vous pouvez trouver que l'introduction d'une nouvelle piste sonne plus naturelle si elle entre dans le battement, la mesure ou la phrase, selon l'unité que vous voulez pour votre musique de fond. -

    Voici un peu de code qui donne un tempo (le temps en secondes de votre battement / mesure), calcule combien de temps attendre pour jouer la partie suivante  — vous alimentez la valeur initiale de la fonction start () avec le premier paramètre qui prend le temps absolu de début de la lecture. Notez que le deuxième paramètre (où commencer à jouer à partir de la nouvelle piste) est relatif :

    +Pour ce faire, avant de jouer la piste que vous voulez synchroniser, vous devez calculer combien de temps cela va durer jusqu'au début de la prochaine unité musicale. -
    if (offset == 0) {
    +Voici un peu de code qui donne un tempo (le temps en secondes de votre battement / mesure), calcule combien de temps attendre pour jouer la partie suivante  — vous alimentez la valeur initiale de la fonction `start ()` avec le premier paramètre qui prend le temps absolu de début de la lecture. Notez que le deuxième paramètre (où commencer à jouer à partir de la nouvelle piste) est relatif :
    +
    +```js
    +if (offset == 0) {
       source.start();
       offset = context.currentTime;
     } else {
    @@ -341,45 +328,35 @@ for (var i = 0, len = tracks.length; i < len; i++) {
       var remainder = beats - Math.floor(beats);
       var delay = tempo - (remainder*tempo);
       source.start(context.currentTime+delay, relativeTime+delay);
    -}
    +} +``` -
    -

    Note : Ici, vous pouvez essayer notre code calculateur d'attente , sur JSFiddle (synchronisé à la mesure).

    -
    +> **Note :** Ici, vous pouvez [essayer notre code calculateur d'attente](http://jsfiddle.net/c87z11jj/2/) , sur JSFiddle (synchronisé à la mesure). -
    -

    Note : Si le premier paramètre est 0 ou inférieur au contexte currentTime, la musique commence immédiatement.

    -
    +> **Note :** Si le premier paramètre est 0 ou inférieur au contexte `currentTime`, la musique commence immédiatement. -

    Audio positionnel

    +### Audio positionnel -

    L'audio positionnel peut être une technique importante pour faire de l'audio un élément clé d'une expérience de jeu immersive. L'API Web Audio permet non seulement de positionner un certain nombre de sources audio dans un espace tridimensionnel, mais également d'appliquer des filtres qui rendent cet audio plus réaliste.

    +L'audio positionnel peut être une technique importante pour faire de l'audio un élément clé d'une expérience de jeu immersive. L'API Web Audio permet non seulement de positionner un certain nombre de sources audio dans un espace tridimensionnel, mais également d'appliquer des filtres qui rendent cet audio plus réaliste. -

    En bref, en utilisant les capacités positionnelles de l'API Web Audio, nous pouvons relier d'autres informations sur le monde du jeu pour le joueur.

    +En bref, en utilisant les capacités positionnelles de l'API Web Audio, nous pouvons relier d'autres informations sur le monde du jeu pour le joueur. -

    Nous pouvons relier :

    +Nous pouvons relier : -
      -
    • la position des objets
    • -
    • la direction des objets (mouvement de position et génération de l'effet Doppler)
    • -
    • l'environnement (caverneux, sous-marin, etc.)
    • -
    +- la position des objets +- la direction des objets (mouvement de position et génération de l'effet Doppler) +- l'environnement (caverneux, sous-marin, etc.) -

    Ceci est particulièrement utile dans un environnement tridimensionnel rendu en utilisant WebGL, avec lequel l'API Web Audio permet d'associer l'audio aux objets et aux points de vue .

    +Ceci est particulièrement utile dans un environnement tridimensionnel rendu en utilisant [WebGL](/fr/docs/Web/API/WebGL_API), avec lequel l'API Web Audio permet d'associer l'audio aux objets et aux points de vue . -
    -

    Note : Voir Web Audio API Spatialization Basics (Bases de la spacialisation de l'API Web Audio) pour plus de détails.

    -
    +> **Note :** Voir [Web Audio API Spatialization Basics](/fr/docs/Web/API/Web_Audio_API/Web_audio_spatialization_basics) _(Bases de la spacialisation de l'API Web Audio)_ pour plus de détails. -

    See Also

    +## See Also - +- [Web Audio API sur MDN](/fr/docs/Web/API/Web_Audio_API) +- [`