Membuat game di LWJGL # 1
Menulis game adalah proses yang kompleks dan menarik yang membutuhkan banyak waktu. Dalam seri artikel ini, saya akan menunjukkan kepada Anda cara membuat game Java 3D sederhana menggunakan perpustakaan LWJGL.
Untuk membuat game, Anda memerlukan yang berikut:
- Kemampuan untuk menulis kode dalam Java (minimum yang diperlukan: memahami operasi kondisi, loop, string, array, fungsi, kelas)
- Lingkungan Pengembangan (Saya akan menggunakan Eclipse)
- Perpustakaan LWJGL
- Kartu video yang mendukung versi OpengGL tidak kurang dari 3.3
- Waktu luang
- Ide
Siapa yang peduli, tolong, di bawah kucing.
Langkah Satu, Persiapan
Cara menginstal gerhana .
Unduh
LWJGL 2.9.3 , perpustakaan grafik 3D,
tambahkan ke proyek Anda.
Unduh
licin util , perpustakaan yang menyederhanakan pemuatan tekstur, tambahkan ke proyek.
Langkah dua, periksa
Pertama, buat kelas Utama di paket utama, masukkan kode berikut ke dalamnya:

Jika baris dengan input tidak disorot dengan warna merah, maka semuanya baik-baik saja (itu disorot dengan warna kuning di layar, karena perpustakaan ini belum digunakan dalam kode).
Langkah Tiga, Tampilkan
Isi kelas Utama dengan kode berikut:
Mulai kodeimport org.lwjgl.LWJGLException; import org.lwjgl.opengl.Display; import org.lwjgl.opengl.DisplayMode; public class Main { static int width = 800, height = 600; static DisplayMode mainDisplayMode = new DisplayMode(width, height); static boolean running = true; static void update() { if (Display.wasResized()) { width = Display.getWidth(); height = Display.getHeight(); } Display.update(); Display.sync(60); if (Display.isCloseRequested()) { running = false; } } public static void main(String[] args) { try { Display.setLocation( (Display.getDesktopDisplayMode().getWidth() - mainDisplayMode.getWidth()) / 2, Display.getDesktopDisplayMode().getHeight() - mainDisplayMode.getHeight()) / 2); Display.setResizable(true); Display.setVSyncEnabled(true); Display.setDisplayMode(mainDisplayMode); Display.create(); } catch (LWJGLException ex) { System.err.println(ex.getStackTrace().toString()); Display.destroy(); System.exit(1); } while (running) { update(); } Display.destroy(); System.exit(0); } }
Jadi apa yang terjadi di sini:
Display.setLocation( (Display.getDesktopDisplayMode().getWidth() - mainDisplayMode.getWidth()) / 2, (Display.getDesktopDisplayMode().getHeight() - mainDisplayMode.getHeight()) / 2); Display.setResizable(true); Display.setVSyncEnabled(true); Display.setDisplayMode(mainDisplayMode); Display.create();
Di baris ini:
- mengatur posisi tampilan (di tengah layar)
- diizinkan untuk mengubah ukurannya
- sinkronisasi vertikal diaktifkan
- atur DisplayMode yang menyimpan ukuran layar dan beberapa parameter lainnya
- di baris terakhir, tampilan dibuat dan ditampilkan di layar.
static void update() { if (Display.wasResized()) { width = Display.getWidth(); height = Display.getHeight(); } Display.update(); Display.sync(60); if (Display.isCloseRequested()) { running = false; } }
Dalam fungsi pembaruan, yang disebut dalam infinite loop:
- Periksa Ubah Ukuran Jendela
- Tampilkan pembaruan
- Pada baris Display.sync (60), layar disinkronkan dengan 60 hertz (jika Anda memiliki frekuensi pembaruan layar yang berbeda, misalnya 59, 76, 120, 144, dll., Atur frekuensi Anda).
- Jendela Tutup Periksa
Perhatikan bagaimana program berakhir ketika pengguna mengklik tanda silang, jendela tutup bendera, Display.isCloseRequested () menjadi true, dan variabel yang berjalan menjadi salah, dan iterasi berikutnya loop while (running) tidak akan dieksekusi dan akan ada transisi ke baris Display .destroy (), yang merusak tampilan dan System.exit (0), panggilan yang menghentikan program.
Langkah Empat, OpenGL
Untuk menginisialisasi OpenGL ke fungsi utama sebelum loop while (running), Anda perlu menambahkan kode berikut:
if (!GLContext.getCapabilities().OpenGL33) { System.err.println(" OpenGL 3.3."); System.exit(0); }
Kode ini memeriksa apakah kartu video mendukung OpenGL 3.3, jika kartu video tidak mendukung versi ini, cobalah memperbarui driver atau beralih ke kartu video lain (jika Anda memiliki lebih dari satu).
Jadi, pemeriksaan sudah selesai, jika semuanya baik-baik saja, kartu video mendukung OpenGL 3.3, kemudian kita melanjutkan. Setelah kode verifikasi, sebelum loop, tambahkan kode berikut:
glShadeModel(GL_SMOOTH); glEnable(GL_TEXTURE_2D); glEnable(GL_DEPTH_TEST); glClearColor(1f, 0f, 0f, 1f);
Kode ini akan mengonfigurasi OpenGL sebagai berikut:
- Hidupkan pencahayaan lembut di shader
- Nyalakan tekstur
- Menyalakan pemeriksaan kedalaman (sehingga objek yang dekat tumpang tindih dengan objek yang jauh)
- Atur warna pembersih
Di loop while (running), sebelum memanggil fungsi update (), tambahkan baris
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
Yang akan menghapus buffer warna dan buffer kedalaman setiap kali layar diperbarui.
Kode akhir
Klik untuk melihat import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT; import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT; import static org.lwjgl.opengl.GL11.GL_DEPTH_TEST; import static org.lwjgl.opengl.GL11.GL_SMOOTH; import static org.lwjgl.opengl.GL11.GL_TEXTURE_2D; import static org.lwjgl.opengl.GL11.glClear; import static org.lwjgl.opengl.GL11.glClearColor; import static org.lwjgl.opengl.GL11.glEnable; import static org.lwjgl.opengl.GL11.glShadeModel; import org.lwjgl.LWJGLException; import org.lwjgl.opengl.Display; import org.lwjgl.opengl.DisplayMode; import org.lwjgl.opengl.GLContext; public class Main { static int width = 800, height = 600; static DisplayMode mainDisplayMode = new DisplayMode(width, height); static boolean running = true; static void update() { if (Display.wasResized()) { width = Display.getWidth(); height = Display.getHeight(); } Display.update(); Display.sync(60); if (Display.isCloseRequested()) { running = false; } } public static void main(String[] args) { try { Display.setLocation((Display.getDesktopDisplayMode().getWidth() - mainDisplayMode.getWidth()) / 2, (Display.getDesktopDisplayMode().getHeight() - mainDisplayMode.getHeight()) / 2); Display.setResizable(true); Display.setVSyncEnabled(true); Display.setDisplayMode(mainDisplayMode); Display.create(); } catch (LWJGLException ex) { System.err.println(ex.getStackTrace().toString()); Display.destroy(); System.exit(1); } if (!GLContext.getCapabilities().OpenGL33) { System.err.println(" OpenGL 3.3."); System.exit(0); } glShadeModel(GL_SMOOTH); glEnable(GL_TEXTURE_2D); glEnable(GL_DEPTH_TEST); glClearColor(1f, 0f, 0f, 1f); while (running) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); update(); } Display.destroy(); System.exit(0); } }
Ini menyimpulkan artikel pertama tentang menulis game di LWJGL, jika survei berisi lebih dari 50% jawaban positif, saya akan terus menulis serangkaian artikel.