Pong ที่รันอยู่ในแท็บเบราว์เซอร์ 240 แท็บ
(eieio.games)รัน Pong ใน 240 แท็บเบราว์เซอร์
- ใช้ประโยชน์จากแท็บที่ไม่ได้ใช้งาน: นำแท็บเบราว์เซอร์ 240 แท็บมาเรียงเป็นกริด 8x30 เพื่อรันเกม Pong โดยลูกบอลและไม้พายสามารถเคลื่อนย้ายอย่างลื่นไหลระหว่างแคนวาสของหน้าต่างที่อยู่เบื้องหน้าและทุกแท็บได้
แรงบันดาลใจ
- Flappy Favi: ได้แรงบันดาลใจจากที่เพื่อนชื่อ Tru สร้าง Flappy Bird เวอร์ชันที่รันอยู่ใน favicon เนื่องจาก favicon มีขนาดเล็กและมองได้ยาก จึงเกิดไอเดียที่จะวาดภาพข้ามหลายแท็บ
การทำต้นแบบ
- สร้างกริดของแท็บ: ใช้ AppleScript เพื่อเปิด 30 แท็บในหน้าต่าง Chrome 8 หน้าต่าง และจัดวางหน้าต่างให้เหมาะสมเพื่อสร้างกริดขนาดใหญ่ สคริปต์ยังจัดการปัญหาที่ Chrome มักเปิดแท็บที่ปิดไปแล้วกลับมาใหม่ด้วยการเคลียร์ส่วนนี้ตั้งแต่เริ่มต้น
อัปเดต favicon อย่างรวดเร็ว
-
อัปเดต favicon: ระบุตำแหน่งของ favicon ในองค์ประกอบ
headของ HTML เพื่อให้เบราว์เซอร์เปลี่ยนไอคอนได้ Chrome สามารถอัปเดตไอคอนได้ประมาณ 4 ครั้งต่อวินาที ในแท็บเบื้องหลัง ลูปsetIntervalจะทำงานเพียงหนึ่งครั้งต่อวินาที -
ใช้ Web Worker: ใช้ Web Worker เพื่อให้ตัวจับเวลาส่งข้อความกลับไปยังเอกสารหลัก ทำให้ทำงานได้อย่างลื่นไหลแม้อยู่ในแท็บเบื้องหลัง
การสื่อสารระหว่างแท็บ
-
รับรู้ตำแหน่งของแท็บ: ส่งค่าดัชนีของหน้าต่างและแท็บปัจจุบันจากโค้ด AppleScript ผ่าน query parameter เพื่อให้แต่ละแท็บรู้ตำแหน่งของตัวเอง
-
ใช้ Broadcast Channel: ใช้ Broadcast Channel แทน WebSocket เพื่อกระจายข้อมูลไปยังแท็บอื่นบนโดเมนเดียวกัน แท็บหลักจะรอรับอีเวนต์การลงทะเบียนจากแท็บเบื้องหลังทั้งหมดก่อนจึงเริ่มแอนิเมชัน
จากแคนวาสสู่แถบแท็บ
- เชื่อมแคนวาสกับแถบแท็บ: ทำให้รูปทรงที่วาดในหน้าต่างเบื้องหน้าสามารถเคลื่อนย้ายไปยังแถบแท็บได้ โดยวัดตำแหน่งอย่างแม่นยำเพื่อจัดแนวแคนวาสกับ favicon และวาดลงบน favicon กับแคนวาสหลักตามตำแหน่งของรูปทรง
เพิ่มความเร็ว
- ปรับการใช้ทรัพยากรให้เหมาะสม: แทนที่จะอัปเดต favicon ทุกเฟรม จะอัปเดตเฉพาะเมื่อมีการเปลี่ยนแปลงเท่านั้น จึงช่วยเพิ่มประสิทธิภาพ
จะสร้างอะไรดี?
- ไอเดียเกม: ตอนแรกตั้งใจจะทำเกม Snake แต่เห็นว่าเกม Pong จะให้เอฟเฟกต์การเคลื่อนที่ระหว่างแคนวาสกับแถบแท็บได้ดีกว่า จึงเลือก Pong
การสร้าง Pong
- พัฒนาเกม Pong: ผู้เล่นคอมพิวเตอร์จะจัดให้จุดกึ่งกลางของไม้พายตรงกับจุดกึ่งกลางของลูกบอล เมื่อบอลเด้งออกจากไม้พาย จะใช้ตรีโกณมิติอย่างง่ายในการคำนวณมุม และเพิ่ม trail ให้ลูกบอลเพื่อเน้นเอฟเฟกต์ที่ลูกบอลและไม้พายเคลื่อนย้ายไปยัง favicon อย่างลื่นไหล
สรุป
- ประสบการณ์จากโปรเจกต์: ผู้เขียนทำโปรเจกต์นี้ที่ Recurse Center และได้รับแรงบันดาลใจอย่างมาก Recurse Center เปรียบเสมือนสถานพักผ่อนสำหรับนักเขียนที่มีไว้เพื่อการเขียนโปรแกรม และประสบการณ์ที่นั่นก็เป็นแรงผลักดันให้กับโปรเจกต์นี้
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
สวัสดี! ผมเป็นคนทำเอง สงสัยอยู่ว่าสิ่งนี้จะโดนใจชุมชน HN ไหม
ผมไปฟังบรรยาย Recurse ล่าสุดของ Nolen มา เกมที่บ้าสุด ๆ แต่สนุกและเท่มากแบบถึงรากถึงแก่นพวกนี้มีเสน่ห์จริง ๆ
ผมชอบทุกอย่างที่ Nolen ทำ สำหรับผม ดูเหมือนว่าเขาจะเจอจุดลงตัวอันแสนหวานของการทำแอป/เว็บไซต์แบบมีจุดประสงค์เดียวที่ชวนให้นึกถึงยุคที่อินเทอร์เน็ตเคยเป็นแบบนั้น
งานสำรวจที่คล้ายกันของ Matthew Rayfield ซึ่งใช้แถบ URL แทน favicon ของแท็บ: ลิงก์
ทำให้นึกถึง:
ขอเรียกว่าต่อไป Doom มาแน่
ไร้สาระแบบชวนอารมณ์ดี และความพยายามระดับ A+
มีมิวสิกวิดีโอที่วง "Ok Go" ทำร่วมกับ Google Chrome อยู่ชิ้นหนึ่ง ที่มีการซิงก์หน้าต่างเบราว์เซอร์กับนักเต้นอย่างน่าทึ่ง พร้อมเอฟเฟกต์คล้ายภาพคาไลโดสโคป... อันนี้ทำให้นึกถึงสิ่งนั้น
ดูเหมือนว่าอีกไม่กี่วันก็น่าจะมี Doom port ออกมา
เจ๋งมาก ชอบที่ Chrome ปรับแต่งได้มากขนาดนี้ อันนี้ดูเหมือนจะใช้ WebSocket แต่ก็สามารถใช้ส่วนขยายสำหรับการสื่อสารระหว่างแท็บได้เหมือนกัน