Saya bermain-main dengan klon pembom untuk mempelajari pengembangan game.
Sejauh ini saya sudah melakukan ubin, gerakan, deteksi tabrakan, dan pengambilan barang. Saya juga memiliki pseudo bombplacing (hanya grafik dan tabrakan, tidak ada fungsi nyata).
Saya telah membuat jsFiddle permainan dengan fungsi yang saya miliki saat ini. Kode dalam biola sangat jelek sekalipun. Gulir melewati peta dan Anda menemukan cara saya menempatkan bom.
Bagaimanapun, apa yang ingin saya lakukan adalah sebuah objek, yang memiliki informasi umum tentang bom seperti:
function Bomb(){
this.radius = player.bombRadius;
this.placeBomb = function (){
if(player.bombs != 0){
// place bomb
}
}
this.explosion = function (){
// Explosion
}
}
Saya tidak benar-benar tahu bagaimana memasukkannya ke dalam kode. Setiap kali saya meletakkan bom, apakah saya lakukan var bomb = new Bomb();
atau harus terus-menerus memilikinya dalam skrip untuk dapat mengaksesnya.
Bagaimana bom itu merusak? Apakah sesederhana melakukan X, Y di semua arah hingga radius habis atau objek menghentikannya? Bisakah saya menggunakan sesuatu seperti setTimeout (bomb.explosion, 3000) sebagai timer?
Bantuan apa pun dihargai, baik itu penjelasan sederhana tentang teori atau contoh kode berdasarkan biola. Ketika saya mencoba cara objek itu memecahkan kode.
Pembaruan: Saya sekarang meletakkan bom, dan setelah beberapa waktu menghapusnya tergantung pada posisi saya meletakkannya. Tetapi jika saya menempatkan bom sebelum bom pertama meledak, itu hanya akan menghapus salah satu dari mereka (jelas karena bombX dan bombY telah berubah sejak bom pertama ditempatkan).
Sekarang saya perlu tahu cara memperbaiki masalah ini, mungkin membuat array baru dengan semua posisi bom? Apa cara terbaik untuk melakukan ini?
Kode saat ini:
function placeBomb(){
if(placebomb && player.bombs != 0){
map[player.Y][player.X].object = 2;
bombX = player.X; bombY = player.Y;
placebomb = false;
player.bombs--;
setTimeout(explode, 3000);
}
}
function explode(){
alert('BOOM!');
delete map[bombY][bombX].object;
player.bombs++;
}
sumber
Jawaban:
Itu tidak terlihat buruk, tetapi Anda perlu kontrol waktu dan input yang lebih baik. Karena kecepatan gerakan tergantung pada pengaturan pengulangan keystroke pada mesin pengguna, itu tidak sepenuhnya optimal.
Alih-alih Anda harus melacak tombol mana yang saat ini sedang ditekan, Anda dapat melakukan ini seperti (dalam kodesemu):
Dan kemudian dalam fungsi pembaruan Anda, Anda memindahkan pemain jika
keyisdown
, dan mungkin Anda menerapkan beberapa kondisi lain, seperti pemain tidak dapat bergerak jika dia bergerak kurang dari beberapa pembaruan yang lalu.Simpan penghitung yang diperbarui atau cara lain untuk melacak waktu sehingga kode Anda selalu tahu persis sejauh mana perkembangannya.
Da bom
Secara pribadi saya akan membuatnya sederhana, Anda sebenarnya tidak perlu menggunakan
this
,new
dan semua barang mewah lainnya dalam JavaScript untuk membuat objek yang berguna.Anda dapat melakukan sesuatu seperti:
Kemudian Anda dapat melihat-lihat peta pada setiap pembaruan, memeriksa apakah ada bom dan apakah sudah waktunya untuk meledak, jika demikian hancurkan dan hapus objek bom.
Bugtracking
Kode Anda bocor kesalahan, mereka cukup sederhana, tetapi jika Anda tidak belajar tentang mereka dan menanganinya Anda akan memiliki masalah di kemudian hari. Setiap browser modern memiliki konsol pengembang klon Firebug. Buka, lihat tab konsol skrip, lihat semua teks merah jahat dan perbaiki.
Sunting: Masalah ketepatan waktu
Hanya untuk catatan, Anda mungkin ingin sesuatu yang sedikit lebih maju daripada
setInterval
untuk waktu, jika Anda serius Anda benar-benar perlu membuat kode Anda menyesuaikan waktu. Lihat jawaban Stack Overflow pertama saya untuk perkiraan deskripsi masalah: https://stackoverflow.com/a/2549426/305545Sunting: setTimeOut versi diperbaiki
Karena Anda menggunakan variabel yang sama untuk bom yang berbeda, Anda akan menimpa mereka setiap kali bom baru ditempatkan. Anda dapat menggunakan penutupan untuk membuat variabel individual untuk setiap bom, seperti:
Sekarang
bombX
danbombY
variabel danexplode
fungsi adalah penduduk setempat untuk penutupan diciptakan oleh placeBombs, sehingga adalah contoh lokalexplode
yang melekat pada batas waktu, dan membaca variabel lokal. Setiap kali Anda meneleponplaceBomb
penutupan baru dibuat.Saya tidak akan menggunakan setTimeout untuk ini, saya akan menghitung pembaruan, sehingga memastikan sejumlah pembaruan tetap sebelum bom meledak, tapi saya kira ini akan berhasil ok.
sumber
Sepertinya Anda mendapat awnser yang cukup bagus, hanya ingin menambahkan beberapa kode praktis untuk ledakan.
sumber