Tutorial ini menunjukkan cara menggunakan Python dan perpustakaan Arcade untuk membuat game platformer 2D. Anda akan belajar bekerja dengan Sprite dan Tiled Map Editor untuk membuat game Anda sendiri. Anda dapat menambahkan koin, landai, platform bergerak, musuh, dan lainnya Show
Di akhir setiap bab tutorial ini terdapat tautan ke kode sumber lengkap. Tutorial dibagi menjadi beberapa bagian ini
Saat ini ada beberapa contoh lagi yang berkembang di luar tutorial. Anda dapat melihat kode sumber untuk contoh tersebut serta setiap bab dalam tutorial di Arcade Github di https. //github. com/pythonarcade/arcade/tree/development/arcade/examples/platform_tutorial Tutorial ini juga diperluas menjadi game berfitur lengkap yang dikembangkan oleh komunitas Arcade. Anda dapat melihat proyek itu di Github di https. //github. com/pythonarcade/community-platformer Dalam tutorial sebelumnya kami memperkenalkan pengembangan game grafis dengan PyGame, membahas cara mengembangkan game 2D dengan sprite animasi dan interaksi pengguna. Dalam tutorial ini, kita akan melangkah lebih jauh dan membuat platformer 2D, di mana Anda dapat membuat alien berjalan dan melompati ruangan yang penuh dengan kotak. Tutorial PyGame sebelumnya bukanlah prasyarat untuk mencoba yang ini Kami akan fokus pada animasi dan gerakan dasar untuk menciptakan basis yang kokoh dari mana Anda dapat terus membangun seluruh permainan platform, lengkap dengan musuh, power-up, dan berbagai level MulaiBuat repl baru dan pilih "PyGame" dari tarik-turun bahasa Anda akan melihat "Python3 with PyGame" ditampilkan di konsol default dan panel terpisah di Replit IDE tempat Anda dapat melihat dan berinteraksi dengan game yang akan Anda buat Sebelum kita mulai menulis kode, kita membutuhkan beberapa sprite, yang telah kita sediakan di sini. Ekstrak file ZIP ini dan tambahkan file di dalamnya ke repl Anda menggunakan fungsi 0. Anda dapat memilih beberapa file untuk diunggah sekaligus. Panel file repl Anda sekarang akan terlihat seperti iniDalam tutorial ini, kita akan membangun file 1 secara bertahap, menambahkan kode di berbagai bagian file seiring berjalannya waktu. Setiap cuplikan kode akan berisi beberapa kode yang ada untuk memberi Anda gambaran di mana penambahan baru harus ditempatkan di file. Baris _2 akan digunakan untuk mewakili kode yang ada yang telah ditinggalkan untuk singkatnyaMenyiapkan perancahKami akan mulai dengan kode berikut di 1, yang menggambar layar hitam _Di bagian atas file, kami mengimpor 4. Setelah itu, kami mengatur lebar dan tinggi layar dalam piksel, dan warna latar belakang. Nilai terakhir ini adalah RGB tuple, dan akan membuat background kita menjadi hitam. Untuk menggunakan latar putih sebagai gantinya, kami akan menulis 5Kemudian, dalam metode _6, kami memulai PyGame, membuat layar dan jam, dan memulai putaran permainan, yaitu kode ini _Putaran permainan adalah tempat segala sesuatu terjadi. Karena game kita berjalan dalam waktu nyata, kode kita harus terus-menerus mengumpulkan penekanan tombol dan gerakan mouse pengguna, dan terus-menerus menggambar ulang layar sebagai respons terhadap penekanan tombol dan gerakan mouse tersebut, dan peristiwa lain dalam game. Kami mencapai ini dengan while loop yang tak terbatas. PyGame menggunakan baris 7 terakhir dalam loop ini untuk menyesuaikan frekuensi gambar game sejalan dengan berapa lama waktu yang dibutuhkan setiap iterasi loop, agar game tetap berjalan lancarSekarang mari menggambar sesuatu di layar hitam ini. Game kita akan memiliki dua sprite. alien, yang akan menjadi pemain, dan sebuah kotak. Untuk menghindari duplikasi kode, mari buat kelas induk 8 sebelum kita membuat salah satunya. Kelas ini akan mewarisi dari kelas _9, yang memberi kita metode berguna untuk deteksi tabrakan – ini akan menjadi penting nantinya
Karena class ini akan menjadi induk untuk semua objek lain dalam game kita, kita membuatnya cukup sederhana. Ini memiliki tiga metode
Sekarang kita dapat membuat objek _5 dan 6 sebagai kelas anak dari 8
Kami akan menambahkan lebih banyak kode ke pemain nanti, tetapi pertama-tama mari menggambar sprite ini di layar Menggambar spriteMari kembali ke fungsi _6 kita dan buat sprite kita. Kami akan mulai dengan pemain
Maka kita perlu meletakkan kotak di bawah kaki pemain. Karena kami akan menempatkan banyak sprite, kami akan membuat PyGame untuk memasukkannya
Sprite kotak kami memiliki lebar 70 piksel, dan kami perlu menjangkau lebar layar 400 piksel. Kita bisa melakukan ini dalam _9 loop menggunakan Python
Sekarang kita perlu kembali ke loop game dan menambahkan beberapa kode untuk mewujudkannya. Pertama, kita akan membuat PyGame menempatkan acara baru di antrean acara, lalu kita akan memanggil fungsi 3 pemain. Fungsi ini akan menangani peristiwa yang dihasilkan oleh 2
Untuk permainan yang lebih kompleks, kami ingin mengulang beberapa sprite dan memanggil metode 3 masing-masing, tetapi untuk saat ini hanya melakukan ini dengan pemain sudah cukup. Kotak kami tidak akan memiliki perilaku dinamis, jadi tidak perlu memanggil metode 3 merekaBerbeda dengan _3, kita membutuhkan semua sprite kita untuk menggambar dirinya sendiri. Setelah menggambar latar belakang, kami akan menambahkan panggilan ke metode menggambar pemain. Untuk menggambar kotak, kita dapat menghubungi PyGame di grup 7 kita
Putaran permainan kami sekarang disiapkan untuk memperbarui dan menggambar setiap sprite dalam permainan di setiap siklus putaran permainan. Jika Anda menjalankan permainan sekarang, Anda akan melihat pemain dan garis kotak di layar Selanjutnya, kita akan menambahkan beberapa interaksi pengguna Membuat Pemain BerjalanMari kembali ke objek _5 dan membuatnya mobile. Kami akan memindahkan pemain menggunakan _9, yang memindahkan persegi panjang tertentu dengan vektor tertentu. Ini akan dibungkus dengan metode _0, untuk menyederhanakan kode kita. Buat metode ini sekarang
Sekarang kita memiliki cara untuk memindahkan pemain, saatnya menambahkan metode 3 sehingga gerakan ini dapat dipicu oleh penekanan tombol. Tambahkan metode _3 kosong sekarang _0PyGame menyediakan beberapa cara berbeda untuk memeriksa status keyboard. Secara default, antrian kejadiannya mengumpulkan 3 dan 4 kejadian saat tombol tertentu ditekan dan dilepaskan. Menggunakan peristiwa _3 untuk menggerakkan pemain tampaknya merupakan hal yang logis untuk dilakukan, tetapi karena peristiwa tersebut hanya dipicu dalam loop pembaruan yang sama saat tombol ditekan pertama kali, ini akan memaksa kita untuk mengetuk tombol panah dengan cepat untuk terus bergerak dalam Kami membutuhkan cara untuk memindahkan pemain setiap kali tombol panah ditekan, tidak hanya setelah ditekan. Jadi alih-alih mengandalkan acara, kami akan menanyakan status saat ini dari semua tombol keyboard dengan 6 _1Metode ini mengembalikan tupel 0 dan 1 yang menunjukkan status penekanan setiap tombol pada keyboard. Dengan demikian, kami dapat mendeteksi apakah tombol panah kiri atau kanan saat ini ditekan dengan mengindeks tuple dengan konstanta keyboard PyGame, seperti itu _2Jalankan permainan. Anda sekarang dapat menggerakkan pemain ke kiri dan ke kanan, meskipun sangat lambat. Mari kita percepat dan kurangi ketergantungan kode kita pada angka ajaib pada saat yang sama dengan memberi pemain variabel 7 _3Saat ini pemain meluncur dari satu sisi ke sisi lain, tetapi kami telah mengupload gambar untuk animasi siklus berjalan, jadi mari terapkan itu sekarang. Pertama, kami akan menambahkan beberapa kode pemuatan gambar ke metode 0 pemain kami _4Dalam kode ini, pertama-tama kita menetapkan gambar alien awal kita sebagai 9. Ini akan memungkinkan kita menggunakannya untuk pemain saat dia berdiri diam. Kami kemudian memuat gambar berjalan kami ke dalam daftar yang disebut 0, menggunakan Python untuk mendapatkan format nama file yang benar ( 1 -> 2). Kami kemudian membuat 3, yang akan merekam bingkai mana dari siklus berjalan yang dimainkan pemain, dan 4 yang akan membantu kami membalikkan gambar berjalan yang menghadap ke kanan saat pemain berjalan ke kiriSekarang mari kita terapkan animasi yang sebenarnya. Buat metode baru bernama 5 _5Di sini kami menyetel gambar pemain saat ini ke bingkai siklus berjalan yang sedang kami jalani. Jika pemain menghadap ke kiri, kita gunakan 6 untuk membalik sprite secara horizontal (dua argumen terakhir masing-masing untuk flip horizontal dan vertikal). Kemudian kami menganimasikan pemain dengan menambah 7, kecuali animasi berada dalam bingkai kedua dari belakang, dalam hal ini kami kembali ke awal animasiMari tambahkan ini ke metode _3 kita sekarang _6Jika kita bergerak ke kiri atau kanan, kita mengatur 4 dengan tepat dan memanggil 0. Jika tidak, kami menyetel gambar pemain ke 1Jalankan game sekarang untuk melihat gerakan siklus berjalan pemain. Setelah itu, saatnya membuatnya melompat Membuat Pemain MelompatAgar pemain kita bisa melompat, kita perlu menerapkan empat hal
Memicu lompatanUntuk sekadar membuat pemain naik, kita bisa menambahkan 2 lagi, seperti itu _7Jika Anda mencoba permainan sekarang, Anda akan melihat beberapa masalah dengan pendekatan ini. Selain kekurangan gravitasi, kita hanya bisa melompat lurus ke atas, dan harus melepaskan tombol panah kiri dan kanan sebelum melakukannya. Sebagian besar gameplay di platformer bergantung pada kemampuan pemain untuk melompat ke kiri atau kanan, jadi ini tidak akan berhasil. Untuk memperbaikinya, kami akan mengubah 2 terakhir kami menjadi pernyataan 4 yang terpisah _8Kita juga mungkin ingin bisa melompat dengan kecepatan yang berbeda dengan kecepatan berjalan kita, jadi mari kita definisikan variabel lain dan gunakan itu _9Itu lebih baik, tapi sekarang kita benar-benar membutuhkan gravitasi Menambahkan gravitasiHingga saat ini, kami hanya memiliki satu operasi yang memanipulasi kecepatan horizontal atau vertikal kami per putaran pembaruan. Dengan penambahan gravitasi, ini akan berubah, jadi kita perlu merestrukturisasi kode kita untuk menghitung pergerakan horizontal dan vertikal bersih kita sebelum memanggil 0. Mari ubah fungsi 3 seperti itu 0Kami telah menambahkan dua variabel, _7 dan 8, untuk mewakili kecepatan horizontal dan kecepatan vertikal kami. Alih-alih memanggil _0 ketika setiap tombol ditekan, kami bekerja dengan variabel-variabel ini di seluruh metode 3 dan kemudian meneruskan nilai akhirnya menjadi satu panggilan 0 di akhirTapi tunggu. Masuk akal jika kecepatan horizontal disetel ke 0 pada awal setiap loop pembaruan, karena langsung dikontrol oleh penekanan tombol pemain. Saat panah kiri ditahan, pemain bergerak ke kiri dengan kecepatan 4 piksel per putaran; . Kecepatan vertikal akan kurang dapat dikendalikan – sambil menekan panah atas akan memulai lompatan, melepaskannya tidak akan menghentikan pemain di udara. Oleh karena itu, kecepatan vertikal harus bertahan di antara loop Kita dapat melakukannya dengan memindahkan definisi 8 ke dalam 0 dan menjadikannya sebagai variabel instan 1Sekarang kita bisa menerapkan gravitasi. Kami akan melakukan ini dengan menambahkan konstanta kecil ke kecepatan vertikal pemain ( 8) hingga mencapai kecepatan terminal 2Mulai permainan sekarang, dan pemain akan jatuh lurus ke bawah, menembus tanah dan keluar dari layar. Gravitasi berfungsi, tapi kami butuh tempat untuk mendaratkan pemain Menambahkan deteksi tabrakanDeteksi tabrakan adalah elemen kunci dari sebagian besar game grafis. Di PyGame, sebagian besar pendeteksian tabrakan melibatkan pemeriksaan apakah persegi panjang berpotongan satu sama lain. Untungnya, PyGame menyediakan sejumlah built-in yang berguna untuk melakukan hal ini, jadi kita tidak perlu memikirkan terlalu banyak tentang cara kerja tabrakan internal. Mari tambahkan beberapa deteksi tabrakan sekarang, di dekat bagian atas metode 3 kita. Kami akan membuat variabel yang disebut _06 dan mengaturnya ke hasil 07 3Metode PyGame ini membutuhkan dua argumen. satu sprite dan sekelompok sprite. Ini mengembalikan apakah sprite diberikan sebagai argumen pertama, i. e. pemain, bertabrakan dengan salah satu sprite dalam grup yang diberikan sebagai argumen kedua, i. e. kotak-kotak. Jadi kita akan tahu bahwa pemain berada di kotak saat kembali 08Kita dapat meneruskan grup _7 ke dalam metode 3 pemain dengan membuat beberapa perubahan kode 4Sekarang kita dapat mengetahui apakah pemain berada di tanah, kita dapat mencegah melompat di udara dengan menambahkan kondisi pada kode lompat kita 5Untuk menghentikan pemain agar tidak jatuh ke tanah, kami akan menambahkan kode berikut ke implementasi gravitasi kami 6Menambahkan animasi melompatTerakhir, kami akan menggunakan gambar alien terakhir kami ( 11) untuk memberi pemain kami animasi melompat. Pertama buat _12 di 0 7Kemudian buat metode 5 berikut 8Animasi lompat kami hanya memiliki satu bingkai, jadi kodenya jauh lebih sederhana daripada yang kami gunakan untuk animasi berjalan kami. Untuk memicu metode ini saat pemain berada di udara, ubah implementasi gravitasi seperti itu _9Jalankan game, dan Anda harus bisa berlari dan melompat. Berhati-hatilah agar tidak jatuh dari tepi Menyempurnakan GamePada titik ini, kami memiliki permainan kami bekerja pada tingkat dasar, tetapi itu bisa menggunakan beberapa perbaikan. Pertama, lompatannya cukup tidak responsif terhadap masukan pengguna. menekan panah atas untuk waktu yang lama menghasilkan lompatan ukuran yang sama. Kedua, deteksi tabrakan kami hanya akan mencegah pemain jatuh dari lantai, tidak berjalan menembus dinding atau melompati langit-langit Kami akan mengulangi kode kami untuk memperbaiki kedua kekurangan ini Membuat variabel lompatanAlangkah baiknya jika pemain dapat mengontrol ketinggian lompatan mereka dengan menahan tombol lompat untuk jangka waktu yang berbeda. Ini cukup sederhana untuk diterapkan – kita hanya perlu cara untuk mengurangi kecepatan lompatan jika pemain melepaskan tombol lompat saat pemain masih bergerak ke atas. Tambahkan kode berikut ke metode 0 pemain 0Di sini kami telah menambahkan variabel instan _16 yang akan melacak status keyboard di loop pembaruan sebelumnya, dan variabel 17, yang akan menjadi lompatan terkecil yang akan kami izinkan untuk dilakukan pemain, hanya dengan mengetuk tombol lompatSekarang mari tambahkan variabel melompat ke metode 3, antara kode yang menangani tombol panah atas dan kode yang menangani gravitasi 1Pernyataan _4 yang baru saja kita tambahkan akan dievaluasi menjadi 08 jika tombol panah atas ditekan pada loop sebelumnya tetapi tidak lagi ditekan, i. e. itu telah dirilis. Saat itu terjadi, kami menghentikan lompatan pemain dengan mengurangi kecepatannya menjadi 17. Kami kemudian mengatur _22 ke status keyboard saat ini sebagai persiapan untuk loop berikutnyaCoba permainan sekarang, dan Anda akan melihat ketinggian lompatan yang berbeda saat menekan tombol panah ke atas dengan ringan dibandingkan saat Anda menahannya. Bermain-main dengan nilai _17 dan lihat apa bedanyaMenyempurnakan deteksi tabrakanSeperti disebutkan di atas, satu-satunya deteksi tabrakan yang kami terapkan berlaku untuk tanah di bawah kaki pemain, sehingga dia dapat berjalan menembus dinding dan melompat menembus langit-langit. Lihat ini sendiri dengan menambahkan beberapa kotak di atas dan di samping pemain dalam metode 6 2Masalah lain yang mungkin telah Anda perhatikan adalah bahwa pemain tenggelam ke dalam tanah setelah beberapa lompatan – ini diakibatkan oleh ketidaktepatan pendeteksian tabrakan kami Kami akan memperbaiki masalah ini dengan membuat perubahan halus pada cara kami menangani tabrakan dengan kotak. Daripada memutuskan bahwa kita berada di tanah saat sprite pemain bertabrakan dengan kotak, kita akan memeriksa apakah pemain berada 1 piksel di atas tabrakan dengan kotak. Kami kemudian akan menerapkan prinsip yang sama untuk kiri, kanan dan atas, menghentikan pemain tepat sebelum tabrakan Pertama, mari beri pemain metode 25 untuk melakukan pemeriksaan ini 3Di sini, kami memindahkan pemain dengan jumlah tertentu, memeriksa tabrakan, lalu memindahkan pemain kembali. Gerakan bolak-balik ini terjadi sebelum pemain ditarik ke layar, sehingga pengguna tidak akan melihat apapun Mari ubah centang 06 kita untuk menggunakan metode ini 4Jalankan game sekarang, dan Anda mungkin dapat melihat sedikit perbedaan dalam cara pemain berdiri di tanah dari sebelumnya Ini belum menyelesaikan masalah tabrakan horizontal dan ke atas kita. Untuk itu, kita harus menerapkan metode 25 baru kita langsung ke metode 0 pemain. Hal pertama yang perlu kita lakukan adalah menyiapkan parameter 29 dan 30 untuk pemrosesan tambahan 5Kemudian kita akan memeriksa tabrakan, jadi kita harus mulai meneruskan 7 ke 0. Kami akan melakukan ini untuk _29 dan 30 secara terpisah, dimulai dengan 30. Kami akan memeriksa tabrakan setelah memindahkan 36 piksel secara vertikal, mengurangi 36 hingga kami tidak lagi bertabrakan dengan kotak 6Tapi tunggu. Kode ini hanya akan berfungsi sebagaimana mestinya jika kita bergerak ke bawah dan 36 positif. Jika _36 negatif, ini hanya akan membawa kita lebih jauh ke dalam tabrakan, bukan menjauhinya. Untuk memperbaikinya, kita harus mengimpor 40 di bagian atas file kita, sehingga kita dapat menggunakan 41 7 _41 mengambil bilangan bulat dan mengembalikan 1 jika positif, -1 jika negatif, dan 0 jika 0. Inilah fungsi yang kami butuhkan 8Sekarang lakukan hal yang sama untuk _43. Karena kita sudah mengetahui 36 yang sesuai untuk pergerakan kita, kita akan memasukkannya ke dalam pemeriksaan tabrakan _9Jalankan permainan. Pemain sekarang harus berhenti ketika dia menabrak dinding atau melompat ke langit-langit Kemana Selanjutnya?Jika Anda ingin terus mengerjakan game ini, Anda dapat menemukan sejumlah besar aset seni yang cocok di sini. Coba terapkan beberapa fitur ini Bisakah Anda membuat platformer dengan Python?Tutorial ini menunjukkan cara menggunakan Python dan pustaka Arcade untuk membuat game platformer 2D . Anda akan belajar bekerja dengan Sprite dan Tiled Map Editor untuk membuat game Anda sendiri. Anda dapat menambahkan koin, landai, platform bergerak, musuh, dan lainnya.
Bagaimana cara membuat game 2D dengan Python?Instal perpustakaan arcade Python. Buat struktur permainan 2D dasar. . Mengunduh dan Memulai Ubin Membuat Tileset Mendefinisikan Tileset Mendefinisikan Layer Peta Merancang Tingkat Membangun Tingkat Mendefinisikan Properti Kustom Membaca Level Game Bagaimana cara membuat kode game platformer?Tutorial Game Platformer . Langkah 1. Buat Sprite Anda. Dalam platformer, sprite digunakan untuk membuat karakter, tanah, dan platform. . Langkah 2. Buat Skrip Sprite Sederhana. Gravitasi adalah elemen penting untuk game platform apa pun. . Langkah 3. Buat Karakter Anda Melompat. . Langkah 4. Buat Latar Belakang. . Langkah 5. Uji Permainan Anda Apakah Python bagus untuk game 2D?Python untuk pengembangan game menyediakan dukungan untuk grafik 2D bersama dengan grafik 3D , yang menjadikannya salah satu bahasa terpopuler dalam hal . Ini memiliki banyak perpustakaan dan kerangka kerja yang tersedia yang membuat pengembangan game menjadi mudah. |