Artikel ini akan memperkenalkan konsep pengaturcaraan responsif, yang menggunakan perpustakaan seperti bacon.js untuk mengendalikan ciri -ciri asynchronous JavaScript.
mata utama
Pengaturcaraan responsif mengendalikan aliran data tak segerak, membantu menguruskan ciri -ciri asynchronous JavaScript dan mengelakkan "panggil balik neraka". Perpustakaan seperti bacon.js boleh digunakan untuk melaksanakan konsep ini.
Proses pengaturcaraan responsif aliran data tak segerak. Ia menggantikan mod iterator dengan mod yang boleh dilihat. Ini berbeza dengan pengaturcaraan penting, di mana anda secara aktif melangkah ke atas data untuk memproses urus niaga. Dalam pengaturcaraan responsif, anda melanggan data dan bertindak balas terhadap peristiwa secara tidak segerak.
Bart de Smet menerangkan peralihan ini dalam ucapannya. André Staltz meneroka pengaturcaraan responsif dalam artikel ini.Apabila anda mula menggunakan pengaturcaraan responsif, semuanya menjadi aliran data tak segerak: pangkalan data pada pelayan, peristiwa tetikus, janji, dan permintaan pelayan. Ini membolehkan anda mengelakkan apa yang disebut "panggil balik neraka" dan memberikan pengendalian ralat yang lebih baik. Satu lagi ciri yang kuat dalam pendekatan ini adalah keupayaan untuk menggabungkan aliran data, yang memberikan anda kawalan dan fleksibiliti yang hebat. Jafar Husain menerangkan konsep -konsep ini dalam ucapannya.
bacon.js adalah perpustakaan pengaturcaraan responsif yang merupakan alternatif kepada RXJS. Di bahagian seterusnya, kami akan menggunakan bacon.js untuk membina versi permainan Pac-Man yang terkenal.
Tetapan Projek
Untuk memasang bacon.js, anda boleh menggunakan Bower untuk menjalankan arahan berikut pada CLI:
Selepas memasang perpustakaan, anda boleh mula menggunakan pengaturcaraan responsif.
$ bower install bacon
Demi penampilan dan rasa, saya akan menggunakan sistem berasaskan teks supaya saya tidak perlu berurusan dengan sumber dan sprite. Untuk mengelakkan menciptanya sendiri, saya akan menggunakan unicodetiles.js perpustakaan yang hebat.
Di samping itu, ia mendedahkan panggilan balik berikut:
Jadi, untuk menggunakan API ini, kami akan memulakan permainan, panggil Spawnghost secara teratur untuk menjana hantu, dengar untuk panggil balik OnPacmanmove, dan apabila ini berlaku, hubungi MovePacman untuk benar -benar memindahkan Pacman. Kami juga memanggil UpdateGhosts secara teratur untuk mengemas kini pergerakan Ghost. Akhirnya, kami memanggil Tick secara teratur untuk mengemas kini perubahan. Yang penting, kami akan menggunakan bacon.js untuk membantu kami mengendalikan acara.
Sebelum memulakan, mari buat objek permainan:
$ bower install bacon
Kami membuat pacmangame baru dan lulus dalam objek induk ibu bapa ibu bapa, di mana permainan akan diberikan. Sekarang kami bersedia untuk membina permainan kami.
aliran acara atau objek yang boleh dilihat
Event Stream adalah objek yang dapat dilihat yang anda boleh melanggan untuk memerhatikan peristiwa secara tidak segerak. Anda boleh melihat tiga jenis peristiwa ini menggunakan tiga kaedah berikut:
Sekarang kita telah memahami penggunaan asas aliran acara, mari kita lihat bagaimana untuk membuat aliran acara. Bacon.js menyediakan beberapa kaedah yang boleh anda gunakan untuk membuat aliran acara dari acara jQuery, Ajax Promise, Dom EventTarget, Panggilan Mudah, dan juga Array.
Satu lagi konsep berguna mengenai aliran acara adalah konsep masa. Iaitu, peristiwa mungkin datang pada masa akan datang. Sebagai contoh, kaedah ini membuat aliran acara yang melewati peristiwa dalam selang waktu tertentu:
Untuk lebih banyak kawalan, anda boleh menggunakan bacon.frombinder () untuk membuat aliran acara anda sendiri. Kami akan menunjukkan ini dalam permainan dengan mewujudkan pembolehubah Movestream yang akan menjana acara untuk gerakan lelaki PAC kami.
var game = new PacmanGame(parentDiv);
kita boleh memanggil tenggelam dengan nilai yang akan menghantar peristiwa yang boleh didengar oleh pemerhati. Panggilan untuk tenggelam adalah dalam panggilan balik OnPacmanMove kami-iaitu, apabila pengguna menekan kekunci dan meminta Pac-Man bergerak. Oleh itu, kami membuat objek yang dapat dilihat yang mengeluarkan peristiwa mengenai permintaan langkah Pac-Man.
Perhatikan bahawa kami memanggil sinki menggunakan nilai mudah MOVEV. Ini akan menggunakan nilai MoveV untuk menolak acara Pindah. Kami juga boleh menolak peristiwa seperti bacon.error atau bacon.end.
Mari buat aliran acara lain. Kali ini kita mahu mengeluarkan pemberitahuan untuk menjana acara hantu. Kami akan membuat pemboleh ubah spawnstream untuk ini:
$ bower install bacon
bacon.sequential () mencipta aliran yang melewati nilai pada selang waktu yang diberikan. Dalam kes kita, ia akan lulus warna hantu setiap 800 milisaat. Kami juga mempunyai panggilan untuk kelewatan () kaedah. Ia menangguhkan aliran, jadi acara akan mula dipancarkan selepas kelewatan 2.5 saat.
Dalam bahagian ini, saya akan menyenaraikan beberapa kaedah yang lebih praktikal yang boleh digunakan untuk aliran acara:
Untuk lebih banyak kaedah untuk streaming acara, sila rujuk halaman dokumentasi rasmi. Anda boleh menggunakan rajah marmar untuk melihat perbezaan antara pendikit dan de-jittering:
var game = new PacmanGame(parentDiv);
Seperti yang anda lihat, pendikit adalah peristiwa-peristiwa yang rutin, sementara de-jittering hanya memancarkan peristiwa selepas "tempoh kesunyian" yang diberikan.
utiliti ini mudah dan berkuasa, mampu mengkonseptualisasikan dan mengawal aliran, dengan itu mengawal data di dalamnya. Saya cadangkan menonton ceramah ini tentang bagaimana Netflix menggunakan kaedah mudah ini untuk membuat kotak autocomplete.
Setakat ini, kami telah mencipta dan memanipulasi aliran acara dan sekarang kami akan memerhatikan peristiwa dengan melanggan aliran.
Mengkaji Movestream dan Spawnstream yang kami buat sebelum ini. Mari kita melanggannya sekarang:
var moveStream = Bacon.fromBinder(function(sink) { game.onPacmanMove = function(moveV) { sink(moveV); }; });
Walaupun anda boleh menggunakan stream.subscribe () untuk melanggan aliran, anda juga boleh menggunakan stream.onvalue (). Perbezaannya ialah melanggan akan memancarkan ketiga -tiga jenis peristiwa yang telah kita lihat sebelum ini, sementara onValue akan memancarkan hanya peristiwa jenis bacon.next. Iaitu, ia akan mengabaikan acara bacon.error dan bacon.end.
Apabila peristiwa muncul di Spawnstream (kemalangan setiap 800 milisaat), nilainya akan menjadi salah satu warna hantu, yang kami gunakan untuk menjana hantu. Apabila peristiwa muncul di Movestream, ingatlah bahawa ini berlaku apabila pengguna menekan kekunci untuk memindahkan lelaki PAC. Kami memanggil Game.Movepacman dengan Arah Movev: ia muncul dengan acara itu, jadi Pacman bergerak.
Anda boleh menggabungkan aliran acara untuk membuat aliran lain. Terdapat banyak cara untuk menggabungkan aliran acara, dan di sini terdapat beberapa daripada mereka:
mari kita lihat contoh bacon.combinetemplate:
$ bower install bacon
Seperti yang anda lihat, kami menggunakan templat untuk menggabungkan aliran acara (iaitu kata laluan, nama pengguna, nama pertama, dan nama terakhir) ke dalam aliran acara gabungan yang dipanggil Logininfo. Apabila aliran acara menerima acara, LoginInfo Stream memancarkan peristiwa, menggabungkan semua templat lain ke dalam satu objek template.
bacon.js Terdapat juga kaedah menggabungkan sungai, iaitu bacon.bus (). Bacon.bus () adalah aliran acara yang membolehkan anda menolak nilai ke dalam aliran. Ia juga membolehkan aliran lain dimasukkan ke dalam bas. Kami akan menggunakannya untuk membina bahagian terakhir permainan:
var game = new PacmanGame(parentDiv);
Sekarang kita menggunakan bacon.interval untuk membuat aliran lain - Ghoststream. Aliran ini akan memancarkan 0 setiap 1 saat. Kali ini kami melanggannya dan memanggil Game.updateghosts untuk memindahkan hantu. Ini adalah untuk menggerakkan hantu setiap 1 saat. Sila ambil perhatian bahawa permainan.tick telah mengulas dan ingat permainan lain.TICKS di Movestream? Kedua -dua aliran mengemas kini permainan dan akhirnya memanggil permainan.tick untuk menjadikan perubahan, jadi bukannya memanggil permainan.tick dalam setiap aliran, kita boleh menjana aliran ketiga -gabungan kedua -dua aliran ini -dan dalam gabungan panggilan gabungan. aliran.
Untuk menggabungkan aliran, kita boleh menggunakan bacon.bus. Ini adalah aliran akhir peristiwa dalam permainan kami, yang kami panggil CombinedTickStream. Kemudian kami memasukkan Movestream dan Ghoststream ke dalamnya, dan akhirnya melanggannya dan panggil Game.tick di dalamnya.
itu sahaja, kami sudah selesai. Satu -satunya perkara yang tersisa adalah untuk memulakan permainan menggunakan game.start ();.
bacon.property dan lebih banyak contoh
var moveStream = Bacon.fromBinder(function(sink) { game.onPacmanMove = function(moveV) { sink(moveV); }; });
Ketahui lebih banyak maklumat dan demonstrasi masa nyata
Dalam artikel ini, kami memperkenalkan pengaturcaraan responsif menggunakan bacon.js dengan membina permainan PAC Man. Ia memudahkan reka bentuk permainan kami dan memberi kami lebih banyak kawalan dan fleksibiliti melalui konsep streaming acara. Kod sumber lengkap boleh didapati di GitHub, dan demo langsung boleh didapati di sini.Berikut adalah beberapa pautan yang lebih berguna:
Untuk mula membina permainan Pac Man anda sendiri dengan bacon.js, anda perlu memahami asas -asas JavaScript dan pengaturcaraan responsif fungsional (FRP). Sebaik sahaja anda menguasai pengetahuan ini, anda boleh mula menubuhkan persekitaran pembangunan. Anda perlu memasang Node.js dan NPM (Pengurus Pakej Node) pada komputer anda. Selepas itu, anda boleh memasang bacon.js menggunakan npm. Sebaik sahaja anda mempunyai segala -galanya, anda boleh mula menulis kod permainan. Anda boleh mengikuti tutorial di laman web kami untuk panduan langkah demi langkah mengenai cara membina permainan PAC lelaki menggunakan bacon.js.
bacon.js adalah perpustakaan pengaturcaraan reaktif berfungsi (FRP) untuk JavaScript. Ia membolehkan anda mengendalikan peristiwa asynchronous seperti input pengguna dengan cara yang lebih mudah diurus dan boleh dibaca. Dalam membina permainan PAC Man, bacon.js boleh digunakan untuk memproses input pengguna (seperti peristiwa papan kekunci), logik permainan (seperti pergerakan Pac Man and Ghost), dan menjadikan keadaan permainan ke skrin.
Sudah tentu! Selepas membina permainan Pac Man asas dengan bacon.js, anda boleh menyesuaikannya dengan keinginan anda. Anda boleh mengubah kesan visual permainan, menambah ciri -ciri baru, dan juga mengubah suai peraturan permainan. Kemungkinannya tidak berkesudahan, dan bahagian yang terbaik ialah anda boleh melakukannya semasa masih mendapat manfaat daripada kuasa dan kesederhanaan bacon.js dan pengaturcaraan responsif berfungsi.
Debugging Games Pac-Man yang dibina dengan bacon.js adalah serupa dengan debugging mana-mana aplikasi JavaScript yang lain. Anda boleh menggunakan alat pemaju penyemak imbas untuk menyemak kod, menetapkan titik putus, dan melangkah melalui kod. Di samping itu, bacon.js menyediakan kaedah yang dipanggil "onError" yang boleh anda gunakan untuk mengendalikan kesilapan dalam aliran acara.
Terdapat beberapa cara untuk mengoptimumkan prestasi permainan PAC Man yang dibina dengan bacon.js. Salah satu cara adalah untuk meminimumkan bilangan kemas kini DOM. Anda boleh menggunakan fungsi "Combinetemplate" bacon.js untuk mencapai ini dengan menggabungkan pelbagai aliran ke dalam satu aliran yang mengemas kini DOM. Cara lain ialah menggunakan fungsi "Flatmap" untuk mengelakkan membuat aliran yang tidak perlu.
Ya, anda boleh menggunakan bacon.js untuk membina mana -mana jenis permainan yang perlu mengendalikan peristiwa asynchronous. Ini termasuk bukan sahaja permainan arked klasik seperti PAC Man, tetapi juga permainan yang lebih kompleks seperti permainan strategi masa nyata atau permainan dalam talian berbilang pemain.
Menambah ciri multiplayer ke permainan PAC Man yang dibina dengan bacon.js memerlukan pelayan untuk mengendalikan komunikasi antara pemain. Anda boleh menggunakan Node.js dan WebSockets untuk ini. Pada pelanggan, anda akan menggunakan bacon.js untuk mengendalikan mesej WebSocket yang masuk dan keluar.
Ya, anda boleh menggunakan permainan PAC Man yang dibina dengan bacon.js ke laman web anda. Anda perlu membungkus kod JavaScript anda dengan alat seperti Webpack atau Browserify, dan kemudian anda boleh menjadi tuan rumah kod dan sumber permainan yang dibundel seperti imej dan bunyi pada pelayan web anda.
Ya, anda boleh menggunakan bacon.js dengan perpustakaan atau kerangka JavaScript lain. Bacon.js adalah perpustakaan mandiri, jadi ia tidak bergantung kepada perpustakaan atau kerangka lain. Walau bagaimanapun, ia boleh digunakan bersempena dengan perpustakaan atau rangka kerja lain untuk membina aplikasi yang lebih kompleks.
Terdapat banyak sumber yang tersedia dalam talian untuk mempelajari pengaturcaraan reaktif berfungsi (FRP) dan bacon.js. Anda boleh bermula dengan dokumentasi rasmi Bacon.js, yang menyediakan panduan yang komprehensif untuk keupayaan dan API perpustakaan. Terdapat juga banyak tutorial, jawatan blog, dan kursus dalam talian yang meliputi FRP dan bacon.js dengan lebih terperinci.
Atas ialah kandungan terperinci Membina permainan pacman dengan bacon.js. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!