31 คะแนน โดย GN⁺ 2023-11-26 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

ค้นหาความสนุกอีกครั้งผ่านการเขียนโค้ด: เอาชนะภาวะหมดไฟด้วยการพัฒนาเกม

  • ข้อบ่นที่เห็นบ่อยในคอมมูนิตี้นักพัฒนา: ความหลงใหลในการเขียนโค้ดหายไป
  • เคล็ดลับในการคลายภาวะหมดไฟ: สร้างเกมของตัวเองเพื่อกลับมาสนุกกับการเขียนโค้ดอีกครั้ง
  • แชร์ประสบการณ์ส่วนตัวว่าหลงใหลในการเขียนโปรแกรมผ่านการพัฒนาเกมได้อย่างไร
  • แนะนำให้พัฒนาเกมด้วยภาษา Go และไลบรารี Ebitengine

หลักการพื้นฐานของการพัฒนาเกม

  • เช่นเดียวกับภาพยนตร์ เกมคือชุดของภาพที่แสดงต่อเนื่องกันอย่างรวดเร็ว (เฟรม)
  • เกมสร้างภาพแบบเรียลไทม์ และเปลี่ยนเฟรมถัดไปตามอินพุตของผู้ใช้
  • โดยพื้นฐานแล้วเกมคือการวนลูปไม่สิ้นสุด ทำซ้ำการวาดภาพและอัปเดตลอจิก

การตั้งค่าโปรเจกต์

  • สร้าง Go module และเพิ่มไลบรารี Ebitengine
  • รันหน้าต่างว่างด้วยการติดตั้งอินเทอร์เฟซเกมขั้นต่ำ

การโหลดแอสเซ็ต

  • แนะนำให้ใช้ programmer art หรือแอสเซ็ตฟรี
  • ใช้แพ็กเกจ embed เพื่อโหลดแอสเซ็ตเข้าไปในโค้ด

การวาดภาพ

  • ทำงานวาดภาพทั้งหมดภายในเมธอด Draw
  • ใช้เมธอด DrawImage ของ ebiten.Image เพื่อวาดภาพทับบนอีกภาพหนึ่ง
  • ปรับตำแหน่ง การหมุน และขนาดของภาพผ่านโครงสร้าง DrawImageOptions

ลอจิกของเกม

  • โครงสร้าง Game ใช้เก็บสถานะของเกมและเปลี่ยนสถานะผ่านเมธอด Update
  • ตัวอย่างเช่น เก็บตำแหน่งของผู้เล่นเป็นเวกเตอร์ (X, Y)

การเคลื่อนไหว

  • อัปเดตตำแหน่งของผู้เล่นในเมธอด Update เพื่อให้เกิดการเคลื่อนไหว
  • เปลี่ยนตำแหน่งของผู้เล่นตามอินพุตจากคีย์บอร์ด

ตัวจับเวลา

  • ติดตั้งตัวจับเวลาเพื่อเปลี่ยนลอจิกตามเวลาในเกม
  • ใช้โครงสร้าง Timer เพื่อให้เกิดอีเวนต์ตามช่วงเวลาที่กำหนด

อ็อบเจ็กต์ในเกม

  • จัดการอ็อบเจ็กต์ในเกม เช่น ผู้เล่น ด้วยการห่อหุ้มให้เป็นระบบ
  • อ็อบเจ็กต์แต่ละตัวมีเมธอด Update และ Draw ของตัวเอง

การสร้างอ็อบเจ็กต์

  • สร้างอ็อบเจ็กต์อุกกาบาตและให้เกิดที่ขอบหน้าจอ
  • โครงสร้าง Game ใช้ติดตามอ็อบเจ็กต์อุกกาบาต

การยิงกระสุน

  • ติดตั้งลอจิกการยิงกระสุนและตัวจับเวลาคูลดาวน์
  • Player สร้างกระสุน และ Game เป็นผู้ติดตาม

การตรวจจับการชน

  • ติดตั้งโครงสร้าง Rect และเมธอด Collider() สำหรับการตรวจจับการชน
  • ตรวจสอบการชนกันระหว่างอ็อบเจ็กต์ต่าง ๆ ใน Update ของเกม

ความเห็นของ GN⁺

สิ่งสำคัญที่สุดของบทความนี้คือการเสนอวิธีให้เหล่านักพัฒนาก้าวข้ามภาวะหมดไฟและกลับมามีไฟกับการเขียนโค้ดอีกครั้ง การพัฒนาเกมเปิดโอกาสให้ได้ฝึกทักษะการเขียนโค้ดผ่านโปรเจกต์ที่ทั้งสร้างสรรค์และสนุก พร้อมทั้งเรียนรู้ภาษาและไลบรารีใหม่ไปด้วย บทความนี้มอบแรงบันดาลใจให้นักพัฒนากลับมาสนุกกับการเขียนโค้ดในฐานะงานอดิเรก และกระตุ้นความสนใจด้วยการอธิบายแนวทางพื้นฐานของการพัฒนาเกมด้วยภาษา Go และไลบรารี Ebitengine

1 ความคิดเห็น

 
GN⁺ 2023-11-26
ความคิดเห็นจาก Hacker News
  • ผู้ใช้คนแรกชอบเขียนเอฟเฟกต์ดอกไม้ไฟหรือการจำลองอนุภาคแบบง่าย ๆ เพื่อทดสอบประสิทธิภาพเวลาเรียนภาษาใหม่หรือกราฟิก API ใหม่ เมื่อได้ทดลองใช้ Go และ Ebitengine ในปี 2021 ก็ประทับใจมากกับทั้งประสิทธิภาพที่น่าทึ่งซึ่งขยับพิกเซลจำนวนมากได้ที่ 60fps และความง่ายในการใช้งาน
  • ผู้ใช้คนที่สองได้พัฒนาเกมเมื่อปีที่แล้วโดยใช้ภาษา Go ร่วมกับ g3n-engine เลือกใช้เพราะชอบและอยากเรียนรู้ Go และหลังจากเคยมีประสบการณ์พัฒนาเกม 2D มาก่อน ก็อยากทำงานแบบ 3D จึงเลือก g3n-engine การสร้างเกมเป็นประสบการณ์ที่ท้าทายและคุ้มค่ามากกว่างานรับจ้างที่มีค่าตอบแทน และยังมีสิ่งให้เรียนรู้อีกไม่สิ้นสุด
  • ผู้ใช้คนที่สามกล่าวว่า Ebiten API สำหรับภาษา Go นั้นดีมาก และสามารถใช้เป็นแรงบันดาลใจด้านการออกแบบ API ได้ นอกจากนี้ยังใช้คอมไพเลอร์แบบกำหนดเองที่แปลง Go เป็น C++ เพื่อเพิ่มประสิทธิภาพในการพัฒนาเกม เข้าถึง C/C++ API และให้ประสิทธิภาพที่ดีบน WebAssembly ด้วย คอมไพเลอร์นี้ยังมีการทดลองสร้าง GLSL จากโค้ด Go อีกด้วย
  • ผู้ใช้คนที่สี่ไม่ได้เป็นนักพัฒนา Go แต่ติดตาม YouTuber/สตรีมเมอร์บน Twitch คนหนึ่งที่สร้างเกมด้วย Go มานาน สตรีมเมอร์คนนั้นกำลังพัฒนา MMO ขนาดเล็กด้วย Go และทำเวอร์ชันเว็บโดยใช้ OpenGL และ WASM แม้จะเข้าใจว่าตัวเก็บขยะของ Go นั้นแข็งแกร่งมาก แต่ก็ยังมีคนจำนวนมากถามว่า "ทำไมต้องสร้างด้วย Go?"
  • ผู้ใช้คนที่ห้าตอบสนองเฉพาะช่วงต้นของบทความ โดยเสนอว่าหากผู้เขียนกำลังเผชิญภาวะหมดไฟแบบที่อธิบายไว้ แทนที่จะ "พิชิต" งานอดิเรกเดิมกลับคืนมา ควรพัฒนาความสนใจของตนเองต่อไป นี่อาจเป็นสัญญาณว่าสมองกำลังหยุดนิ่ง และแม้ไม่จำเป็นต้องแตกต่างจากการเขียนโปรแกรมมากนัก แต่อาจเป็นเวลาที่เหมาะจะลงลึกในทฤษฎีวิทยาการคอมพิวเตอร์มากขึ้น
  • ผู้ใช้คนที่หกระบุว่าตนใช้ Ebitengine มาหลายปีและมีประสบการณ์ที่น่าพอใจ หากอยากดูซอร์สของเกมที่สร้างด้วย Ebitengine ก็แนะนำให้ดูรายการ awesome-ebitengine เกมทั้งหมดที่อยู่ในโปรไฟล์ itch.io ของผู้ใช้คนนั้นสร้างด้วย Ebitengine และเป็นโอเพนซอร์สทั้งหมด
  • ผู้ใช้คนที่เจ็ดกำลังพัฒนาเกมด้วย Ebitengine และรู้สึกว่าประสบการณ์นี้สดใหม่มาก
  • ผู้ใช้คนที่แปดตั้งคำถามว่า Go เป็นแพลตฟอร์มที่เหมาะสำหรับการเขียนเกมขนาดใหญ่หรือไม่ และมีทั้งไลบรารีกับประสิทธิภาพมากพอที่จะทำให้การเลือกใช้ C# มีเหตุผลหรือไม่
  • ผู้ใช้คนที่เก้าสงสัยว่าเพราะแนวคิดเรื่อง goroutine ของ Go จึงอาจเป็นภาษาที่เหมาะกับการทำเกมหรือไม่ และคิดว่าสักวันหนึ่งจะลองดู
  • สุดท้าย มีการกล่าวถึงเกมที่สร้างบน Ebitengine พร้อมชี้ว่าประโยคเกี่ยวกับ "ตัวอย่างคอมโพเนนต์ Sprite อาจมีหน้าตาอย่างไร" ถูกตัดจบและควรได้รับการแก้ไข