Rumah hujung hadapan web tutorial js Mencipta rekod penuh pertempuran kereta kebal dengan kemahiran javascript (1)_javascript

Mencipta rekod penuh pertempuran kereta kebal dengan kemahiran javascript (1)_javascript

May 16, 2016 pm 04:30 PM
javascript berorientasikan objek

PS: Pertempuran kereta kebal ini telah ditulis semula oleh saya sendiri selepas memuat turun sekeping kod sumber dalam talian. Tidak ada yang terlalu sukar dengan sendirinya. Kes ini menggunakan berorientasikan objek js dengan lebih baik dan boleh digunakan sebagai tutorial pengenalan untuk berorientasikan objek js.

1. Cipta objek asas untuk merealisasikan pergerakan mudah kereta kebal

1.1 Bagaimana untuk melukis kanvas dalam peta?

Mengambil kira isu keserasian penyemak imbas, kami menggunakan kaedah pengendalian dom untuk merealisasikan lukisan dan menyegarkan objek permainan. Bagaimanakah kita menyimpan peta kita? Kita harus menyimpan peta dalam tatasusunan dua dimensi Tiada tatasusunan dua dimensi dalam js, tetapi ia boleh dicapai dengan menyimpan tatasusunan dalam tatasusunan satu dimensi.

1.2 Pelaksanaan Kod

Kami mereka bentuk kanvas sebagai tatasusunan dua dimensi 13 * 13. Panjang dan lebar yang sepadan bagi setiap elemen dalam peta ialah 40px Keseluruhan peta boleh dianggap sebagai sel yang terdiri daripada saiz 40px*40p x , maka saiz keseluruhan kanvas kami ialah 520px * 520px

Sebelum memuatkan kod, izinkan saya memberi anda gambar rajah hubungan objek:

1.2.1 Cipta objek peringkat teratas

kod html:

Salin kod Kod adalah seperti berikut:




Pertempuran Kereta Kebal







           window.onload = fungsi () {
// Panggil objek pemuatan permainan
            var loader = new GameLoader();
Loader.Begin();
         }











Fail TankObject.js:

Salin kod Kod adalah seperti berikut:

// Objek peringkat atas
TankObject = fungsi () {
This.XPosition = 0; // Kedudukan X objek dalam peta (13*13)
This.YPosition = 0;
This.UI = null; // elemen dom
}
//Tukar kaedah statik UI
TankObject.prototype.UpdateUI = fungsi (battlFiled) { }
//Tetapkan kedudukan, parameter adalah seperti berikut: 1*40,6*40
TankObject.prototype.SetPosition = fungsi (leftPosition, topPosition) {
// Math.round di lokasi peta
This.XPosition = Math.round(leftPosition / 40);
This.YPosition = Math.round(topPosition / 40);
//Tetapkan kedudukan pada borang
Jika (this.UI != null && this.UI.style != null) {
This.UI.style.left = leftPosition "px";
This.UI.style.top = topPosition "px";
}
}


Di sini kita menggunakan koordinat X, Y untuk mewakili lokasi objek pada peta. Kemudian kita akan meletakkan setiap objek dalam peta ke dalam tatasusunan dua dimensi Pada masa ini, kita boleh mendapatkan objek yang sepadan melalui koordinat X dan Y.
Kemudian gunakan kiri dan atas dalam css untuk mengawal kedudukan objek kita dalam borang. (objek alih: kereta kebal, peluru)

1.2.2 Cipta objek awam

Kami juga perlu mencipta objek awam untuk menulis beberapa kaedah yang biasa kami gunakan.

Common.js:

Salin kod Kod adalah seperti berikut:

//Empat arah pergerakan kereta kebal
var EnumDirection = {
Atas: "0",
Kanan: "1",
Bawah: "2",
Kiri: "3"
};
//Objek kaedah am
var UtilityClass = {
//Buat elemen dom ke dalam parentNode, anda boleh menentukan id, className
CreateE: fungsi (jenis, id, className, parentNode) {
        var J = document.createElement(type);
Jika (id) { J.id = id };
If (className) { J.className = className };
          return parentNode.appendChild(J);
}, // Alih keluar elemen
​ RemoveE: function (obj, parentNode) {
         parentNode.removeChild(obj);
},
GetFunctionName: fungsi (konteks, argumentCallee) {
untuk (var i dalam konteks) {
Jika (konteks[i] == argumentCallee) { kembalikan i };
}
         kembalikan "";
}, // Ikat acara dan kembalikan kaedah func, ini ialah obj masuk
BindFunction: fungsi (obj,func) {
         mengembalikan fungsi () {
                 func.apply(obj, arguments);
        };
}
};

1.2.3 Mencipta objek bergerak

Mover.js

Salin kod Kod adalah seperti berikut:

//Pindahkan objek, diwarisi daripada objek peringkat atas
Penggerak = fungsi () {
This.Direction = EnumDirection.Up;
Ini.Kelajuan = 1;
}
Mover.prototype = TankObject baharu();
Mover.prototype.Move = fungsi () {
Jika (kunci ini) {
             kembali;/* Dinyahaktifkan atau masih dalam proses, operasi tidak sah */
}
//Tetapkan imej latar belakang tangki mengikut arah
This.UI.style.backgroundPosition = "0 -" this.Direction * 40 "px";
// Jika arah atas dan bawah, vp adalah atas; jika arah atas dan kiri, val ialah -1
var vp = ["atas", "kiri"][((this.Direction == EnumDirection.Up) || (this.Direction == EnumDirection.Down)) 0 : 1];
var val = ((this.Direction == EnumDirection.Up) || (this.Direction == EnumDirection.Left)) ? This.lock = true;/* Kunci */
//Simpan objek semasa ke This
var Ini = ini;
//Rekod kedudukan permulaan pergerakan objek
var startmoveP = parseInt(This.UI.style[vp]);
var xp = This.XPosition, yp = This.YPosition;
var subMove = setInterval(fungsi () {
                           // Mula bergerak, 5px setiap kali
This.UI.style[vp] = parseInt(This.UI.style[vp]) 5 * val "px";
                       // Gerakkan satu sel pada satu masa 40px
Jika (Math.abs((parseInt(This.UI.style[vp]) - startmoveP)) >= 40) {
                 clearInterval(subMove);
This.lock = false;/* Buka kunci, benarkan melangkah semula */
// Rekod kedudukan objek dalam jadual selepas bergerak
This.XPosition = Math.round(This.UI.offsetLeft / 40);
This.YPosition = Math.round(This.UI.offsetTop / 40);
         }
}, 80 - ini. Kelajuan * 10);
}


Objek bergerak di sini mewarisi daripada objek peringkat teratas kami, dan ini di sini mewakili objek yang memanggil kaedah Move.
Fungsi objek Move bergerak mengikut arah dan kelajuan objek Setiap kali ia bergerak 5px, ia menggerakkan sejumlah 40px satu sel. Objek ini akan dikembangkan kemudian, dan fungsi seperti pengesanan perlanggaran akan ditambahkan.

1.2.4 Cipta objek tangki
Fail Tank.js:

Salin kod Kod adalah seperti berikut:
//objek tangki yang diwarisi daripada Mover
Tangki=fungsi(){}
Tank.prototype = new Mover();
//Buat tangki pemain, diwarisi daripada objek tangki

SelfTank = fungsi () {
This.UI = UtilityClass.CreateE("div", "", "itank", document.getElementById("divMap"));
This.MovingState = palsu;
Ini.Kelajuan = 4;
}
SelfTank.prototype = Tangki baharu();
//Tetapkan kedudukan tangki
SelfTank.prototype.UpdateUI = fungsi () {
This.UI.className = "itank";
// Kaedah objek peringkat atas, tetapkan kedudukan tangki
This.SetPosition(this.XPosition * 40, this.YPosition * 40);
}

Kini hanya kereta kebal pemain telah dibuat, dan kami akan menambah kereta kebal musuh kepada mereka kemudian.

1.2.5 Cipta objek pemuatan permainan (teras)

Salin kod Kod adalah seperti berikut:

// Objek pemuatan permainan Objek teras keseluruhan permainan
GameLoader = fungsi () {
This.mapContainer = document.getElementById("divMap"); // Div
yang menyimpan peta permainan This._selfTank = null; // tangki pemain
This._gameListener = null; // id pemasa gelung utama permainan
}
GameLoader.prototype = {
Mulakan: fungsi () {
// Mulakan tangki pemain
        var selfT = SelfTank baharu();
            selfT.XPosition = 4;
            selfT.YPosition = 12;
            selfT.UpdateUI();
This._selfTank = selfT;
                           // Tambah acara utama
          var wrapper = UtilityClass.BindFunction(ini, ini.OnKeyDown);
             window.onkeydown = document.body.onkeydown = warpper;
            warpper = UtilityClass.BindFunction(ini, ini.OnKeyUp);
            window.onkeyup = document.body.onkeyup = warpper;
                    // Gelung utama permainan
           warpper = UtilityClass.BindFunction(ini, ini.Run);
/*Kunci kawalan pemantauan pemasa lama*/
This._gameListener = setInterval(warpper, 20);
}
// Tekan papan kekunci dan tangki pemain mula bergerak
, OnKeyDown: fungsi (e) {
suis ((window.event || e).keyCode) {
kes 37:
This._selfTank.Direction = EnumDirection.Left;
This._selfTank.MovingState = benar;
                         rehat;                                                               kes 38:
This._selfTank.Direction = EnumDirection.Up;
This._selfTank.MovingState = benar;
                         rehat;                                                       kes 39:
This._selfTank.Direction = EnumDirection.Right;
This._selfTank.MovingState = benar;
                              rehat;                                                    kes 40:
This._selfTank.Direction = EnumDirection.Down;
This._selfTank.MovingState = benar;
                          rehat;          }
}
//Tekan butang untuk berhenti bergerak
, OnKeyUp: fungsi (e) {
suis ((window.event || e).keyCode) {
kes 37:
kes 38:
kes 39:
kes 40:
This._selfTank.MovingState = palsu;
                  rehat;
         }
}
/*Fungsi larian gelung utama permainan, nadi dan hab permainan*/
, Jalankan: fungsi () {
Jika (this._selfTank.MovingState) {
This._selfTank.Move();
         }
}
};

Kod objek memuatkan permainan nampaknya banyak, tetapi ia sebenarnya melakukan dua perkara:
​ ​ 1. Cipta objek tangki pemain.
​ ​ 2. Tambah acara mendengar kunci Apabila pemain menekan kekunci pergerakan, kaedah Gerakkan tangki dipanggil untuk menggerakkan tangki.

Ringkasan: Pada ketika ini tangki kami boleh bergerak bebas dengan menekan butang. Seterusnya kita perlu menambah baik peta dan pengesanan perlanggaran.

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP Jan 05, 2024 pm 06:08 PM

Tutorial JavaScript: Bagaimana untuk mendapatkan kod status HTTP, contoh kod khusus diperlukan: Dalam pembangunan web, interaksi data dengan pelayan sering terlibat. Apabila berkomunikasi dengan pelayan, kami selalunya perlu mendapatkan kod status HTTP yang dikembalikan untuk menentukan sama ada operasi itu berjaya dan melaksanakan pemprosesan yang sepadan berdasarkan kod status yang berbeza. Artikel ini akan mengajar anda cara menggunakan JavaScript untuk mendapatkan kod status HTTP dan menyediakan beberapa contoh kod praktikal. Menggunakan XMLHttpRequest

Terokai pengaturcaraan berorientasikan objek dalam Go Terokai pengaturcaraan berorientasikan objek dalam Go Apr 04, 2024 am 10:39 AM

Bahasa Go menyokong pengaturcaraan berorientasikan objek melalui definisi jenis dan perkaitan kaedah. Ia tidak menyokong warisan tradisional, tetapi dilaksanakan melalui gubahan. Antara muka menyediakan ketekalan antara jenis dan membenarkan kaedah abstrak ditakrifkan. Kes praktikal menunjukkan cara menggunakan OOP untuk mengurus maklumat pelanggan, termasuk mencipta, mendapatkan, mengemas kini dan memadam operasi pelanggan.

Ciri Lanjutan PHP: Amalan Terbaik dalam Pengaturcaraan Berorientasikan Objek Ciri Lanjutan PHP: Amalan Terbaik dalam Pengaturcaraan Berorientasikan Objek Jun 05, 2024 pm 09:39 PM

Amalan terbaik OOP dalam PHP termasuk konvensyen penamaan, antara muka dan kelas abstrak, pewarisan dan polimorfisme, dan suntikan kebergantungan. Kes praktikal termasuk: menggunakan mod gudang untuk mengurus data dan menggunakan mod strategi untuk melaksanakan pengisihan.

Bagaimana untuk mendapatkan kod status HTTP dalam JavaScript dengan cara yang mudah Bagaimana untuk mendapatkan kod status HTTP dalam JavaScript dengan cara yang mudah Jan 05, 2024 pm 01:37 PM

Pengenalan kepada kaedah mendapatkan kod status HTTP dalam JavaScript: Dalam pembangunan bahagian hadapan, kita selalunya perlu berurusan dengan interaksi dengan antara muka bahagian belakang, dan kod status HTTP adalah bahagian yang sangat penting daripadanya. Memahami dan mendapatkan kod status HTTP membantu kami mengendalikan data yang dikembalikan oleh antara muka dengan lebih baik. Artikel ini akan memperkenalkan cara menggunakan JavaScript untuk mendapatkan kod status HTTP dan memberikan contoh kod khusus. 1. Apakah kod status HTTP bermakna kod status HTTP apabila penyemak imbas memulakan permintaan kepada pelayan, perkhidmatan tersebut

Adakah terdapat ciri berorientasikan objek seperti kelas di Golang? Adakah terdapat ciri berorientasikan objek seperti kelas di Golang? Mar 19, 2024 pm 02:51 PM

Tiada konsep kelas dalam erti kata tradisional dalam Golang (bahasa Go), tetapi ia menyediakan jenis data yang dipanggil struktur, yang melaluinya ciri berorientasikan objek yang serupa dengan kelas boleh dicapai. Dalam artikel ini, kami akan menerangkan cara menggunakan struktur untuk melaksanakan ciri berorientasikan objek dan menyediakan contoh kod konkrit. Definisi dan penggunaan struktur Pertama, mari kita lihat definisi dan penggunaan struktur. Di Golang, struktur boleh ditakrifkan melalui kata kunci jenis dan kemudian digunakan di mana perlu. Struktur boleh mengandungi atribut

Analisis ciri berorientasikan objek bahasa Go Analisis ciri berorientasikan objek bahasa Go Apr 04, 2024 am 11:18 AM

Bahasa Go menyokong pengaturcaraan berorientasikan objek, mentakrifkan objek melalui struct, mentakrifkan kaedah menggunakan penerima penunjuk, dan melaksanakan polimorfisme melalui antara muka. Ciri berorientasikan objek menyediakan penggunaan semula kod, kebolehselenggaraan dan enkapsulasi dalam bahasa Go, tetapi terdapat juga pengehadan seperti kekurangan konsep tradisional kelas dan pewarisan dan hantaran tandatangan kaedah.

Bagaimana untuk melaksanakan sistem tandatangan elektronik dalam talian menggunakan WebSocket dan JavaScript Bagaimana untuk melaksanakan sistem tandatangan elektronik dalam talian menggunakan WebSocket dan JavaScript Dec 18, 2023 pm 03:09 PM

Gambaran keseluruhan cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem tandatangan elektronik dalam talian: Dengan kemunculan era digital, tandatangan elektronik digunakan secara meluas dalam pelbagai industri untuk menggantikan tandatangan kertas tradisional. Sebagai protokol komunikasi dupleks penuh, WebSocket boleh melakukan penghantaran data dua hala masa nyata dengan pelayan Digabungkan dengan JavaScript, sistem tandatangan elektronik dalam talian boleh dilaksanakan. Artikel ini akan memperkenalkan cara menggunakan WebSocket dan JavaScript untuk membangunkan dalam talian yang mudah

WebSocket dan JavaScript: Teknologi utama untuk merealisasikan berita kewangan dalam talian masa nyata WebSocket dan JavaScript: Teknologi utama untuk merealisasikan berita kewangan dalam talian masa nyata Dec 17, 2023 pm 11:21 PM

WebSocket dan JavaScript: Teknologi utama untuk merealisasikan berita kewangan dalam talian masa nyata Pengenalan: Dengan perkembangan Internet, berita kewangan dalam talian masa nyata telah menjadi semakin penting kepada pelabur dan pengamal kewangan. Kaedah komunikasi rangkaian tradisional sukar untuk mencapai kemas kini masa nyata, tetapi protokol WebSocket dan JavaScript menyediakan penyelesaian yang cekap dan boleh dipercayai. Artikel ini akan memperkenalkan prinsip asas WebSocket dan JavaScript, dan menunjukkan cara menggunakannya melalui contoh kod tertentu.

See all articles