Pong chạy trên 240 tab trình duyệt
(eieio.games)Chạy Pong trên 240 tab trình duyệt
- Tận dụng các tab không dùng đến: Sắp xếp 240 tab trình duyệt thành lưới 8x30 để chạy trò chơi Pong. Quả bóng và các thanh đỡ có thể di chuyển mượt mà giữa canvas của cửa sổ foreground và tất cả các tab.
Cảm hứng
- Flappy Favi: Lấy cảm hứng từ việc người bạn Tru tạo ra một phiên bản Flappy Bird chạy trong favicon. Vì favicon quá nhỏ và khó nhìn, tác giả nảy ra ý tưởng vẽ hình ảnh trên nhiều tab.
Tạo nguyên mẫu
- Tạo lưới tab: Dùng AppleScript để mở 30 tab trong mỗi một trong 8 cửa sổ Chrome, rồi sắp xếp các cửa sổ phù hợp để tạo thành một lưới lớn. Script cũng dọn dẹp phần này khi khởi động để xử lý đặc tính của Chrome là tự mở lại các tab đã đóng.
Cập nhật favicon nhanh
-
Cập nhật favicon: Chỉ định vị trí favicon trong phần tử
headcủa HTML để trình duyệt thay đổi biểu tượng. Chrome có thể cập nhật biểu tượng khoảng 4 lần mỗi giây. Trong các tab background, vòng lặpsetIntervalchỉ chạy một lần mỗi giây. -
Dùng Web Worker: Sử dụng Web Worker để bộ hẹn giờ gửi thông điệp tới tài liệu chính, giúp mọi thứ vẫn hoạt động mượt mà ngay cả trong các tab background.
Giao tiếp giữa các tab
-
Nhận biết vị trí tab: Truyền cửa sổ hiện tại và chỉ mục tab từ mã AppleScript dưới dạng tham số truy vấn để mỗi tab biết vị trí của chính mình.
-
Dùng Broadcast Channel: Thay vì WebSocket, sử dụng Broadcast Channel để phát thông tin tới các tab khác trên cùng domain. Tab chính nhận sự kiện đăng ký từ tất cả các tab background rồi mới chạy hoạt ảnh.
Từ canvas lên thanh tab
- Kết nối canvas với thanh tab: Triển khai để các hình vẽ trong cửa sổ foreground có thể di chuyển lên thanh tab. Bằng cách đo đạc chính xác, canvas và favicon được căn chỉnh thẳng hàng, rồi tùy theo vị trí của hình mà vẽ lên favicon hoặc canvas chính.
Tăng tốc
- Tối ưu việc dùng tài nguyên: Thay vì cập nhật favicon ở mọi khung hình, chỉ cập nhật khi có thay đổi để cải thiện hiệu năng.
Sẽ làm gì?
- Ý tưởng trò chơi: Ban đầu định làm Snake, nhưng tác giả cho rằng Pong sẽ tạo hiệu ứng di chuyển giữa canvas và thanh tab tốt hơn nên đã chọn Pong.
Triển khai Pong
- Triển khai trò Pong: Người chơi máy điều chỉnh để tâm của thanh đỡ trùng với tâm của quả bóng. Khi bóng nảy khỏi thanh đỡ, góc phản xạ được tính bằng lượng giác đơn giản. Để nhấn mạnh hiệu ứng quả bóng và thanh đỡ di chuyển mượt sang favicon, tác giả thêm vệt đuôi cho quả bóng.
Kết
- Trải nghiệm dự án: Tác giả thực hiện dự án này tại Recurse Center và nhận được rất nhiều cảm hứng. Recurse Center giống như một khu nghỉ dưỡng dành cho lập trình viên, và trải nghiệm ở đây đã trở thành động lực cho dự án.
1 bình luận
Ý kiến Hacker News
Xin chào! Tôi là người làm ra cái này. Tôi đã tự hỏi liệu nó có hợp gu cộng đồng HN không
Tôi đã tham dự buổi nói chuyện gần đây của Nolen tại Recurse, và những trò chơi hoàn toàn điên rồ nhưng về cốt lõi lại vui và ngầu này thực sự rất cuốn hút
Tôi thích mọi thứ Nolen làm. Với tôi, có vẻ như anh ấy đã tìm ra điểm ngọt để phát triển các app/site đơn mục đích gợi nhớ về thời Internet còn như xưa
Một thử nghiệm tương tự của Matthew Rayfield dùng thanh URL thay vì favicon của tab: link
Nó làm tôi nhớ đến:
Tôi gọi Doom là người tiếp theo
Vô lý một cách đầy thích thú, nỗ lực hạng A+
Đã từng có một MV mà ban nhạc "Ok Go" hợp tác với Google Chrome, với sự đồng bộ đáng kinh ngạc giữa các cửa sổ trình duyệt và các vũ công cùng những hiệu ứng kiểu kính vạn hoa... cái này làm tôi nhớ đến nó
Có vẻ như một bản port Doom sẽ xuất hiện trong vài ngày tới
Thật sự rất ngầu, tôi thích việc Chrome có thể được tinh chỉnh đến mức nào, cái này có vẻ dùng WebSocket, nhưng cũng có thể dùng extension để giao tiếp giữa các tab