Saya telah bermain-main mengembangkan beberapa game sederhana (permainan kata-kata ^^) dari waktu ke waktu, hanya untuk bersenang-senang. Untuk melakukan itu saya sangat sering menemukan semacam deteksi tabrakan. Saya pikir saya akan menunjukkan kepada Anda cara mudah untuk mendeteksi tabrakan dalam JavaScript Show Apa itu tabrakan?Bahkan sebelum kita memulai pengkodean, kita perlu memikirkan tentang apa sebenarnya yang ingin kita deteksi. Kami membutuhkan beberapa syarat. Untuk contoh ini saya berasumsi bahwa kedua objek yang bertabrakan adalah persegi panjang. Mereka memiliki koordinat x dan y serta lebar dan tinggi. Sejauh ini bagus. Itu cukup mudah. Sekarang bagian yang jauh lebih penting. bagaimana kita tahu jika dua persegi panjang bertabrakan? Dua persegi panjang bertabrakan, ketika mereka tumpang tindih dalam beberapa cara. Memiliki posisi dan dimensinya, kita dapat menentukan kondisi untuk tumpang tindih. Beri nama persegi panjang kita R1 dan R2 untuk keterbacaan yang lebih baik. Agar R1 dan R2 tumpang tindih, ada 4 syarat yang harus dipenuhi
Jika ini tidak masuk akal saat membaca, saya sarankan membuat sketsa, ini sangat membantu Dua kondisi pertama memeriksa tumpang tindih horizontal, sementara yang lain memeriksanya secara vertikal. Perhatikan, bahwa jika kita hanya memeriksa kondisi pertama untuk tumpang tindih horizontal, kanan R1 mungkin berada di kanan kanan R2 .. tetapi kiri R1 mungkin juga, cukup letakkan R1 di kanan R2, tanpa tumpang tindih sama sekali. Ini berlaku untuk aturan 3 dan dengan cara yang sama Menerjemahkan ke dalam kodeSekarang setelah kondisi kami digariskan, bagian terberat sebenarnya sudah dilakukan. Yang tersisa hanyalah menerjemahkan Bahasa Inggris ke Kode secara langsung Menyalin ke clipboard Hanya itu yang diperlukan untuk mendeteksi antara dua objek yang sangat sederhana. Sangat mudah, sangat mudah Kita bisa selesai sekarang, tapi mari lanjutkan dan tambahkan satu lagi fitur yang nyaman Darimana itu datang?Selain fakta bahwa tabrakan terjadi sama sekali, Anda seringkali juga perlu menentukan di mana tepatnya tabrakan itu terjadi. Dalam upaya saya melakukan Lompat 'n' Lari, misalnya, ada perbedaan besar apakah karakter saya mengenai musuh dari atas atau dari sisi lain (masalah hidup dan mati, jika Anda mau. ). Jadi, inilah yang saya buat untuk mendapatkan informasi itu Menyalin ke clipboard Apa yang saya lakukan disini? Pertama saya menghitung jarak antara tepi setiap sisi. bottom_diff mewakili jarak dari tepi bawah R1 ke tepi atas R2, di sisi lain left_diff mewakili jarak antara tepi kiri R1 dan tepi kanan R2. Untuk mengubah informasi ini menjadi arah, pertama-tama saya harus menemukan jarak terkecil dari semuanya. Bayangkan R1 menjadi karakter saya dan R2 menjadi musuh. jika karakter melompat ke musuh, bottom_diff akan jauh lebih kecil dari top_diff. Jika karakter memiliki tinggi 20px, bottom_diff mungkin 0 atau 1 sedangkan top_diff adalah 20 atau 19 Ingatlah bahwa informasi ini agak "diarahkan". Contoh di atas memberi tahu Anda "R1 bertabrakan dengan R2 dari atas" karena karakternya adalah R1. Jika Anda melewati musuh sebagai R1 dan karakter sebagai R2, Anda akan mendapatkan kebalikannya Untuk menyelesaikannya, mari taruh semuanya dalam fungsi kecil yang rapi yang dapat Anda gunakan kembali kapan pun Anda perlu memeriksa tabrakan antara dua persegi panjang Menyalin ke clipboard KesimpulanIni dia. Setelah Anda memahami kondisi tumbukan dalam teori, pengkodeannya sangat mudah. Tantangan sebenarnya dalam pendeteksian tabrakan terletak pada prediksi, meminimalkan komputasi, dan semua jenis hal menarik lainnya yang berada di luar cakupan artikel ini Dalam JavaScript, tabrakan terjadi ketika dua atau lebih elemen HTML bertabrakan. Secara default, saat menggunakan pendengar acara bergerak pada elemen HTML, itu tidak akan mengenai elemen lain di layar Itu akan melewati elemen lain di DOM. Jadi, untuk mendeteksi tabrakan di JavaScript, kita harus melakukannya secara manual menggunakan koordinat x dan y dari elemen Pada artikel ini, kita akan mengambil dua elemen Kami akan mengimplementasikan deteksi tabrakan murni dalam JavaScript, dan kami tidak akan menggunakan perpustakaan pihak ketiga lainnya. Pertama, kita akan menulis HTML kita, lalu kita akan beralih ke bagian CSS, dan terakhir kita akan menulis kode JavaScript Di dalam HTML, kita akan menambahkan dua elemen
Kami akan menambahkan gaya dasar seperti lebar dan tinggi ke kotak sebagai 1 di dalam CSS dan mengubah posisi kedua kotak sebagai 2. Ini akan memungkinkan kita untuk memindahkan kotak ke mana saja di layarKami akan memberi warna latar merah untuk ________ 37 _______ dan kuning untuk ________ 38 _______ Karena kita ingin 6 dan 7 dan memberinya nilai 8. Kami juga akan menambahkan properti _9 ke square_1 karena kami akan menampilkan teks di atasnya setelah bertabrakan dengan yang lainTerakhir, kita akan mengatur _1 dari kotak pertama menjadi 1 karena kita ingin kotak itu tetap berada di atas yang lain saat memindahkannya. Jika kita tidak menyetel properti ini, properti ini akan berada di bawah kotak kedua _Keluaran Kami tidak dapat memindahkan kotak merah karena kami belum menambahkan pendengar acara pindah Pertama-tama kita harus mengakses dua kotak yang kita tambahkan di dalam HTML kita ke kode JavaScript kita. Untuk ini, kita akan menggunakan fungsi 2 untuk mendapatkan dua elemen div dan meneruskan nama kelas sebagai parameter ke fungsi iniKarena fungsi ini mengembalikan array, kami akan mengindeks untuk mengambil elemen pertama. Kemudian kita akan menyimpan dua kotak Sekarang kita memiliki akses ke kedua elemen persegi, pertama-tama kita akan mendapatkan lebar dan tinggi dari kedua elemen ini. Kami memiliki fungsi JavaScript yang disebut 7, yang menggunakan elemen sebagai parameterJadi, kami akan meneruskan variabel Perhatikan bahwa kita juga menggunakan fungsi 0. Ini karena fungsi _7 mengembalikan nilai dengan satuannyaMisalnya, kami telah menetapkan lebar untuk kedua elemen sebagai 1. Jadi nilai yang dikembalikan oleh fungsi _7 akan menjadi 1 dalam bentuk stringKami tidak menginginkan bagian _5, jadi kami menggunakan 0 dan meneruskan 5 di dalamnya. Fungsi ini akan mengembalikan larik dua elemen, elemen pertama adalah 8, dan elemen kedua akan kosongKami membutuhkan nilai itu sendiri, jadi kami akan menggunakan 9 untuk mengaksesnya
Karena nilai yang dikembalikan akan berupa string, kami akan mengubahnya menjadi angka dan membaginya dengan 2 karena kami menginginkan nilai setengahnya, i. e. , 80. Pada akhirnya, kami menyimpan nilai ke dalam variabel, seperti yang ditunjukkan di atas Sekarang, kita akan menambahkan event listener _0 pada square_1 menggunakan fungsi 2. Seperti yang ditunjukkan di bawah, fungsi ini menggunakan event dan fungsi callback sebagai parameterKami akan meneruskan acara _3 ke fungsi callback untuk melacak posisi mouse di layarSegera setelah kami mengarahkan kursor mouse ke
Keluaran 5 dan 6 memberikan posisi kanan atas dan kanan bawah gerakan mouseNamun, kami ingin kursor ditampilkan di tengah persegi, jadi kami mengurangi lebar dan tinggi persegi menggunakan 7 dan 8 dengan setengah lebar dan tinggi yang disimpan di dalamnyaIni akan membuat kursor mouse mengarah ke tengah kotak saat kita menyeretnya, seperti yang ditunjukkan di bawah ini Sebelum menjalankan kode, pastikan Anda mengomentari fungsi 9, karena kami belum mendefinisikannya di dalam kode kamiSekarang, mari buat fungsi ________22______9 untuk mendeteksi tabrakan. Di sini, pertama-tama kita akan mendapatkan posisi kiri dan atas kotak menggunakan fungsi 7Terakhir, kita akan mengetikkan nilai string ke dalam angka dan menyimpannya dalam variabel Kami akan menyimpan posisi kiri dan atas Sekarang, kita akan memeriksa apakah kotak pertama kita (merah) memotong salah satu dari keempat sisi kotak kedua (kuning) atau tidak. Kami akan menambahkan satu syarat untuk setiap sisi kotak kedua (kuning) untuk diperiksa Perhatikan bahwa posisi x dan y kedua kotak saat ini berada di tengah kotak
Keluaran Untuk mendeteksi jika kotak merah bertabrakan dengan kotak kuning dari sisi kiri, kita akan memeriksa apakah posisi x dan lebar kotak merah lebih besar daripada posisi x kotak kuning dikurangi lebarnya. Kotak merah bertabrakan dengan kotak kuning dari sisi kiri jika lebih besar Ini akan mengembalikan nilai boolean yang akan kita simpan di dalam variabel Untuk mendeteksi jika kotak merah bertabrakan dengan kotak kuning dari sisi kanan, kita akan memeriksa apakah posisi x kotak merah dikurangi lebarnya lebih kecil dari posisi x kotak kuning dan lebarnya. Kotak merah bertabrakan dengan kotak kuning dari sisi kanan jika lebih kecil Ini akan mengembalikan nilai boolean yang akan kita simpan di dalam variabel Posisi atas mirip dengan posisi kiri; . Ini akan mengembalikan nilai boolean yang akan kita simpan di dalam variabel Posisi bawah mirip dengan posisi kanan, tetapi kita berurusan dengan sumbu y dan tinggi. Ini juga akan mengembalikan nilai boolean yang akan kita simpan di dalam variabel Di akhir fungsi _9, kita akan memeriksa apakah kotak merah melewati batas kotak kuning atau tidak dengan menambahkan kondisi div 3 dengan div 8, div 9, div 0, dan div 1 di dalamJika semua variabel menghasilkan nilai Jika kita membawa kotak merah keluar dari batas kotak kuning, maka kita akan menghapus batas dari kotak kuning dan menghapus teks dari kotak merah Bagaimana menemukan tabrakan antara dua objek dalam JavaScript?Anda dapat mendeteksi tabrakan dengan menggunakan kotak pembatas objek . Kotak pembatas adalah tipe TIGA. Box3 dan memiliki metode yang berguna seperti isIntersectionBox , containsBox atau containsPoint yang sesuai dengan semua kebutuhan Anda saat Anda ingin mendeteksi tabrakan.
Apa itu deteksi tabrakan di JS?Tumpang tindih elemen adalah apa yang dapat disebut sebagai deteksi tabrakan. Ini adalah bagian standar dari sebagian besar game, saat memindahkan elemen halaman agar dapat mendeteksi posisi dan menghitung jika tumpang tindih. |