แยกจากเฟรมเวิร์กเกม raylib ที่ยอดเยี่ยม: https://www.raylib.com/
ข้อสังเกต: rayfork ยังอยู่ระหว่างการพัฒนาในช่วงเริ่มต้น และไม่แนะนำให้คุณใช้งานอย่างมืออาชีพในขณะนี้
rayfork มีไฟล์ .c เพียงไฟล์เดียวและขึ้นอยู่กับ libc เท่านั้น ซึ่งหมายความว่าสามารถคอมไพล์เป็นไลบรารีจากบรรทัดคำสั่งได้อย่างง่ายดาย
# -c compiles the code as a library
# -EHsc disables exceptions on msvc
gcc -c rayfork.c
clang -c rayfork.c
cl -c -EHsc rayfork.c
rayfork ไม่มีเลเยอร์แพลตฟอร์ม ซึ่งหมายความว่าจะไม่สร้างหน้าต่าง โหลด OpenGL หรือบันทึกอินพุตให้กับคุณ
นี่เป็นการออกแบบเพื่อให้คุณสามารถใช้ Rayfork บนหลายแพลตฟอร์ม (รวมถึงคอนโซลเกม) ได้อย่างง่ายดายโดยใช้วิธีการที่เหมาะกับคุณที่สุด มีเทมเพลตสำหรับการใช้ rayfork กับ GLFW, SDL, sokol-app และเลเยอร์แพลตฟอร์มที่กำหนดเอง
ปัจจุบันตัวเรนเดอร์มีแบ็กเอนด์ OpenGL33 และ OpenGL-ES3 (และยังมีอีกมากที่จะเพิ่มเติม) ที่ใช้งานในรูปแบบพกพา ซึ่งช่วยให้คอมไพล์ Rayfork บนแพลตฟอร์มใดก็ได้ โดยมีการพึ่งพาเพียงอย่างเดียวคือ libc Proc ของ OpenGL จะถูกส่งต่อไปยัง rayfork อย่างชัดเจน และมีมาโครง่ายๆ ที่จะช่วยในเรื่องนี้
ด้วยเหตุนี้ คุณจึงสามารถคอมไพล์ rayfork สำหรับแพลตฟอร์มใดๆ ได้อย่างง่ายดาย ไม่ว่าจะเป็นพีซี มือถือ หรือคอนโซล
ฟังก์ชั่นที่ทำ IO มักจะเป็นทางเลือกและขอการเรียกกลับ IO อย่างชัดเจน Wrapper แบบง่ายสำหรับฟังก์ชัน libc IO มีให้เป็น rf_default_io
ฟังก์ชันที่จัดสรรอย่างชัดเจนจะขอตัวจัดสรรและบางครั้งก็ขอตัวจัดสรรหน่วยความจำชั่วคราวด้วย (หน่วยความจำที่ว่างภายในฟังก์ชัน) wrapper อย่างง่ายสำหรับ malloc/free ของ libc มีให้เป็น rf_default_allocator
การขึ้นต่อกันทั้งหมดยังใช้กับตัวจัดสรรแบบกำหนดเองด้วย ไลบรารีจะไม่จัดสรรโดยที่คุณไม่รู้ตัว
ทุกฟังก์ชันที่ต้องใช้ตัวจัดสรรหรือการโทรกลับ io มีเวอร์ชัน _ez
ซึ่งล้อมฟังก์ชันดั้งเดิมและเรียกใช้ด้วย rf_default_allocator
และ/หรือ rf_default_io
ซึ่งมีประโยชน์สำหรับการทดสอบโค้ดอย่างรวดเร็ว
ไลบรารีเป็นเพียงส่วนหัวและไฟล์ต้นฉบับเดียว และสามารถปรับแต่งได้ในขณะคอมไพล์โดยใช้คำจำกัดความของตัวประมวลผลล่วงหน้า ไม่จำเป็นต้องคอมไพล์แฟล็กเพิ่มเติม ขึ้นอยู่กับแบ็กเอนด์กราฟิกที่คุณอาจต้องเชื่อมโยงกับไลบรารีบางแห่ง
raylib ถูกสร้างขึ้นในช่วงแรกเพื่อการศึกษา และเติบโตขึ้นเมื่อเวลาผ่านไปจนกลายเป็นไลบรารีเกมที่มีประโยชน์มาก คล้ายกับ XNA
อย่างไรก็ตาม เนื่องจากธรรมชาติของมัน ตัวเลือกการออกแบบหลายอย่างใน raylib ทำให้ยากต่อการใช้งานสำหรับนักพัฒนาเกมมืออาชีพ:
ยากที่จะใช้เลเยอร์แพลตฟอร์มที่กำหนดเอง (เช่น: ใช้กับเลเยอร์แพลตฟอร์มที่กำหนดเองบน Android กับ Android Studio)
ยากต่อการพอร์ตบนแพลตฟอร์มอื่น (เช่น: iOS, คอนโซล)
ควบคุมการจัดสรรหน่วยความจำและ io เพียงเล็กน้อย
rayfork ได้รับการออกแบบมาเพื่อแก้ไขปัญหาเหล่านั้น และทำให้การพัฒนาเกมระดับมืออาชีพโดยใช้ API จาก raylib เป็นเรื่องง่าย
ฉันเริ่มโปรเจ็กต์นี้เพราะฉันชอบ raylib และ C99 และฉันก็อยากพัฒนาเกมของฉันโดยใช้พวกมันจริงๆ
อย่างไรก็ตาม ห้องสมุดหลายแห่งไม่ปฏิบัติตามหลักการที่ฉันมองหาในห้องสมุด (ดูบทความนี้) ซึ่งทำให้การใช้งานในเกมยาก/น่ารำคาญ ซึ่งเป็นสาเหตุที่ฉันต้องการสร้างห้องสมุดที่นักพัฒนาอินดี้สามารถใช้เพื่อพัฒนาโครงการของพวกเขาได้อย่างมั่นใจและง่ายดาย โดยไม่สูญเสียการควบคุม การพกพา หรือคุณภาพ
หากคุณต้องการพัฒนาเกมได้อย่างง่ายดายด้วยไลบรารีที่เคารพหลักการที่กล่าวมาข้างต้น โปรดพิจารณาสนับสนุน Rayfork
คุณสามารถตรวจสอบแท็บปัญหาและค้นหาสิ่งต่างๆ มากมายที่คุณสามารถทำได้เพื่อมีส่วนร่วม
ฉันยังต้องการความช่วยเหลือในการพัฒนาสิ่งที่อยู่นอกเหนือความเชี่ยวชาญของฉันด้วย:
ติดต่อฉันบนเซิร์ฟเวอร์ raylib discord ในช่อง #rayfork ฉันชื่อ @BananyaDev#0001 หรือบน Twitter @SasLuca
คงหลักการตั้งชื่อเป็นแบบงู ใช้ rf_function_name
สำหรับฟังก์ชันอินเทอร์เฟซ และ _rf_function_name
สำหรับฟังก์ชันส่วนตัว
นำหน้าฟังก์ชันทั้งหมดด้วย rf_public
หรือ RF_INTERNAL
อย่ารวมส่วนหัวเพิ่มเติมในอินเทอร์เฟซ พยายามลดการรวมให้เหลือน้อยที่สุดโดยทั่วไป
ใช้ #pragma region #pragma endregion
สำหรับการพับขอบเขตของโค้ด และลองใช้โปรแกรมแก้ไขที่รองรับการพับขอบเขตเหล่านั้นเพื่อให้เข้าใจโค้ดได้ง่ายขึ้น
ลองนำคำแนะนำจากบทความนี้ไปใช้โดยทั่วไป คำแนะนำที่สำคัญกว่านั้นคือ: