Pong exécuté dans 240 onglets de navigateur
(eieio.games)Exécuter Pong dans 240 onglets de navigateur
- Utilisation des onglets inutilisés : le jeu Pong est exécuté en disposant 240 onglets de navigateur en une grille 8x30. La balle et les raquettes peuvent se déplacer de façon fluide entre le canvas de la fenêtre au premier plan et l’ensemble des onglets.
Inspiration
- Flappy Favi : l’idée est née après avoir vu un ami, Tru, créer une version de Flappy Bird qui s’exécute dans un favicon. Comme le favicon est petit et difficile à voir, l’auteur a imaginé dessiner l’image sur plusieurs onglets.
Prototypage
- Création de la grille d’onglets : un AppleScript ouvre 30 onglets dans chacune de 8 fenêtres Chrome, puis place correctement les fenêtres pour former une grande grille. Au démarrage, le script nettoie aussi les onglets rouverts automatiquement par Chrome afin de contourner ce comportement.
Mise à jour rapide des favicons
-
Mise à jour des favicons : en indiquant l’emplacement du favicon dans l’élément
headdu HTML, le navigateur est amené à modifier l’icône. Chrome peut mettre à jour l’icône environ 4 fois par seconde. Dans les onglets en arrière-plan, la bouclesetIntervalne s’exécute qu’une fois par seconde. -
Utilisation de Web Workers : des Web Workers sont utilisés pour faire envoyer des messages de temporisation au document principal, afin que cela fonctionne de manière fluide même dans les onglets en arrière-plan.
Communication entre les onglets
-
Repérage de la position des onglets : le code AppleScript transmet l’index de la fenêtre et de l’onglet actuel via des paramètres de requête, afin que chaque onglet puisse connaître sa propre position.
-
Utilisation de Broadcast Channel : au lieu de WebSocket, Broadcast Channel est utilisé pour diffuser des informations aux autres onglets du même domaine. L’onglet principal lance ensuite l’animation après avoir reçu les événements d’enregistrement de tous les onglets en arrière-plan.
Du canvas à la barre d’onglets
- Connexion entre le canvas et la barre d’onglets : les formes dessinées dans la fenêtre au premier plan peuvent se déplacer jusque dans la barre d’onglets. Grâce à des mesures précises, le canvas et les favicons sont alignés, puis le dessin est envoyé vers le favicon ou le canvas principal selon la position des formes.
Accélération
- Optimisation de l’utilisation des ressources : au lieu de mettre à jour les favicons à chaque frame, ils ne sont actualisés que lorsqu’un changement se produit, ce qui améliore les performances.
Que fabriquer ?
- Idée de jeu : Snake devait être implémenté en premier, mais Pong a finalement été choisi car l’effet de déplacement entre le canvas et la barre d’onglets y fonctionne mieux.
Implémentation de Pong
- Implémentation du jeu Pong : le joueur contrôlé par l’ordinateur aligne le centre de la raquette sur celui de la balle. Quand la balle rebondit sur une raquette, un angle est calculé avec une trigonométrie simple. Une traînée a été ajoutée à la balle pour mieux mettre en valeur son passage fluide vers les favicons avec les raquettes.
Conclusion
- Expérience du projet : ce projet a été réalisé au Recurse Center, une source d’inspiration importante. Le Recurse Center est présenté comme une sorte de retraite d’écriture pour la programmation, et l’expérience vécue sur place a servi de motivation au projet.
1 commentaires
Commentaires Hacker News
Bonjour ! C'est moi qui l'ai fait. Je me demandais si ça plairait à la communauté HN
J’ai assisté récemment à la conférence de Nolen chez Recurse, et ces jeux absolument délirants mais fondamentalement amusants et géniaux sont vraiment fascinants
J’adore tout ce que fait Nolen. Pour moi, il semble avoir trouvé ce point d’équilibre parfait dans le développement d’apps/sites à usage unique qui rappellent l’époque où Internet était différent
Une exploration similaire de Matthew Rayfield, utilisant la barre d’URL au lieu des favicons d’onglet : lien
Ça me fait penser à :
J’annonce que Doom sera le prochain
Agréablement absurde, et un effort méritant un A+
Il y avait un clip du groupe "Ok Go" en collaboration avec Google Chrome, avec une synchronisation incroyable entre des fenêtres de navigateur et des danseurs, ainsi que des effets kaléidoscopiques... ça m’y fait penser
On dirait bien qu’un port de Doom va arriver d’ici quelques jours
Vraiment génial, j’aime à quel point Chrome peut être modifié ; ici, on dirait que ça utilise des WebSockets, mais on pourrait aussi utiliser des extensions pour la communication entre onglets