Pong rodando em 240 abas do navegador
(eieio.games)Rodando Pong em 240 abas do navegador
- Aproveitando abas não utilizadas: O jogo Pong é executado organizando 240 abas do navegador em uma grade 8x30. A bola e as raquetes podem se mover suavemente entre o canvas da janela em primeiro plano e todas as abas.
Inspiração
- Flappy Favi: A inspiração veio do fato de o amigo Tru ter criado uma versão de Flappy Bird rodando em favicons. Como os favicons são pequenos e difíceis de ver, surgiu a ideia de desenhar a imagem em várias abas.
Prototipagem
- Criação da grade de abas: Usando AppleScript, foram abertas 30 abas em cada uma de 8 janelas do Chrome, e as janelas foram posicionadas adequadamente para formar uma grande grade. No início, o script também limpa o comportamento do Chrome de reabrir abas fechadas.
Atualização rápida de favicon
-
Atualização de favicon: Ao especificar a localização do favicon no elemento
headdo HTML, o navegador é levado a alterar o ícone. O Chrome consegue atualizar o ícone cerca de 4 vezes por segundo. Em abas em segundo plano, o loop desetIntervalroda apenas uma vez por segundo. -
Uso de Web Workers: Para que funcione suavemente mesmo em abas em segundo plano, Web Workers são usados para fazer o temporizador enviar mensagens ao documento principal.
Comunicação entre abas
-
Reconhecimento da posição da aba: O código AppleScript passa a janela atual e o índice da aba como parâmetros de consulta, para que cada aba saiba sua própria posição.
-
Uso de Broadcast Channel: Em vez de WebSockets, é usado Broadcast Channel para distribuir informações a outras abas no mesmo domínio. A aba principal executa a animação depois de receber eventos de registro de todas as abas em segundo plano.
Do canvas para a barra de abas
- Conexão entre canvas e barra de abas: Foi implementado um modo de fazer com que formas desenhadas na janela em primeiro plano se movam para a barra de abas. Com medições precisas, o canvas e os favicons são alinhados, e o desenho é feito no favicon e no canvas principal de acordo com a posição da forma.
Ganho de velocidade
- Otimização do uso de recursos: O desempenho foi melhorado ao atualizar o favicon não a cada frame, mas apenas quando há mudanças.
O que fazer?
- Ideia de jogo: A intenção inicial era implementar Snake, mas concluiu-se que Pong produziria um efeito melhor ao se mover entre o canvas e a barra de abas, então a escolha foi Pong.
Implementação do Pong
- Implementação do jogo Pong: O jogador controlado pelo computador ajusta o centro da raquete ao centro da bola. Quando a bola rebate na raquete, o ângulo é calculado com trigonometria simples. Para destacar o efeito de a bola e as raquetes se moverem suavemente como favicons, foi adicionado um rastro à bola.
Encerramento
- Experiência com o projeto: Este projeto foi desenvolvido no Recurse Center e trouxe muita inspiração. O Recurse Center é como um retiro de escritores para programação, e a experiência ali serviu de motivação para o projeto.
1 comentários
Comentários do Hacker News
Olá! Fui eu que fiz isso. Fiquei curioso para saber se isso agradaria à comunidade do HN
Assisti recentemente à palestra do Nolen na Recurse, e esses jogos absolutamente malucos, mas fundamentalmente divertidos e legais, são muito cativantes
Adoro tudo o que o Nolen faz. Para mim, parece que ele encontrou um ponto ideal ao desenvolver apps/sites de propósito único que me fazem lembrar de como a internet costumava ser
Uma exploração semelhante de Matthew Rayfield usando a barra de URL em vez do favicon da aba: link
Isso me lembra:
Estou chamando que Doom é o próximo
Deliciosamente absurdo, esforço nota A+
A banda "Ok Go" tinha um videoclipe em colaboração com o Google Chrome, com uma sincronização impressionante entre janelas do navegador e dançarinos, além de efeitos caleidoscópicos... isso me fez lembrar daquilo
Acho que um port de Doom deve aparecer em alguns dias
Muito legal, gosto de como o Chrome pode ser tão modificável; isto parece usar WebSockets, mas também dá para usar extensões para comunicação entre abas