Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Games
Code

Menganimasikan Menu Permainan dan Transisi Layar di HTML5: Panduan untuk Pengembang Flash

by
Difficulty:BeginnerLength:LongLanguages:
This post is part of a series called Shoot-'Em-Up.
Build a Stage3D Shoot-'Em-Up: Terrain, Enemy AI, and Level Data
Activetuts+ Workshop #5: Frantic 2 - Critique

Indonesian (Bahasa Indonesia) translation by ⚡ Rova Rindrata (you can also view the original English article)

Pengembangan HTML5 dan Flash mungkin memiliki banyak kesamaan, tetapi sebagai pengembang Flash, saya masih menganggapnya sebagai tugas monumental untuk mempelajari kembali keterampilan lama saya di HTML5. Dalam tutorial ini, saya akan menunjukkan cara saya membuat menu animasi dan transisi layar untuk permainan shoot-'em-up HTML5.


Pratinjau Hasil Akhir

Lihatlah hasil yang akan kita kerjakan:

The Menu We Will Be Working Towards
Klik untuk mencoba demonya

Perhatikan latar belakang bergulir, kapal-kapal yang muncul dan memutar kedua sisi setiap item menu, dan bagaimana layar memudar menjadi hitam ketika Anda memilih sebuah opsi.


Perkenalan

HTML5 dan JavaScript mirip dengan ActionScript dalam banyak hal; ada banyak tumpang tindih dalam sintaks, event listener, dan metode. Namun ada beberapa perbedaan yang sangat jelas yang akan saya bahas dalam tutorial ini:

  • Menggambar Bentuk
  • Menggambar Gambar
  • Menggunakan Interval
  • Menganimasikan
  • Event Mouse
  • Menambahkan Dukungan untuk Banyak Browser

Yang perlu dicatat adalah bahwa tutorial ini terutama menggunakan gambar yang dapat diunduh dengan sumber atau Anda dapat menggunakan gambar Anda sendiri jika Anda mau (Anda perlu mengetahui lebar dan tingginya).


Langkah 1: Menyiapkan

Hal pertama yang perlu kita lakukan adalah menambahkan elemen canvas di dalam body file HTML, jadi buatlah yang disebut ShootEmUp.html dan masukkan yang berikut:

Baris yang disorot memasukkan elemen kanvas, yang akan menampilkan menu sebenarnya. Lihat tutorial ini untuk panduan ke canvas dari awal.

Sudah hampir waktunya untuk memulai pengkodean JavaScript! Kita memiliki dua opsi ke mana kode itu bisa pergi; Ini dapat ditulis di dalam HTML dalam tag script atau dapat ditulis dalam file eksternal. Untuk menjaga hal-hal sederhana, saya akan menulis semua kode di bawah elemen <canvas>. Tetapi jangan ragu untuk menggunakan file eksternal jika Anda lebih suka; ingatlah untuk memberinya sumber.

Langkah kita selanjutnya adalah membuat empat variabel untuk mereferensikan elemen canvas dengan mudah.

Pertama-tama kita mereferensikan variabel myCanvas dan mengaturnya untuk mengarah ke elemen canvas HTML. Variabel lain bernama context diciptakan untuk mendapatkan dimensi canvas (2D). Mirip dengan Flash, kita membuat dua variabel terakhir, width dan height, untuk menyederhanakan proses mengakses lebar dan tinggi properti canvas.


Langkah 2: Memuat dan Menggambar Gambar

Seperti dalam ActionScript kita akan membuat instance gambar kita.

Kita kehilangan bagian kode yang penting untuk setiap instance - path sumber! Saya menyimpan semua gambar dalam folder 'Images' dalam direktori yang sama dengan file HTML, jadi:

Sebelum kita menggambar gambar ke canvas, mari buat empat array untuk menahan posisi dan ukuran tombol (playImage, instructImage, settingsImage, creditsImage). Array ini nantinya akan digunakan untuk membuat fungsi mouse over.

Sekarang kita bisa menggambar gambar ke canvas; ini dapat dilakukan dalam fungsi onload untuk setiap gambar, tetapi fungsi onload tidak perlu dimasukkan - kita dapat menggunakan drawImage().

Jika diuji sekarang, Anda harus melihat gambar statis menu yang akan segera kita berikan nafas kehidupan. Pesawat itu tidak digambar dengan sisa gambar karena kita akan menggambarnya nanti di event mouse. Omong-omong, jika Anda belum melakukan ini sejauh ini, jaga variabel Anda dikelompokkan bersama di bagian atas dan melakukan hal yang sama dengan fungsi.


Langkah 3: Menganimasikan Melalui Interval

JavaScript tidak memiliki onEnterFrame() yang setara, tetapi kita dapat dengan mudah membuat sendiri melalui penggunaan interval (timer).

Anda mungkin bingung bagaimana interval bekerja sehingga saya akan menjelaskan secara singkat. Interval ini memanggil pembaruan fungsi update() setiap (1000/frames) milidetik untuk menciptakan tingkat penyegaran yang halus. Nilai frames mengontrol fps; jika frames adalah 25 maka browser akan berusaha untuk memanggil update() setiap (1000/25=) 40 milidetik.

Langkah jelas selanjutnya adalah membuat fungsi update()

Tiga fungsi baru dipanggil. clear() digunakan untuk membersihkan canvas karena tidak seperti flash, canvas bekerja seperti menempelkan stiker di papan; gambar tidak dapat dipindahkan setelah mereka ditempatkan. Fungsi selanjutnya, move(), digunakan untuk mengubah nilai variabel yang digunakan dengan gambar. Akhirnya draw() dipanggil untuk menempatkan "stiker" itu.

Sederhananya, kode ini membersihkan segala sesuatu di dalam kotak persegi panjang yang merupakan ukuran canvas dan diambil dari (0,0), sudut kiri atas. Itu berarti membersihkan seluruh canvas yang terlihat.

Sebelum kita beralih ke fungsi berikutnya, dua variabel harus diperkenalkan. backgroundY akan menjadi variabel untuk posisi-y gambar latar belakang dan speed akan digunakan untuk mengurangi dari backgroundY setiap siklus pembaruan.

Efek yang akan kita hasilkan adalah latar belakang yang bergulir terus menerus. Gambar ini terdiri dari dua gambar bintang yang identik, satu di atas yang lain, dalam gambar yang lebih besar (gambar menjadi dua kali tinggi canvas). Kita perlahan-lahan akan memindahkan gambar sampai setengah yang kedua benar-benar terlihat dan kemudian kita akan mengatur ulang posisi gambar kembali ke setengah yang pertama.

Akhirnya kita memiliki fungsi draw(). Semua gambar akan digambar ulang, tetapi satu perubahan untuk diperhatikan adalah bahwa nilai y dari bgImage telah diganti dengan variabel backgroundY.

Uji sekarang dan kagumi latar belakang pengguliran yang mulus.


Langkah 4: Memeriksa Posisi Mouse

Satu hal yang tidak dimiliki HTML5 canvas adalah dukungan untuk listener event gambar, yang berarti kita tidak bisa hanya menulis playImage.mouseover = function(){}. Sebagai gantinya, kita harus mendapatkan posisi mouse relatif terhadap canvas dan mencari tahu apakah itu dia atas dari satu objek.

Kedua variabel yang diperkenalkan akan digunakan untuk mendapatkan posisi mouse saat ini. Kita menambahkan listener event, seperti dalam ActionScript, yang memanggil fungsi checkPos() setiap kali mouse bergerak.

Jika Anda memberi tahu nilai mouseX dan mouseY setiap kali Anda menggerakkan mouse, Anda akan mendapatkan posisi yang benar. Tetapi ada satu masalah: tidak semua browser desktop modern mendukung metode ini. Untuk mengatasi masalah ini kita dapat menggunakan hack kecil sebagai gantinya:

Ini memeriksa apakah browser menggunakan properti "pages" atau "offset" untuk mengembalikan posisi mouse, dan menyesuaikan nilainya (jika perlu) untuk mendapatkan posisi mouse relatif terhadap canvas.

Sekarang ingat instance pesawat kita, tetapi tidak menggambarnya? Kita akan mengambil gambar statis itu, memutarnya dan membuatnya muncul setiap kali kita mengarahkan mouse ke tombol!

Empat variabel pertama adalah sama seperti sebelumnya (kita memiliki dua posisi karena akan ada dua pesawat). Variabel shipVisible akan ditetapkan true ketika mouse berada di atas tombol. Sedangkan untuk shipSize dan shipRotate, mereka akan digunakan untuk menskalakan pesawat secara vertikal dan mengubah posisinya untuk memberikan ilusi bahwa ia berputar. Perlu diingat bahwa skala gambar dari kanan ke kiri.

Tambahkan kode dalam fungsi checkPos(). Pertama kita melakukan perulangan tombol-tombol yang ada (saya menemukan nilainya menggunakan buttonX.length). Berikutnya kita membandingkan mouseX untuk melihat apakah itu lebih besar dari tombol buttonX saat ini dan kurang dari buttonX + buttonWidth - yaitu dalam batas horizontal tombol. Kita kemudian mengulangi proses di pernyataan if lainnya untuk nilai-nilai Y. Jika ini semua true, maka mouse harus berada di atas tombol, jadi aturlah shipVisible menjadi true:

Dan di dalam pernyataan else kosong menetapkannya menjadi false; itu kemudian akan dipanggil kapan pun Anda mengeluarkan mouse dari sebuah tombol:

Di bawah shipVisible = true kita akan menetapkan nilai awal untuk shipX dan shipY, dan melakukan semua penskalaan dalam fungsi move dan draw.

Untuk shipX pertama, yang kita inginkan hanya di sebelah kiri tombol, kita atur nilainya ke (X dari tombol saat ini - setengah dari lebar pesawat), dan saya memindahkannya lebih dari 2 piksel ke kiri untuk membuatnya terlihat lebih baik. Proses serupa diulang untuk shipY pertama. Untuk shipX kedua kita posisikan di (X tombol saat ini + lebar tombolnya + setengah lebar pesawat), dan kemudian kita menetapkan Y seperti sebelumnya.

Bagian yang rumit datang sekarang. Kita harus menskala pesawat dan memindahkannya untuk mengkompensasi penskalaan. Dalam fungsi move() menulis pernyataan if ini.

Kode mulai mengurangkan nilai shipSize, yang akan digunakan untuk skala gambar ketika kita menggambarnya; setelah mencapai nol, proses akan berbalik sampai skala penuh lagi.

Sekarang kita bisa pindah ke fungsi draw(). Di bawah semua metode draw lainnya tambahkan pernyataan if berikut.

Pesawat-pesawat sedang digambar secara normal dengan pengecualian posisi X dikompensasikan dengan mengurangi separuh dari skala saat ini.


Langkah 5: Memeriksa Klik Mouse

Tambahkan listener event lain untuk mouseup dan buat variabel baru untuk interval kedua yang akan kita buat.

Membuat fungsi checkClick().

Seperti sebelumnya, kita memeriksa apakah posisi mouse sudah benar. Sekarang kita perlu membuat interval baru, dan menghentikan interval dan listener event lainnya.

Tidak ada yang baru di sini kecuali bahwa kita perlu membuat fungsi yang disebut fadeOut(). Kita juga perlu membuat variabel lain yang disebut time.

Ini memiliki beberapa metode baru, tetapi cukup sederhana. Karena kita menghentikan semua listener event dan interval lainnya menu kita benar-benar statis. Jadi kita secara berulang menggambar kotak hitam transparan di atas menu - tanpa mengosongkannya - untuk memberikan ilusi memudar.

Variabel time meningkat setiap kali fungsi dipanggil dan setelah mencapai nilai tertentu (setelah 20 "frame" telah berlalu, dalam hal ini) kita menghapus interval saat ini. Di sini saya mengatur ulang menunya, tetapi ini adalah tempat Anda akan menggambar bagian baru dari menu.

Satu hal terakhir yang perlu diperhatikan adalah ketika Anda menggambar bentuk pada canvas, fillStyle diatur dengan nilai rgb (red, green, blue). Ketika Anda ingin menggambar bentuk transparan, Anda menggunakan rgba (red,green,blue,alpha).

Saya harap itu sedikit mengungkap proses pembelajaran untuk beralih dari pemrograman AS3 sederhana ke pemrograman canvas sederhana. Posting komentar jika ada pertanyaan!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.