Bercabang dari kerangka permainan raylib yang mengagumkan: https://www.raylib.com/
PEMBERITAHUAN: rayfork masih dalam pengembangan awal dan saat ini Anda tidak disarankan menggunakannya secara profesional.
rayfork hanya memiliki satu file .c dan hanya bergantung pada libc, yang berarti dapat dengan mudah dikompilasi sebagai perpustakaan dari baris perintah.
# -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 tidak menyediakan lapisan platform, artinya ia tidak akan membuat jendela, memuat OpenGL, atau menangkap masukan untuk Anda.
Hal ini memang dirancang agar Anda dapat dengan mudah menggunakan rayfork di berbagai platform (termasuk konsol game) dengan menggunakan metode yang paling sesuai untuk Anda. Ada templat untuk menggunakan rayfork dengan lapisan GLFW, SDL, aplikasi sokol, dan platform khusus.
Penyaji saat ini memiliki backend OpenGL33 dan OpenGL-ES3 (masih banyak lagi yang akan ditambahkan) yang diimplementasikan dengan cara portabel yang memungkinkan rayfork dikompilasi pada platform apa pun, dengan satu-satunya ketergantungan adalah libc. Proses OpenGL diteruskan secara eksplisit ke rayfork dan ada makro sederhana untuk membantu hal ini.
Karena itu Anda dapat dengan mudah mengkompilasi rayfork untuk platform apa pun baik itu PC, Seluler, atau Konsol.
Fungsi yang melakukan IO seringkali bersifat opsional dan secara eksplisit meminta callback IO. Pembungkus sederhana untuk fungsi libc IO disediakan sebagai rf_default_io
.
Fungsi yang mengalokasikan secara eksplisit meminta pengalokasi dan terkadang juga pengalokasi memori sementara (memori yang dibebaskan di dalam fungsi). Pembungkus sederhana untuk malloc/free libc disediakan sebagai rf_default_allocator
.
Semua dependensi juga digunakan dengan mempertimbangkan pengalokasi khusus, perpustakaan tidak akan pernah mengalokasikan tanpa Anda sadari.
Setiap fungsi yang memerlukan pengalokasi atau panggilan balik io memiliki versi _ez
yang menggabungkan fungsi asli dan memanggilnya dengan rf_default_allocator
dan/atau rf_default_io
, ini berguna untuk menguji kode dengan cepat.
Pustaka hanya berupa satu header dan file sumber dan dapat dikustomisasi pada waktu kompilasi menggunakan definisi praprosesor. Tidak diperlukan tanda kompilasi tambahan, bergantung pada backend grafis yang mungkin Anda perlukan untuk ditautkan ke pustaka tertentu.
raylib awalnya dibuat untuk tujuan pendidikan dan seiring berjalannya waktu telah berkembang menjadi perpustakaan permainan yang sangat berguna, mirip dengan XNA.
Namun karena sifatnya, beberapa pilihan desain di raylib membuatnya sulit digunakan oleh pengembang game profesional:
Sulit menggunakan lapisan platform khusus (misalnya: menggunakan lapisan platform khusus di Android dengan Android Studio)
Sulit untuk di-porting ke platform lain (misalnya: iOS, konsol)
Sedikit kontrol atas alokasi memori dan io.
rayfork dirancang untuk mengatasi masalah tersebut dan memudahkan pengembangan game profesional menggunakan API dari raylib.
Saya memulai proyek ini karena saya menyukai raylib dan C99 dan saya sangat ingin mengembangkan game saya menggunakannya.
Namun banyak perpustakaan tidak mengikuti prinsip-prinsip yang saya cari di perpustakaan (lihat artikel ini) yang membuat penggunaannya dalam permainan menjadi sulit/menjengkelkan, itulah sebabnya saya ingin membuat perpustakaan yang dapat digunakan dengan percaya diri dan mudah oleh pengembang indie untuk mengembangkan proyek mereka. tanpa mengorbankan kontrol, portabilitas, atau kualitas.
Jika Anda ingin dapat mengembangkan game dengan mudah menggunakan perpustakaan yang menghormati prinsip-prinsip yang disebutkan di atas, harap pertimbangkan untuk berkontribusi pada rayfork.
Anda dapat memeriksa tab masalah dan menemukan banyak hal yang dapat Anda lakukan untuk berkontribusi.
Saya juga mencari bantuan dalam mengembangkan hal-hal di luar keahlian saya:
Hubungi saya di server perselisihan raylib di saluran #rayfork, saya @BananyaDev#0001, atau di twitter @SasLuca.
Pertahankan konvensi penamaan dalam bentuk ular, gunakan rf_function_name
untuk fungsi antarmuka dan _rf_function_name
untuk fungsi pribadi.
Awali semua fungsi dengan rf_public
atau RF_INTERNAL
Jangan sertakan header tambahan di antarmuka, berusahalah untuk meminimalkan penyertaan secara umum.
Gunakan #pragma region #pragma endregion
untuk melipat wilayah kode dan pertimbangkan untuk menggunakan editor dengan dukungan untuk melipat wilayah tersebut agar lebih mudah memahami kode.
Cobalah untuk menerapkan saran dari artikel ini secara umum. Beberapa nasihat yang lebih penting adalah: