JavaScript, bahasa pemrograman inti di dunia web, bukan hanya berfungsi untuk interaktivitas situs web biasa. Ia adalah alat yang sangat kuat untuk menciptakan pengalaman interaktif, termasuk game. Membuat game dengan JavaScript seringkali melibatkan pemanfaatan elemen <canvas> untuk rendering grafis dua dimensi (2D).
Representasi visual sederhana dari Game Development dengan Canvas.
Langkah pertama dalam membuat game 2D menggunakan JavaScript adalah menyiapkan wadah visualnya, yaitu elemen <canvas> di HTML. Canvas adalah bitmap yang dapat kita gambar menggunakan API JavaScript.
Anda perlu mendefinisikan struktur HTML minimalis dan memberikan ID pada canvas agar mudah diakses oleh skrip Anda:
<!DOCTYPE html>
<html>
<head>
<title>Game JS Sederhana</title>
</head>
<body>
<canvas id="gameCanvas" width="600" height="400" style="border: 1px solid black;"></canvas>
<script src="game.js"></script>
</body>
</html>
Dalam file JavaScript (misalnya game.js), kita harus mendapatkan akses ke konteks rendering canvas. Untuk game 2D, konteks yang digunakan adalah '2d'. Variabel ini akan menjadi antarmuka utama Anda untuk menggambar bentuk, gambar, dan teks.
Inisialisasi ini memastikan bahwa Anda siap untuk mulai menggambar:
const canvas = document.getElementById('gameCanvas');
const ctx = canvas.getContext('2d');
// Fungsi utama untuk menggambar
function draw() {
// Bersihkan kanvas setiap frame
ctx.clearRect(0, 0, canvas.width, canvas.height);
// Contoh: Menggambar persegi panjang merah
ctx.fillStyle = 'red';
ctx.fillRect(50, 50, 100, 100);
}
draw();
Game yang baik tidak hanya menggambar sekali, tetapi terus-menerus memperbarui posisi objek dan menggambar ulang layar dalam interval waktu yang cepat (biasanya 60 kali per detik). Ini disebut Game Loop. Fungsi requestAnimationFrame adalah cara modern dan efisien untuk mengelola loop ini, karena ia menyinkronkan pembaruan dengan refresh rate monitor.
Implementasi siklus game melibatkan tiga komponen utama:
let playerX = 50;
const playerSpeed = 5;
function update() {
// Logika Pembaruan: Misalnya, membuat objek bergerak ke kanan
playerX += playerSpeed;
if (playerX > canvas.width) {
playerX = 0; // Reset jika keluar layar
}
}
function render() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
// Gambar pemain pada posisi baru
ctx.fillStyle = 'blue';
ctx.fillRect(playerX, 200, 50, 50);
}
function gameLoop() {
update();
render();
requestAnimationFrame(gameLoop); // Panggil dirinya sendiri lagi
}
// Mulai game
gameLoop();
Agar game menjadi interaktif, kita perlu mendeteksi input dari keyboard atau mouse. JavaScript menyediakan event listener untuk menangani ini. Untuk pergerakan yang lebih responsif (daripada mengandalkan event keydown tunggal), banyak pengembang melacak tombol mana yang sedang ditekan dalam sebuah objek status.
const keys = {};
window.addEventListener('keydown', (e) => {
keys[e.code] = true;
});
window.addEventListener('keyup', (e) => {
keys[e.code] = false;
});
function update() {
// ... (pembaruan posisi lama)
// Pembaruan berdasarkan input tombol
if (keys['ArrowLeft']) {
playerX -= playerSpeed;
}
if (keys['ArrowRight']) {
playerX += playerSpeed;
}
// Pastikan playerX tidak keluar batas kiri
if (playerX < 0) playerX = 0;
}
Setelah fondasi game loop dan input dasar terbentuk, pengembangan selanjutnya berfokus pada implementasi elemen game spesifik:
Image() API sebelum memulai game loop.Membuat game adalah proses iteratif. Mulailah dengan sesuatu yang sangat sederhana—seperti kotak yang bergerak—dan tambahkan kompleksitas secara bertahap. JavaScript dan Canvas API menyediakan semua alat yang Anda perlukan untuk memulai petualangan pengembangan game Anda.