Pelatihan studio pembuat game. GameMaker - Berbagai pelajaran

Studio pembuat game adalah mesin desain lintas platform yang bagus untuk membuat game 2D. Mesinnya memiliki antarmuka yang sangat sederhana dan mudah dimengerti, tetapi jika Anda mengalami kesulitan dalam menguasainya, ini akan membantu Anda sejumlah besar dokumentasi dalam bahasa Rusia, pelajaran video dan forum tentang cara bekerja dan membuat game di mesin ini.

Editor Game maker Studio memungkinkan untuk membuat game tidak hanya game 2D, tetapi juga menggunakan grafik 3D. Perlu dicatat bahwa kemampuan membuat game 3D tidak akan menyenangkan Anda dengan grafis modern yang keren atau optimasi tingkat tinggi, jadi mesin ini tetap harus digunakan sebagai platform untuk membuat game 2D berkualitas tinggi.

Mesin ini memungkinkan Anda membuat game 2D menggunakan sprite Anda sendiri (objek grafis di dalamnya grafik komputer), suara dan animasi, yang juga dapat dibuat dan diedit di studio pembuat Game.

Keuntungan integral dari editor studio pembuat Game adalah lintas platform - ini adalah kemampuan untuk membuat game Anda sendiri untuk berbagai platform untuk PC (Windows, Mac OS, Ubuntu), seluler (Android, Amazon Fire, iOS, Windows 10 Mobile) , Web (HTML5) dan Konsol permainan (Xbox satu, Playstation 4).

Anda pasti akan memperhatikan penyimpanan sprite, suara, peta, animasi, dll. Hal ini memungkinkan pembuatan game dengan cepat dan mudah tanpa terganggu dengan pembuatan bagian individual, seperti tampilan karakter atau animasinya.

Untuk pemula

Studio pembuat game cocok untuk orang-orang yang ambisius ide-ide menarik untuk membuat prototipe permainan. Sekarang masalah besar dengan ide bagus untuk membuat game adalah implementasinya, karena hal ini memerlukan pengetahuan bahasa pemrograman. Mesin ini memungkinkan untuk membuat game tanpa menggunakan pemrograman atau menulis skrip.

Ini sangat cocok untuk pengujian pertama pembuatan mekanisme permainan yang direncanakan, karena hal utama yang harus dimulai adalah memahami apakah gameplay itu sendiri akan menarik, dan hanya setelah pengujian barulah dimungkinkan untuk memulai pembuatan dan peningkatan mendetail. dari bagian grafis permainan. Studio pembuat game cocok untuk tujuan tersebut; memungkinkan implementasi tugas semacam ini dengan cepat dan mudah.

Drag and Drop (DnD™) adalah lingkungan pengembangan grafis yang ideal untuk pemula atau mereka yang lebih berorientasi visual atau artistik. Dengan DnD dimungkinkan untuk membuat game tanpa menulis skrip, hanya menggunakan antarmuka program.

Selain itu, bagi pemula yang bekerja dengan studio pembuat Game, antarmuka Russified, yang dapat ditemukan di forum mesin ini, akan membantu. Yang resmi juga berisi sejumlah besar dokumentasi dan instruksi untuk bekerja dengan mesin.

Untuk para profesional

Namun tentu saja mesin studio pembuat Game tidak akan menarik bagi pengembang Game profesional. Studio pembuat game memiliki bahasa pemrograman sendiri GML, yang ditulis dalam Delphi dan memiliki sintaks Java Script dan Pascal. Saat membuat game menggunakan GML, banyak bahasa pemrograman yang terbuka lebih banyak kemungkinan daripada melalui editor grafis program.

Ikhtisar antarmuka

Versi terbaru dari Studio pembuat game No. 1 adalah 8.1.140, hari ini tidak lagi didukung, jadi dirilis versi baru Studio pembuat game 2.

Game maker studio 2 tersedia secara gratis di situs resmi mesinnya. Versi gratisnya dapat diunduh dari tautan https://www.yoyogames.com/get, ini dirancang untuk penggunaan gratis dan dengan jumlah alat terbatas, tetapi ini tidak akan menghalangi Anda untuk membuat proyek pertama Anda. Untuk diunduh versi gratis Anda harus mendaftar di situs tersebut.

Juga aktif forum resmi Anda dapat mengunduh crack untuk mesinnya.

Setelah Anda mengunduh dan menginstal Game maker studio, luncurkan dan di jendela masukkan data yang Anda daftarkan di situs web resmi saat mengunduh. Setelah memasukkan data, antarmuka mesin terbuka.

Karena kami menggunakan program versi gratis, kategori “Belajar” tidak akan tersedia bagi kami.

Untuk mulai mengembangkan game, klik tombol "Buat" dan di jendela berikutnya "Seret dan Lepas", setelah itu sebuah jendela akan terbuka di mana Anda perlu memberi nama untuk proyek tersebut dan menyimpannya di a tempat yang nyaman bagi Anda.

Setelah ruang kerja terbuka, Anda dapat melihat tab di sisi kanan jendela, tempat bagian permainan kita akan diurutkan.

Untuk mulai bekerja dan membuat objek, kita perlu mengklik kanan pada ruang kosong dan memilih “Resources”. Di jendela yang muncul, pilih dari mana kita akan mulai mengembangkannya.

Saat membuat sprite, menu pembuatan, karakter animasi permainan kita akan terbuka untuk kita. Di sini Anda dapat menggambar karakter sepenuhnya dari awal, piksel demi piksel, atau mengimpor karakter yang sudah jadi. Juga animasikan, buat animasi frame-by-frame dari tindakan karakter.

Untuk membuat peta, kita perlu memilih “Sumber Daya”, dan kemudian di jendela pop-up “Buat ruangan”. Editor ruangan menyediakan kemampuan untuk mengatur ukuran, latar belakang, mengatur elemen interaksi, menempatkan karakter, menggambar jalur, dll. Di ruang editor Anda juga dapat mengimpor latar belakang yang sudah jadi atau membuatnya sendiri menggunakan editor ini.

Pembuatan acara dapat dilakukan tanpa menggunakan pemrograman atau scripting, semuanya dilakukan menggunakan menu dan jendela yang cukup intuitif. Anda dapat memikirkan dan membuat skenario tindakan yang cukup kompleks untuk suatu objek menggunakan editor visual Studio pembuat game.

Dengan menggunakan parameter, Anda dapat memilih platform tempat game tersebut dibuat dan menyempurnakan game tersebut, seperti ukuran jendela untuk memainkan game, versi, pintasan, layar pengaktifan, dll.

Perlu diperhatikan bagian program di mana kita diberi kesempatan untuk bekerja dengan kode dalam GML. Saya sangat senang dengan kemudahan dalam menjalankan fungsi perintah sederhana. Oleh karena itu, jika Anda seorang pembuat Game pemula dan siap mencurahkan sebagian besar waktu Anda untuk hal ini, maka Anda hanya perlu mulai mempelajari bahasa GML.

Memasang kerupuk

Untuk pemula, akan lebih baik jika menginstal antarmuka berbahasa Rusia agar lebih mudah dinavigasi. Untuk melakukan ini, Anda perlu mengunduh file crack, tautannya ada di atas.

Setelah mengunduh file bahasa Rusia, salin dan tempel ke direktori dengan Platform di folder “Bahasa”, yang terletak di jalur berikut C:\Program Files\GameMaker Studio 2\Languages
Buka file yang disisipkan di Notepad, untuk melakukan ini, klik kanan padanya dan pilih "Edit".

Notepad akan terbuka dengan konfigurasi file ini. Kita perlu memasukkan konfigurasi berikut di baris ke-7.

LanguageCode,ru,ru,kode bahasa os windows standar yang diwakili oleh paket ini (hanya dapat berupa kode primer yaitu en atau primer-sekunder yaitu ru-RU)

Simpan file dan buat cadangan file "bahasa Inggris" standar; untuk melakukan ini, cukup salin ke folder lain. Hal ini diperlukan agar jika terjadi kesalahan, Anda cukup menyalinnya kembali dan mengembalikan bahasa mesin aslinya. Setelah menyimpan file berbahasa Rusia, hapus file berbahasa Inggris lama (sebelumnya disimpan di folder lain) dan luncurkan Studio pembuat game.

Hasil review studio pembuat Game

Kelebihan:

Minus:

  • Dioptimalkan dengan buruk untuk beberapa platform.
  • Alat untuk membuat game 3D diterapkan dengan buruk.
  • Tidak ada antarmuka berbahasa Rusia bawaan.
  • Ada batasan besar saat menggunakan versi gratis (itulah mengapa gratis).

Kesimpulan

Game Maker Studio adalah mesin permainan lintas platform dengan pembelajaran yang mudah dan dokumentasi terperinci. Program ini menawarkan antarmuka "ikon aksi" Drag-and-Drop (sekarang disebut "DnD") yang intuitif dan mudah digunakan yang memungkinkan Anda mulai membuat game sendiri dengan sangat cepat. Anda dapat mengimpor dan membuat gambar dan suara untuk digunakan dalam game Anda, lalu langsung melihat hasil tindakan Anda hanya dengan satu sentuhan tombol. Perlu dicatat bahwa GameMaker: Studio dirancang untuk game 2D (tetapi ada juga dukungan dasar untuk bekerja dengan 3D). Dengan bantuan D&D, siapa pun yang tidak memiliki pengetahuan pemrograman dapat membuat game sederhana seperti Mario atau Tetris.

Jika Anda menyukai game, Anda pasti bertanya-tanya bagaimana cara pembuatannya. Jika Anda memiliki (atau akan) memiliki keinginan untuk membuat game, tetapi tidak memiliki pengalaman, pada artikel ini saya akan membahas tentang cara terbaik untuk memulai.

Perkenalan

Game Maker sangat sederhana mesin permainan, yang memungkinkan Anda membuat game untuk banyak platform - Windows, Mac OS X, Ubuntu, Android, iOS, Tizen, Windows Phone, Windows 8, PlayStation 3, PS 4, PS Vita, Xbox One, dan HTML 5. Ada adalah dukungan untuk SteamWorks. Jika game Anda berhasil, melakukan porting ke platform lain bukanlah tugas yang sulit.

Kecepatan pengembangan, bahkan dengan pengetahuan sederhana dan motivasi minimal, secara subyektif lebih cepat dibandingkan mesin lain. Instalasi dan konfigurasi untuk pemula sesederhana mungkin dan tidak memerlukan pengetahuan khusus. Kompilasi untuk platform lain tidak memerlukan perubahan kode permainan dan dilakukan dengan satu klik (hampir).

YoYoGames, perusahaan di balik Game Maker, baru-baru ini diakuisisi oleh Playtech, memastikan Game Maker akan terus berkembang. Game Maker 2.0 yang diumumkan kemungkinan akan lebih ramah dan sederhana, dan masuk akal untuk berasumsi bahwa ia akan memiliki kemampuan yang lebih besar. Seperti yang mereka tulis dalam siaran pers, GM 2.0 adalah salah satu alasan pembelian perusahaan tersebut.

Pada artikel ini saya akan berbicara secara singkat tentang Game Maker dan kami akan membuat sketsa sederhana dari proyek masa depan.

Untuk siapa mesin ini dan untuk tujuan apa masih bisa digunakan?
Untuk semua. Targetnya adalah game 2D apa pun. Namun, bagi mereka yang tidak menyukai pemrograman, serta untuk membuat prototipe cepat dan membuat game dengan sedikit usaha bagi siapa saja yang ingin membuat game dan/atau menghasilkan uang dari game tersebut, Game Maker adalah pilihan yang ideal.

Kelebihan Pembuat Game

- entri sederhana;
- sintaksis yang familier bagi semua orang dari Java/C/C#...;
- kemampuan untuk mengkompilasi dengan mudah pada platform yang berbeda;
- komunitas aktif yang telah memecahkan banyak masalah selama bertahun-tahun dan menulis kodenya untuk Anda;
- fungsionalitas standar, sehingga Anda tidak perlu menulis sendiri sejumlah besar kode;
- ekstensibilitas melalui ekstensi;
- Bantuan (F1) sangat sederhana dan nyaman dengan penjelasan dan contoh yang sangat baik.

Kontra Pembuat Game

- berbayar (saat Anda dewasa, untuk menerbitkan game, Anda harus membeli lisensi);
- tidak ada substitusi otomatis variabel pengguna, hanya untuk variabel standar dan skrip;
- biaya lisensi maksimum yang tinggi (namun, tidak semua orang membutuhkan semua modul);
- dukungan teknis (saya menghubungi dukungan teknis dua kali, mereka tidak menjawab saya dalam waktu kurang dari 2 minggu);
- tidak ada kemungkinan referensi otomatis.

Sekarang untuk membuat game. Saya pikir menginstal Game Maker dan membuat proyek kosong tidak menjadi masalah. Secara umum, sebagai permulaan, sebaiknya pikirkan semua fungsinya, menggambar diagram, memikirkan tentang monetisasi, dll., tetapi ini bukan tujuan artikel ini, jadi saya akan menunjukkan cara membuat proyek untuk a pengembang game pemula.

Mari kita bahas secara singkat struktur proyek:

  • Sprite - folder dengan sprite (gambar, animasi);
  • Objek - objek dengan acara yang disiapkannya sendiri (misalnya, pembuatan, menggambar, klik, dll.);
  • Kamar - ruang permainan (layar). Untuk setiap layar Anda perlu membuat ruangan Anda sendiri. Sangat nyaman;
  • Latar Belakang - latar belakang yang dapat digunakan untuk mengisi ruangan. Juga digunakan sebagai set ubin
Sisanya tidak menarik minat kami untuk saat ini.

Apa itu sprite di Game Maker?

Ini adalah gambar/animasi yang digunakan dalam game. Mereka punya topeng sendiri, yang bentuk dan ukurannya bisa diubah. Mask adalah area gambar yang bereaksi terhadap peristiwa tabrakan objek (jika sprite ini ditetapkan ke objek tertentu) dan diklik. Anda dapat mengatur titik gambar (Asal) - misalnya, dari tengah, sudut, atau titik lainnya.

Anda juga dapat mengatur Grup Tekstur untuk sprite. Diperlukan untuk mengoptimalkan rendering (misalnya, tidak perlu menyimpan halaman tekstur dengan gambar di memori yang digunakan pada layar menu saat kita sekarang memiliki layar permainan). Untuk setiap Grup Tekstur, Anda dapat menentukan platform tempat mereka akan beroperasi. Misalnya, Android mungkin memiliki gambar yang kurang detail dibandingkan tablet Windows 8.

Apa yang dimaksud dengan objek di Game Maker?

Ini adalah gambaran dari beberapa entitas yang memiliki metode (fungsi) sendiri. Setiap objek menggambar dirinya sendiri (kecuali ditentukan lain), bereaksi terhadap peristiwa standar - penekanan tombol, klik pada sprite, dll... Dengan analogi dengan OOP, ini adalah sebuah kelas.

Apa yang dimaksud dengan instance di Game Maker?

Jika suatu objek hanyalah deskripsi suatu entitas, maka suatu instance adalah turunan dari suatu objek, implementasinya dalam game itu sendiri. Dengan membuat sebuah instance, Anda memberinya kehidupan dan sekarang semua peristiwa yang deskripsinya ada di objek akan mulai bereaksi.
Dengan analogi dengan OOP, ini adalah sebuah objek.

Hal pertama yang perlu Anda lakukan adalah membuat ruangan baru (di panel kiri, klik kanan pada Ruangan - Buat Ruangan). Sebut saja rm_game. Mari kita atur ukuran jendela di tab Pengaturan - Lebar - 800, Tinggi - 480, Kecepatan - 60. Yaitu. Permainan kami akan berlangsung di jendela 800x480, fps tidak akan melebihi dan cenderung 60 frame. Simpan dan tutup.

Mari tambahkan beberapa sprite. Klik kanan pada folder Sprite -> Buat Sprite. Sebut saja spr_unit_shooter, unggah gambar (tersedia di Github di akhir artikel), misalnya ukuran 54x54 dan letakkan di tengah (tombol Tengah). Tombol "OK" dan data disimpan.

Sekarang kita membutuhkan unit pertama. Biarkan itu menjadi tanaman tembak klasik. Namun sebelum itu, kami ingin membuat objek yang akan menjadi induk dari semua unit pengguna (ya, kurang lebih sama dengan pewarisan di OOP). Dengan cara ini Anda dapat menghindari pengulangan logika untuk semua unit, dan juga, seperti yang akan Anda lihat di bawah, Anda dapat mengakses semua jenis "anak" dari objek yang dibuat selama permainan.

Menggunakan prinsip serupa dengan sprite dan ruangan, kita membuat objek kosong. Sebut saja o_unit_parent dan jangan lakukan apa pun dengannya untuk saat ini. Sekarang mari kita buat o_unit_shooter dan pilih o_unit_parent di kolom Parent. Mari kita beri sprite - spr_unit_shooter. Untuk melakukan ini, gunakan tombol yang terletak di bawah nama.

Beri nama sprite, objek, ruangan, dll. bisa sesuka hati, namun agar tidak bingung nantinya, lebih baik segera memanggil sesuatu dengan nama aslinya, misalnya sprite dengan awalan spr_, objek obj_ atau o_, skrip - scr_, dll.

Sekarang, setiap kali Anda membuat objek o_unit_shooter di sebuah ruangan, maka secara otomatis akan menggambar sprite yang Anda pilih (kecuali Anda menimpanya dengan kode, tentunya).

Sprite juga dapat diatur secara terprogram, tetapi dalam kasus ini sprite tidak akan ditampilkan dalam pratinjau Struktur Proyek di sebelah kiri. Sekarang mari tambahkan event yang akan dipicu ketika instance objek dibuat. Dalam acara ini Anda perlu mengatur inisialisasi awal variabel, jika ada. Klik Tambahkan Acara. Seperti yang Anda lihat, Game Maker memungkinkan setiap objek menangkap sejumlah besar peristiwa. Kami tertarik pada - Buat.

Seperti yang Anda lihat di sebelah kanan, dalam wadah Tindakan di beberapa tab terdapat sejumlah besar elemen drag"n"drop, yang secara teori dapat digunakan untuk membuat game yang sepenuhnya lengkap tanpa menulis satu pun baris kode. Tapi ini untuk orang mesum dan mungkin di Game Maker 2.0 fungsi yang tidak perlu ini akhirnya akan dihapus.

Mari buka tab Kontrol dan seret atau klik kanan pada ikon Jalankan kode. Editor teks akan terbuka di mana Anda dapat menempatkan logika permainan.

Seperti yang Anda ingat, unit harus menembak dalam jangka waktu tertentu. Hal ini dapat dilakukan dengan sangat mudah. Pada event Create kita akan menulis kode ini: alarm = room_speed * 2;
Artinya kita meluncurkan alarm nomor 0, yang akan terpicu setelah room_speed*2 langkah (frame). kecepatan_kamar kami adalah 60, yang kira-kira sama dengan satu detik. Jadi alarm akan berbunyi setelah 120 frame (2 detik). alarm adalah sebuah fungsi, atau lebih tepatnya sebuah peristiwa objek, yang dipicu segera setelah penghitung langkah mencapai 0. Seperti semua peristiwa lainnya, alarm ditambahkan melalui Tambah peristiwa. Sekarang kita perlu menulis logika yang akan kita tambahkan ke alarm, tapi pertama-tama mari kita buat apa yang akan digunakan oleh tanaman kita.

Buat sprite spr_bullet baru, ukuran 16x16 dan letakkan di tengah. Sekarang kita membuat objek o_bullet baru dan memberinya sprite yang baru dibuat. Pada event Create, tambahkan kode hspeed = 7; sama persis dengan objek sebelumnya. Dengan garis ini kita tentukan bahwa benda akan bergerak dengan kecepatan mendatar sebesar 7 (hspeed = kecepatan mendatar, kalau ada yang belum paham). Ini adalah properti bawaan dari setiap objek. Dengan memberikan nilai bukan nol padanya, objek ini akan mulai bergerak jumlah yang ditentukan piksel (dalam kasus kami 7 ke kanan) setiap langkah (Langkah). Jika kita mengatur hspeed = -7; - objek akan bergerak -7 piksel setiap langkah, mis. akan bergerak dari kanan ke kiri.

Itu saja, mari kembali ke objek o_unit_shooter dan buat event baru - Alarm 0. Kode yang kita tulis di event ini akan dipicu ketika counter yang kita buat di event Create diluncurkan. Dalam acara Alarm 0 kita akan membuat "peluru" (dalam bahasa aslinya - kacang polong) yang ditembakkan oleh tanaman. Mari tambahkan kode ini:

/// tembak var b = instance_create(x + sprite_width/2, y, o_bullet); b.kedalaman = kedalaman + 1; alarm = kecepatan_ruangan * 2;
Mari kita analisis kode ini.

/// shoot hanyalah komentar yang akan ditampilkan ketika akan menuju ke acara tersebut. Secara default, “Jalankan sepotong kode” ditampilkan, yang tidak terlalu informatif. Jadi disarankan untuk menulis komentar seperti itu agar tidak membuang waktu untuk pergi ke editor kode.
var b = instance_create(x + sprite_width/2, y, o_bullet);
var b - kami mendeklarasikan variabel lokal yang akan tersedia secara eksklusif di acara ini. Setelah acara selesai, memori akan dibebaskan dan Anda tidak akan dapat mengakses variabel ini.
instance_create(x + sprite_width/2, y, o_bullet); - beginilah cara kita membuat instance objek baru dan menempatkannya pada koordinat x: x + sprite_width/2, y - y. DI DALAM pada kasus ini x dan y adalah koordinat objek induk - o_unit_shooter. o_bullet adalah objek yang kita buat.
b.kedalaman = kedalaman + 1; - baris ini berarti instance o_bullet yang baru dibuat akan ditempatkan 1 lapisan lebih rendah dari o_unit_shooter.
Baris terakhir berarti kita menyalakan alarm lagi - tanaman harus terus menembak.

Seperti yang Anda ingat, dalam bahasa aslinya Anda hanya dapat menempatkan vegetasi di sel tertentu. Untuk membuatnya jelas secara visual dalam batasan apa tanaman dapat ditempatkan, mari buat latar belakang dan penuhi ruangan kita dengan itu. Klik kanan pada Backgrounds - Create Background - Load Background, pilih gambar yang diinginkan, misalkan 64x64 pixel, sebut saja bg_grass. Pergi ke kamar kami (rm_game), tab Latar Belakang, pilih latar belakang yang dibuat beberapa detik yang lalu. Silakan centang kotak jika tidak muncul seperti pada gambar.

Sekarang kita memerlukan semacam objek awal yang akan melakukan inisialisasi awal. Kita membuat objek baru dan menamainya, misalnya o_game. Biarkan objek ini bereaksi terhadap klik di lapangan. Untuk melakukan ini, tambahkan acara - Mouse -> Mouse global -> Global kiri dirilis. Peristiwa mouse biasa berarti klik langsung pada suatu objek, tetapi karena o_game tidak memiliki sprite+masknya sendiri, dll. kita membutuhkan pemain untuk dapat mengklik titik mana pun di lapangan permainan; kita perlu menangkap semua peristiwa klik. Itulah tepatnya yang dilakukan oleh Global Mouse. Rilis kiri global berarti bahwa di suatu tempat di dalam jendela permainan, klik mouse atau sentuhan pada layar sentuh dilakukan (peristiwa ini dipicu ketika jari dilepaskan).

Mari tambahkan kode berikut ke acara ini:

Var tBgWidth = background_get_width(bg_grass); var tBgHeight = background_get_height(bg_grass); var iX = mouse_x - mouse_x % tBgLebar + tBgLebar; var iX = mouse_x - mouse_x % tBgLebar + tBgLebar/2; var iY = mouse_y - mouse_y % tBgHeight + tBgHeight/2; if (instance_position(iX, iY, o_unit_parent) != noone)( keluar; ) instance_create(iX, iY, o_unit_shooter);

Anda tidak perlu memberi titik koma setelah operasi; ini tidak mengubah logika kode dan tidak akan menyebabkan kesalahan. Namun jika Anda bisa bertaruh, mengapa tidak melakukannya. Ya, dan lebih familiar.

Dalam empat baris pertama kita mendeklarasikan variabel lokal. background_get_width, background_get_height adalah fungsi bawaan yang mengembalikan lebar dan tinggi latar belakang kita. Seperti yang Anda lihat, kita memerlukan data ini untuk menghitung iX dan iY. iX dan iY akan menjadi koordinat di mana kita akan membuat instance objek o_unit_shooter. mouse_x, mouse_y - variabel global yang ada di dalam Game Maker (yaitu variabel yang dapat kita akses dari mana saja) yang menyimpan koordinat kursor mouse (jari) saat ini. Karena kami bekerja di acara rilis kiri Global, mereka menyimpan koordinat terakhir di mana pengguna melepaskan tombol kiri mouse (melepaskan jarinya). Operasi matematika, yang hasilnya ditugaskan ke variabel iX, iY, diperlukan untuk menghitung koordinat di mana instance objek o_unit_shooter akan ditempatkan tepat di tengah sel latar belakang bg_grass. Itu. ingat itu di Plants Vs. Tanaman zombie Anda tidak dapat menempatkannya di mana pun, hanya pada titik tertentu, tetapi Anda dapat mengklik di mana saja dan tanaman akan ditempatkan tepat di tempat yang tepat. Inilah yang dilakukan semua kode di atas.

Memeriksa instance_position (iX, iY, o_unit_parent) != noone berarti kita melihat apakah ada instance (object instance) yang objek induknya o_unit_parent terletak pada koordinat iX, iY. Karena kami sekarang hanya memiliki satu unit yang dapat diwariskan - o_unit_shooter, kami memeriksa apakah ada contoh o_unit_shooter di lapangan, tetapi kami menulis o_unit_parent di tanda centang sehingga kode akan berfungsi bahkan ketika kami menambahkan unit khusus baru. noone (dari “no one”) adalah sejenis analogi null dalam bahasa lain.

Keluar - kode yang menghentikan eksekusi acara. Itu. jika sudah ada unit pada koordinat iX, iY, exit dipicu dan instance o_unit_shooter tidak dibuat, karena kami menghentikan eksekusi semua kode berikutnya. Kita memerlukan ini agar 2 unit pengguna tidak dapat berdiri dalam satu sel.

Nah, saatnya menambah musuh pertama. Mari buat objek baru dan buat lagi objek induk dasar. Sebut saja o_enemy_zombie dan o_enemy_parent, yang akan menjadi induknya. Mari kita buat sprite spr_enemy_zombie, pusatkan dan tetapkan ke o_enemy_zombie.

Karena properti semua musuh adalah bergerak menuju tanaman, kita akan membuat kode ini di o_enemy_parent di event Create:

CHkecepatan = -4; hkecepatan = kecepatan cH; HP = 10; canAttack = benar;
cHspeed adalah variabel pengguna yang nilainya kita tetapkan pada hspeed, yang telah kita lihat. Mengapa tidak menulis hspeed = -4; - kamu akan lihat nanti.

Sebelumnya kami mendeklarasikan variabel pengguna menggunakan konstruk var, namun kami tidak melakukannya di sini. Berapa perbedaan antara cHspeed = -4; dan var cHspeed = -4;?
Sederhana saja - dalam kasus pertama, variabel akan dapat diakses dari titik mana pun dalam kode objek ini dan dapat diakses dari objek lain, tetapi hanya tanpa lupa menyebutkan objek mana yang kita akses. Tidak perlu menyelidiki hal ini sekarang. Kita ingat bahwa variabel ini ada sepanjang umur instance objek sejak dideklarasikan. Dalam kasus var cHspeed = -4; itu hanya akan tersedia selama durasi acara saat itu dibuat.

Sebenarnya, Anda juga dapat mengaksesnya dari objek lain, tetapi jika Anda mengaksesnya dari objek lain pada saat peristiwa pembuatannya telah berakhir, ini akan menyebabkan kesalahan - penunjuk nol yang sudah dikenal, karena sudah kehabisan memori dibongkar.

Jika Anda sendiri tidak menyukai fungsi hspeed atau wspeed, Anda dapat mengimplementasikannya sendiri dengan mengubah nilai x atau y di event Step. Fitur-fitur ini melakukannya untuk Anda.

HP adalah variabel lain di mana kita akan menyimpan jumlah hit point musuh. Setiap instance akan “memiliki” variabel ini, tetapi jumlah hit point maksimumnya jenis yang berbeda musuh yang berbeda, mis. Anda perlu mendefinisikan ulang/mengatur ulang nilai ini. Atau Anda dapat memberikan jumlah nyawa yang sama kepada semua musuh, katakanlah, 100, dan memperkenalkan konsep pertahanan, yang menjadi dasar kerusakan yang diterima musuh, tetapi sekarang tidak ada gunanya memperumit masalah, bukan? Jadi kita akan puas hanya dengan satu variabel - HP.

Ingat, gml adalah bahasa yang digunakan di Game Maker dan peka huruf besar-kecil, HP, hP, Hp dan hp akan menjadi variabel yang berbeda.

CanAttack hanyalah sebuah variabel yang kita tetapkan nilai benar. Untuk saat ini, kami hanya akan menulis dan melupakannya.

Karena nilai HP kita akan berbeda untuk setiap musuh, kita perlu mendefinisikan ulang nilai ini. Ini sangat, sangat sederhana. Mari kita pergi ke objek o_enemy_zombie, membuat reaksi pada acara Create dan menulis kode:

Peristiwa_diwarisi(); HP = 20;
Fungsi event_inherited(); dan berurusan dengan warisan. Itu. sekarang o_enemy_zombie akan mengeksekusi kode:

CHkecepatan = -4; hkecepatan = kecepatan cH; HP = 10;
Yang mana fungsi ini “diimpor”, dan kemudian nilainya dieksekusi oleh baris - HP = 20;
Itu. sebenarnya, di akhir acara Create, objek o_enemy_zombie akan memiliki properti berikut:

CHkecepatan = -4; hkecepatan = kecepatan cH; HP = 20;
Jika kita lupa tentang event_inherited(); atau kita lupa menentukan objek induk untuk objek o_enemy_zombie, musuh tidak akan bergerak, dan akan muncul error saat mencoba mengakses variabel cHspeed objek ini.

Hebatnya, jika kita ingin membuat musuh tipe lain, di event Create kita akan menulis hal yang sama, mengubah jumlah HP sesuai jumlah yang dibutuhkan:

Peristiwa_diwarisi(); HP = 100;

Karena zombie mempunyai poin serangan, tanaman juga harus memilikinya. Tambahkan sendiri kode HP = 20; pada event Create pada objek o_unit_parent. dan baris event_inherited(); ke dalam acara Buat objek o_unit_shooter.

Tahukah kamu?

Jika Anda tidak perlu mendefinisikan ulang atau menambahkan apa pun di acara Buat, tambahkan kode event_inherited(); Tidak diperlukan logika lain dalam acara tersebut - Game Maker sendiri yang akan melakukannya untuk Anda. Hal yang sama berlaku untuk acara lainnya, bukan hanya Buat.

Hebat, zombie kita sekarang berjalan, tetapi peluru tidak mengenai dia dan tanaman tidak memperlambatnya. Mari kita selesaikan masalah pertama terlebih dahulu. Ayo buka o_bullet dan buat reaksi baru pada acara tersebut - Tambahkan Acara -> Tabrakan -> o_enemy_zombie. Acara ini akan dipanggil ketika o_bullet dan o_enemy_zombie saling bertabrakan. Tabrakan diperiksa menggunakan topeng yang Anda baca di awal artikel. Mari tambahkan kode:

Dengan(lainnya)( HP -= 5; jika (HP<= 0){ instance_destroy(); } } instance_destroy();
Ini adalah hal yang sangat menarik. other adalah contoh objek yang tumbukannya terjadi pada momen peristiwa ini. Tentu saja karena kode ini jika terjadi tabrakan dengan instance objek o_enemy_zombie, maka di kode lain hanya akan ada instance o_enemy_zombie.

Dengan()() kita mengakses elemen lain ini. Segala sesuatu yang terjadi di dalam () hanya menyangkut contoh objek ini. Jadi, HP -= 5; - Ini adalah pengurangan 5 poin nyawa dari musuh. Jika (HP<= 0){} мы сравниваем количество очков жизни тоже именно у этого объекта. Помните я немного выше говорил про разницу между обычным объявлением переменной и с переменной через var. Вот этот пример должен вам окончательно прояснить ситуацию. Т.к. переменная HP у нас объявлена не через var, то она доступна в любой момент времени. Так что с помощью конструкции with мы можем к ней получить доступ. Альтернативный способ обращения к переменной другого объекта выглядел бы так:

Lainnya.HP -= 5; if(lainnya.HP<= 0){ with(other){ instance_destroy(); } } } instance_destroy();
Namun mengakses variabel dengan cara ini kurang nyaman, terutama jika terdapat lebih banyak logika, namun tetap dapat diterapkan dalam beberapa kasus.

Jangan lupa, jika Anda tidak mendeklarasikan variabel di event Create, dan dalam kode Anda mengaksesnya sebelum dideklarasikan, maka akan muncul kesalahan jika Anda mencoba membaca data apa pun darinya.

Anda tidak perlu memiliki banyak pengetahuan bahasa Inggris untuk memahami bahwa fungsi instance_destroy(); menghapus contoh objek ini (contoh).

Jadi, semua kode ini berarti bahwa ketika terjadi tabrakan, kita mengambil 5 poin kehidupan dari zombie dan jika menjadi 0 atau kurang, maka kita menghancurkannya. Apapun hasilnya, pada akhirnya kita keluarkan peluru kita. Ini sangat sederhana. Secara umum, mungkin akan lebih baik memaksa zombie untuk memantau kesehatannya sendiri, tetapi untuk saat ini kami tidak tertarik dengan hal itu. Tapi itu cerita lain, pertanyaan tentang optimasi.

Tidak benar jika zombie kita hanya bisa menerima damage. Kita perlu menambahkan kemampuan untuk menyebabkan kerusakan. Pertama-tama, mari tambahkan variabel baru ke event Create pada objek o_enemy_parent

IsActive = benar;
Saatnya untuk melihat event Step yang saya bicarakan sebelumnya. Acara ini mengaktifkan setiap frame. Itu mudah. Jika room_speed adalah 60, maka event ini akan dipicu sekitar 60 kali per detik. Mari tambahkan kode ini ke event Step -> Step pada objek o_enemy_zombie.

Jika (!isActive) keluar; var tBgWidth = background_get_width(bg_grass); var leftCellCenterX = x - x % tBgLebar - tBgLebar/2; var frontEnemy = instance_position(leftCellCenterX, y, o_unit_parent); if (frontEnemy != noone)( var frontEnemySprtWidth; dengan(frontEnemy)( frontEnemySprtWidth = sprite_width; ) if (x - sprite_width/2 - frontEnemy.x - frontEnemySprtWidth/2<= 12){ hspeed = 0; if (!canAttack){ exit; } canAttack = false; alarm = room_speed * 1.2; // cantAttack ->BENAR; dengan(Musuh Depan)( HP -= 5; jika (HP<= 0){ instance_destroy(); } } } }else{ hspeed = cHspeed; }

Tidak ada salahnya, hampir semua desainnya sudah familiar bagi Anda.
jika (!isActive) keluar; - jika objek tidak aktif, misalnya beristirahat/mengisi ulang/berayun, event ini tidak akan dijalankan. Dalam dua baris berikutnya kita mendapatkan koordinat pusat sel yang terletak di sebelah kiri tempat pusat instance kita saat ini berada (ingat bahwa x mengembalikan koordinat titik Asal, dan kita mengaturnya dengan tepat di tengah sprite). Selanjutnya kita melihat apakah unit pengguna terletak pada koordinat (leftCellCenterX, y). Jika ada sesuatu di sana, logika berikutnya terjadi, tetapi lebih dari itu dalam satu detik; jika tidak ada apa-apa di sana, kita menetapkan hspeed nilai variabel cHspeed, yang kita ingat, buat di acara Create. Di sinilah hal ini berguna. Arti dibalik ini adalah: jika zombie kita berhenti menyerang dan menghancurkan tanaman, dia harus melanjutkan perjalanannya. Anda tentu saja tidak dapat memasukkan variabel cHspeed, tetapi Anda harus mengingat di mana Anda menyetel kecepatan gerakan, dan ini dilupakan.

Ini jika tidak ada apa pun yang menghalangi para zombie, tapi sekarang kita kembali ke momen ketika kita harus bertarung. Baris pertama ternyata sangat menarik, menarik. Faktanya adalah dengan mendeklarasikan variabel lokal frontEnemySprtWidth, kita memberikan nilai padanya di instance frontEnemy. Mereka yang akrab dengan pemrograman akan mengatakan, tetapi dalam kasus ini kita mengakses variabel frontEnemySprtWidth bukan dari zombie kita, tetapi ke variabel dengan nama yang sama, tetapi dari instance frontEnemy. Bukan begitu, intinya adalah variabel lokal (dideklarasikan melalui var) menjadi terlihat di dalam event ini di mana saja, bahkan dari dalam instance frontEnemy. Jadi, tidak ada kesalahan dalam kode; kita sebenarnya mengakses variabel yang dinyatakan lokal di dalam zombie. Jika Anda tidak memahami poin ini, bereksperimenlah atau baca bantuannya, semuanya dijelaskan dengan sempurna di sana, dan kami melanjutkan.
Kami menetapkan frontEnemySprtWidth panjang (lebar) sprite unit pengguna (tanaman), yang terletak satu sel di sebelah kiri zombie kami. Anda akan berkata, mengapa kita perlu memagari konstruksi yang sulit dipahami ketika kita dapat melakukannya dengan var frontEnemySprtWidth = sprite_get_width(spr_unit_shooter);. Jawabannya sederhana - sekarang kita memiliki satu tanaman dan kita tahu sprite mana yang harus dihubungi, tetapi ketika menambahkan jenis unit baru (bunga matahari, dll.), kita harus membuat konstruksi saklar yang rumit untuk mengetahui jenis objek apa yang ada di dalamnya. depan kita, dan cukuplah masalah ini terselesaikan begitu saja.

Selanjutnya kita cek apakah jarak antara titik paling kanan unit pengguna dengan titik paling kiri zombie kita kurang dari 12 piksel, lalu kita hentikan zombie kita, periksa apakah zombie kita bisa menyerang (sebelumnya kita cek nilai variabel canAttack dibuat di acara Buat objek o_enemy_parent), melanjutkan kode eksekusi di mana kita mengatakan bahwa sekarang tidak mungkin untuk menyerang dan lain kali hal itu dapat dilakukan melalui room_speed * 1.2 frame (setelah 60 * 1.2) - kita melakukan ini di alarm (tambahkan sendiri ke acara yang sesuai (Alarm 0) dari objek o_enemy_parent, di mana tulis kode canAttack = true;). Jika memungkinkan untuk menyerang, kita ambil 5 poin nyawa dari instance tanaman dan periksa apakah masih hidup; jika tidak, kita hancurkan.

Nah, musuh sudah bersiap dengan sempurna - dia bergerak, menyerang dan terus bergerak jika dia telah menghancurkan tanaman, tetapi dia memiliki satu kelemahan - tanaman itu tidak ada. Kami hanya membuat deskripsi musuh kami, sekarang kami perlu menempatkan zombie di lapangan permainan. Kita kembali ke event Create pada objek o_game. Mari tambahkan kodenya
alarm = kecepatan_ruangan; // menghasilkan musuh

Itu. setelah 60 frame Alarm 0 akan terpicu dan zombie akan tercipta, bukan? TIDAK. Kami tidak membuat logika untuk Alarm ini. Dan kode di sini juga sederhana:

Var tBgHeight = background_get_height(bg_grass); var eY = irandom(tinggi_kamar - tinggi_kamar % tBgTinggi); eY = eY - eY % tBgTinggi + tBgTinggi/2; instance_create(room_width + sprite_get_width(spr_enemy_zombie)/2 + 1, eY, o_enemy_zombie); alarm = kecepatan_ruangan * 3;
Semuanya sederhana - kami tidak akan memperumitnya dan cukup membuat instance o_enemy_zombie pada koordinat X setiap 3 detik (60 frame * 3): room_width + sprite_get_width(spr_enemy_zombie)/2 + 1 yaitu tepat satu piksel ke kanan dari batas layar, mis. zombie pada awalnya tidak akan terlihat dan Y adalah sel acak. room_width dan room_height, seperti yang sudah Anda pahami, adalah lebar dan tinggi ruangan kita. Itu. 800 dan 480 masing-masing.

Ini semua bagus, tapi seseorang juga harus membuat sebuah instance dari objek o_game, jika tidak, keseluruhan episode tidak masuk akal. Namun langkah terakhir kita sangat sederhana - masuk ke ruangan rm_game -> Objek -> pilih o_game di menu dan letakkan di mana saja di dalam ruangan. Opsi alternatifnya terlihat seperti ini - tab Pengaturan -> Kode Pembuatan (ini adalah kode yang akan berfungsi saat kita masuk ke ruangan ini). Tambahkan baris instance_create(0,0, o_game);

Koordinat apa pun dimungkinkan. Sekarang kita dapat mengajukan pertanyaan, bagaimana Game Maker menentukan bahwa ia perlu memulai rm_game room atau “bagaimana jika kita memiliki banyak ruangan, Game Maker mana yang akan memulai?” Semuanya sesederhana biasanya - ruangan paling atas dimulai terlebih dahulu (urutannya dapat diubah dengan menyeret mouse). Sekarang kita hanya punya satu, jadi itu akan segera dimulai.

Sekarang kita harus memiliki sesuatu seperti ini:

Ini mengakhiri episode pertama. Selamat, kami telah membuat prototipe gamenya. Hanya ada sedikit yang harus dilakukan - mengubahnya menjadi permainan yang lengkap, itulah yang akan kita lakukan di bagian berikut.

Dalam episode ini, kami memperkenalkan konsep dasar Game Maker, menggunakan fitur sebanyak mungkin. Beberapa poin tidak dikemukakan secara rasional; poin-poin tersebut dapat dan harus diulangi, namun tidak sekaligus. Untuk pemahaman awal tentang apa yang terjadi, menurut saya lebih baik menulis dalam bahasa amatir.

Seperti yang dapat Anda lihat dari pelajaran, dalam beberapa hal, versi Game Maker saat ini tidak ideal, Anda harus mengingat banyak hal, tetapi di Game Maker lebih mudah untuk melakukan yang lainnya. Sedikit ketidaknyamanan tidak sia-sia.

Seperti yang dijanjikan, dalam tutorial ini kita akan melihat event, aksi dan membuat beberapa mini-game.
Pertama acaranya. Ketika sesuatu terjadi pada instance di dalam ruangan, mereka diberi izin untuk menjalankan acara tersebut.

Jika Anda klik kanan pada kolom tengah di properti objek dan pilih Tambahkan acara(tambahkan acara) maka akan muncul jendela berikut:

Membuat (Penciptaan) - acara pembuatan objek. Ini dipicu ketika sebuah benda muncul di dalam ruangan.
Menghancurkan (penghancuran) - peristiwa penghancuran objek. Itu menyala ketika kita menghancurkan suatu objek dengan suatu tindakan.
Alarm (Jam alarm, jargon. Alarm) - acara alarm. Nanti akan dibahas.
Melangkah (Melangkah) adalah peristiwa yang terjadi pada setiap langkah dalam game. Jumlah langkah per detik diatur dalam pengaturan ruangan
Tabrakan (Tabrakan) – peristiwa yang terjadi ketika sprite (atau lebih tepatnya topeng) dari dua instance berpotongan
Papan ketik (papan ketik) - peristiwa yang terjadi sepanjang waktu ketika tombol tertentu ditekan. Ini terjadi untuk semua instance sekaligus, jadi sangat jarang kejadian keyboard yang sama dikirimkan ke objek berbeda. Ada juga acara penekanan dan pelepasan keyboard. Mereka nyaman digunakan jika suatu peristiwa harus terjadi satu kali (misalnya, pengambilan gambar)
Mouse (mouse) – peristiwa yang terjadi ketika Anda menekan/melepaskan/mengarahkan mouse ke suatu instance. Ada juga peristiwa mouse global yang terjadi ketika mouse tidak melayang di atas suatu objek.
Acara lainnya (acara lainnya):
Di luar ruangan (Di luar ruangan) - Peristiwa terjadi ketika instance berada di luar batas ruangan.
Batas perpotongan (Melintasi perbatasan) - Peristiwa terjadi ketika sebuah instance melintasi batas ruangan.
Permainan dimulai (Awal permainan) - suatu peristiwa yang terjadi saat permainan dimulai. Jarang digunakan di mini-game.
Permainan berakhir (Akhir permainan) - Peristiwa terjadi saat permainan berakhir.
Kamar mulai (Mulai dari ruangan) - Peristiwa ini terjadi untuk semua kejadian saat ruangan dimulai.
Ujung ruangan(Ujung ruangan): Peristiwa ini terjadi pada semua kejadian ketika ruangan berakhir.
Animasi berakhir (Akhir animasi) - animasi berisi bingkai, dan ditampilkan satu demi satu. Setelah diperlihatkan bingkai terakhir yang pertama ditampilkan. Pada saat ini peristiwa ini terjadi.
Akhir jalan (Ujung jalan): Peristiwa terjadi ketika instance mencapai akhir jalur. Anda akan membaca lebih banyak tentangnya dalam pelajaran berikut.
Ditetapkan pengguna (Acara Khusus): Mungkin ada 16 acara seperti itu. Itu tidak akan terjadi kecuali Anda memanggilnya sendiri menggunakan fungsi khusus.
Nah, sekarang urutan kejadiannya:
-Mulai acara langkah ( Awal acara langkah)
-Acara alarm ( Acara Pengatur Waktu)
-Papan ketik ( Acara papan ketik)
-Acara tikus ( Acara Tikus)
-Kejadian langkah normal ( Langkah Acara)
-(mengatur semua instance ke posisi baru mereka)
-Peristiwa tabrakan ( Peristiwa Tabrakan)
-Akhir acara langkah ( Acara akhir langkah)
-Menggambar acara ( Acara Menggambar)
Sekarang kita bisa menyuplai event ke objek, tapi kenapa? Agar tindakan dapat dilakukan.
Sekarang mari kita lihat aksi utama gerakan ini:
Pindah Tetap (Gerakan tetap)
Suatu tindakan digunakan untuk memberikan suatu objek arah dan kecepatan tertentu. Arah gerakan dapat ditentukan dengan menekan tombol yang sesuai. Tombol tengah berarti menghentikan objek. Kecepatan gerakan ditunjukkan pada baris yang sesuai. Jika Anda memilih beberapa arah, arah pergerakan objek akan dipilih secara acak dari yang ditandai. Dengan ini, misalnya, monster bisa mulai bergerak ke kiri dan ke kanan.
Kecepatan Horisontal (Kecepatan horisontal)
Dengan tindakan ini, Anda dapat mengubah kecepatan horizontal instance. Perubahan dapat dilakukan secara relatif (jika Anda mencentang kotak Relatif) atau absolut (secara default). Nilai positif memindahkan contoh ke kanan, negatif - ke kiri.
Kecepatan Vertikal (Kecepatan vertikal)
Demikian pula, tindakan ini mengubah kecepatan vertikal instance. Kecepatan positif menggerakkan instance ke bawah, kecepatan negatif menaikkannya
Membalik Horisontal (Perluas secara horizontal)
Tindakan ini membalikkan kecepatan horizontal. Anda dapat menggunakannya, misalnya, ketika sebuah benda harus memantul ke dinding.
Vertikal Terbalik (Perluas secara vertikal)
Demikian pula dengan tindakan ini kecepatan vertikal dibalik.
Lompat ke Posisi (Pindah ke posisi)
Tindakan ini memindahkan instance ke posisi yang ditentukan. Jika Anda mencentang kotak relatif, posisi akan dipilih tergantung pada koordinat instance saat ini
Lompat ke Mulai (Pindah ke posisi awal)
Tindakan ini akan memindahkan instance ke posisi pembuatannya.
Lompat ke Acak (Bergerak secara acak)
Tindakan tersebut memindahkan instance ke titik acak di dalam ruangan, dengan posisi yang dipilih bebas dari benda padat.
Melambung (Memantul)
Jika Anda menempatkan aksi ini pada saat terjadi tumbukan dengan benda padat, maka benda tersebut akan memantul seperti pada kehidupan nyata, tanpa memperhitungkan gravitasi menurut hukum "sudut datang". sama dengan sudut refleksi." Dalam banyak kasus, hal ini terlihat cukup masuk akal.
Kami akan mengetahui sisanya saat kami membuat mini-game.
Jadi, mari kita mulai!
Hal pertama yang perlu Anda lakukan adalah pergi ke Game maker (di mana kita tanpa kapten?). Sekarang mari kita memuat sprite: klik pada gambar Pac-Man lima kali. Lima jendela dengan properti sprite akan muncul di depan kita. Mari muat file bomb, apple, wall, strawberry, banana dari folder sprite/tutorial1 dan beri nama masing-masing s_bomb, s_apple, s_wall, s_strawbery dan s_banana.
/*Dan sekarang beberapa tata bahasa. Nama sprite, suara, benda dan lain-lain harus terdiri
hanya dari huruf dan simbol latin. Selain itu, pemberian nama juga harus berdasarkan prinsip
resource_name_note, contoh: s_hero_jump. Jelas sekali bahwa ini adalah sprite lompat pahlawan. */

Sekarang mari kita buat tiga suara dan muat dari folder sound/tutorial1. Sebut saja snd_click, snd_music, snd_boom. Mari lakukan hal yang sama dengan latar belakang.
Mari mulai membuat objek. Objek pertama adalah dinding. Sebut saja o_wall dan tetapkan sprite s_wall. Sekarang mari kita atur kekerasannya (kotak centang Solid). Di acara Buat, tambahkan tindakan putar suara snd_music
Objek barunya adalah o_apple. Mari kita tetapkan sprite yang sesuai padanya dan tambahkan acara “Buat”. Di dalamnya, pilih tindakan "Pindahkan Tetap", atur semua arah kecuali yang di tengah dan atur kecepatan ke 8. Jika terjadi tabrakan dengan objek dinding, atur "Bounce", dan di acara tombol kiri mouse, atur Lompat ke acak posisi, putar suara snd_click dan set_score dengan argumen 50 dan kotak centang “Relatif”.

Akibatnya, Anda akan mendapatkan sesuatu seperti ini:


Sekarang mari kita buat objek o_strawbery, tetapkan sprite ke s_strawbery dan lakukan hal yang sama di beberapa event, hanya kecepatan gerakannya menjadi 5 dan jumlah poinnya menjadi 30.
Mari kita membuat objek o_banana, menetapkan sprite padanya dan membuat salinan objek o_apple.

Mari kita ubah saja Move Fixed dengan cara ini:

Dan jumlah poinnya adalah 200.
Sekarang mari kita buat objek o_bomb dan berikan sprite padanya. Dalam acara "pembuatan" kami akan menambahkan jam alarm (dari menu utama2), mengatur jumlah langkah menjadi 60. Kami juga akan menambahkan tindakan Lompat ke acak. Dalam acara alarm0, tambahkan instance create dan tentukan objek bom. Kami tidak akan mengubah koordinatnya, ketika bom dibuat, otomatis akan melompat ke posisi acak. Dan terakhir, event tombol kiri mouse. Putar aksi suara s_boom, tampilkan skor tinggi dan mulai ulang game.

Sekarang tinggal membuat ruangan dan meletakkan benda di dalamnya, saya melakukannya seperti ini:


Baiklah, mari kita pasang background di dalam ruangan.
Sekarang klik F5 dan nikmati "mahakarya" yang dibuat

Bermain game komputer memang sangat menyenangkan. Namun hanya sedikit orang yang tahu bahwa membuat game sendiri jauh lebih menarik. Di masa lalu, pembangunan permainan komputer adalah proses yang sangat panjang, rumit dan suram. Bahkan sekarang, pembuatan game membutuhkan waktu berbulan-bulan, dan tim pengembangan terdiri dari 20-100 orang! Namun dengan program Game Maker Anda dapat membuat game sendiri dalam beberapa malam. Tentu saja Anda tidak akan membuat Diablo IV, tetapi ada permainan sederhana yang menyenangkan dan menarik untuk dimainkan. Pembuat game diberkahi dengan GUI yang dapat dimengerti secara naluriah, yang dengannya Anda dapat membuat game bagus tanpa pengetahuan khusus tentang bahasa pemrograman. Ini memiliki bahasa GML bawaan yang memperluas kemampuan game Anda, tetapi akan dibahas lebih lanjut nanti.

Sekarang kita akan berkenalan dengan antarmuka program Game maker 8.0.


1. Baris dengan nama file, yang sedang Anda kerjakan, versi Game Maker dan tampilan mode (Saya memiliki mode Sederhana)
2. Menu utama. Grup file ( mengajukan):
2.1 Baru ( baru) - Membuat file game baru, benar-benar kosong
2.2 Buka ( membuka) - buka file yang disimpan sebelumnya. Anda dapat membuka file versi saat ini, versi sebelumnya dan cadangan (file cadangan). Tidak mungkin membuka file yang dibuat dalam versi yang lebih tinggi dari milik Anda2.3 Buka baru-baru ini (baru dibuka) - Dalam menu ini program mengingat baru-baru ini membuka file untuk akses mudah dan cepat ke sana.
2.4 Simpan ( Menyimpan) - menyimpan perubahan yang dilakukan.
2.5 Simpan sebagai... ( Simpan sebagai...) - menyimpan perubahan yang dilakukan dan memungkinkan Anda mengubah nama file dan lokasi
2.6 Membuat Dapat Dieksekusi... ( Buat yang Dapat Dieksekusi...) - mengkompilasi game dalam format .exe (aplikasi terpisah)
2.7 Menggabungkan Permainan... ( Hubungkan permainan) - mentransfer sumber daya dari satu game ke game lainnya (menggabungkannya sepenuhnya).
2.8 Mode Lanjutan ( Mode lanjutan) -memungkinkan Anda beralih antara mode mudah dan sulit
2.9 Preferensi ( Pengaturan) - memungkinkan Anda mengubah pengaturan program
2.10 Keluar ( KELUAR)
Selain menu ini, menurut saya tidak ada lagi yang diperlukan (setidaknya saya belum pernah membukanya selama 4 tahun)
3. Bilah Alat Akses Cepat. Berisi item menu yang paling sering digunakan, seperti membuat sumber daya, membuka, menyimpan file, mengkompilasi, menjalankan game.
4. Sumber daya permainan. Jika Anda mengklik kiri pada suatu sumber daya, menu untuk mengerjakannya akan terbuka. Mari kita lihat lebih dekat:
4.1 Sprite ( sprite) - gambar yang ditugaskan ke objek. Sejumlah sprite yang layak hadir dengan Game Maker di folder Sprite.
Antarmuka untuk bekerja dengan sprite sederhana - simpan, edit, dan ukurannya:


4.2 Suara ( terdengar) - file suara, yang tanpanya tidak ada satu game pun yang dapat melakukannya.
Antarmuka di sini hampir sama: simpan, muat, dan mainkan:

4.3 Latar Belakang ( latar belakang) - latar belakang dalam game, lalu dengan latar belakang aksi level tersebut akan berlangsung. Antarmukanya sama seperti pada sprite.
4.4 Objek ( objek) - sumber daya utama Game Maker "a. Anda dapat menambahkan gambar dan musik ke dalam game - tetapi bagaimana cara membuat gambar bergerak dan musik diputar? Objek bertanggung jawab untuk ini. Objek dapat bergerak melintasi layar, bertabrakan, dibuat , hancur. Semua hal di atas adalah peristiwa. Pada saat terjadinya peristiwa, perintah dapat diberikan kepada objek. Misalnya: pemain dan koin bertabrakan. Pemain diberi perintah untuk memainkan suara koin dan menghancurkan koin tersebut Semua yang Anda lihat bergerak dalam permainan Anda adalah objek (sebenarnya, tidak semuanya, tapi akan dibahas lebih lanjut nanti). Kita juga perlu memahami perbedaan antara objek dan instance. Objek adalah sebuah contoh. Tapi itu adalah sebuah contoh. bukanlah objek yang berperan, melainkan contoh. salinan persisnya objeknya, hanya saja salinan seperti itu bisa banyak. Ketika kita berbicara tentang suatu contoh, yang kita maksud adalah satu contoh spesifik dari suatu objek. Saat kami mengatakan objek, yang kami maksud adalah semua contoh objek tersebut.
Klik pada bola biru di toolbar akses cepat (3)


Antarmuka di sini jauh lebih rumit daripada suara atau gambar. Di sisi kiri ada jendela untuk memilih sprite, Item yang terlihat ( bisa dilihat) dan Padat ( padat). Di tengah adalah daftar acara tertentu. Dan di sebelah kanan adalah daftar tindakan yang ditetapkan untuk acara ini dan jendela untuk menambahkan tindakan baru. Lebih lanjut tentang tindakan dan peristiwa di pelajaran berikutnya.
Dan terakhir, Kamar ( kamar). Ini adalah tempat di mana latar belakang dan objek berada - dengan kata lain, level. Menu pertama merupakan menu untuk menambahkan objek. Semuanya jelas di sini - Anda mengklik area kosong, memilih objek dan meletakkannya di dalam ruangan. Instalasi menyusul. Di sini Anda dapat mengatur panjang, lebar ruangan, serta kecepatan dan namanya. Berikutnya adalah jendela yang bertanggung jawab atas latar belakang. Di sini Anda dapat memilih warna latar belakang ruangan, atau menambahkan latar belakang yang sudah ada di proyek.

5. Ini Pembuat game"jendela yang berfungsi

Itu saja. Dalam pelajaran berikutnya:
1. Peristiwa dan tata cara pelaksanaannya.
2. Tindakan dasar
3. Membuat mini-game "clicker"

Dalam tutorial hari ini kita akan melihat efek standar di Game Maker Studio 2. Apa itu efek, cara menggunakannya, dan kendala apa saja yang ada.

Melanjutkan kursus - Dasar-dasar membuat game di Game Maker Studio 2

Anda dapat menemukan pelajaran sebelumnya di sini:

Bahkan jangan memimpikan hal seperti itu melalui efek standar :)

Sebaiknya tidak menggunakan efek standar di GMS

Di sini kita perlu melakukan penyimpangan penting. Efek default di Game Maker Studio 2 tidak disarankan untuk proyek serius karena berbagai alasan.

Alasan utamanya adalah efeknya tidak dioptimalkan dengan baik untuk kinerja. Efek standar dapat memuat program (permainan) dengan sangat berat, karena kita tidak tahu bagaimana kinerjanya, namun tampaknya, kinerjanya tidak terlalu baik.

Efek standarnya berat, dan saya juga akan membahas tentang pengoptimalan dan kinerja game, tetapi dalam video dan artikel berikut.

Sangat berbahaya untuk memasukkan semua efek ini ke dalam beberapa langkah dan jika game Anda memiliki frame rate (FPS) 50-100. Game ini akan menggambarnya 50-100 kali per detik, tapi bagaimana jika Anda menggambarnya untuk 100-200 objek sekaligus? Tentu saja semuanya akan tergantung di sini.

Secara umum, pembuat game cukup mudah untuk digantung, saya membuat banyak game yang digantung di komputer saya. Misalnya, saya membuat simulator virus, dan ketika virusnya berkembang biak dengan pesat, mereka menggantungkannya pada saya.

Saya menarik GM sekitar 500 objek, lalu FPS turun dan kipas mulai bekerja sehingga komputer terbang ke udara.

Biasanya, Anda tidak perlu terlalu khawatir tentang pengoptimalan dan performa game jika Anda seorang pemula.

Seringkali tidak ada masalah dengan hal ini karena Anda membuat permainan sederhana, dan setiap orang memiliki komputer yang kuat. Namun secara umum, dan terutama saat Anda membuat game untuk ponsel, hal ini tidak bisa diabaikan.

Sekarang saya hanya akan mengatakan ini:

  • Hindari Transparansi
  • Hindari kartu besar
  • Lebih sedikit fungsi dalam beberapa langkah

Oke, itu yang saya katakan. Sekarang, apa saja efek yang ada di Game Maker dan bagaimana cara memicunya?

Jenis-jenis efek standar dalam GMS dan cara memanggilnya

3 fungsi tersedia:

  • effect_create_above(jenis, x, y, ukuran, warna); // buat efek OVER
  • effect_create_below(jenis, x, y, ukuran, warna); // membuat efek POD
  • efek_jelas // menghapus dan menghapus efek

Saya hampir selalu menggunakan effect_create_above, meskipun terkadang diperlukan yang berbeda. Misalnya, lebih baik menggambar genangan darah di bawah suatu benda, meskipun lebih baik tidak menggambarnya sama sekali...

baik- jenis efek. Lebih lanjut tentang ini di bawah.

x, kamu- jelas apa itu, koordinatnya. Dimana kita menciptakan efeknya.

Baca lebih banyak tentang ini disini:

ukuran- ukuran. Hanya boleh ada 0, 1 dan 2.

  • 0 - kecil
  • 1 - sedang
  • 2 - besar


warna- warna efek. Misalnya: c_merah, c_biru, c_hijau

Pada dasarnya itu saja, menggambarnya sangat mudah dan biasanya tidak ada masalah di sini. Secara umum, karena efek adalah hal yang visual, maka masalah utama di sini adalah hal yang visual. Artinya, bukan cara menggambarnya, tapi kapan, jenis apa, dan warnanya apa.

Tampilan