Apa lagi yang Defold dan dimakan dengan apa?

gambar

Ini adalah analisis kecil dari mesin game Defold menggunakan contoh praktis (di bawah Andoid), serta sedikit kritik subyektif dan pujian, well, tinjauan umum. Siapa yang mau tahu lebih banyak tentang mesin ini, ada satu wawancara, baca . Ada sedikit informasi tentang Defold di jaringan, jadi ini akan menjadi kontribusi untuk celengan yang sangat kecil.

Sedikit pemanasan


Jadi, Defold adalah mesin cross-platform yang relatif muda (sejak 2011) dengan editor visual yang mirip dengan Gobot, Construct atau Cocos Creater. Ini terutama ditujukan untuk 2D (masih belum cukup alat untuk bekerja dengan 3D), bahasa pemrograman Lua. Ini berbeda dari mesin serupa dalam kinerja stabil pada ponsel (bahkan 60 fps tanpa lag dengan suara), ukuran build kecil (2-4 mb tergantung pada platform), sistem gui and go yang nyaman, pengaturan animasi keren (kurva kunci), dan juga sepenuhnya berada di bawah editor (saya akan memberi tahu Anda di bawah ini, intrik). Di situs, di bawah akun, dimungkinkan untuk menyimpan file proyek. Setiap anggota tim yang berwenang dapat membuat perubahan pada proyek, yang umumnya nyaman, meskipun saya sendiri tidak selalu dapat menggunakannya, karena Proksi kami yang bekerja tidak memberikan akses editor. Defold memiliki fitur dalam menulis kode, meskipun saya akan membawanya ke minus (detail di bawah). Dan ya, saya hampir lupa, tim Defold sangat responsif, pantas dihormati. Saya meminta bantuan forum beberapa kali - segera, dalam waktu 10 menit mereka menjawab dan membantu. Begitu ada masalah ketika memulai editor di Ubuntu, orang-orang tidak bisa membantu pada awalnya, tetapi setelah beberapa jam pemimpin mereka menghubungi saya dan menyelesaikan situasi. Ternyata di linux ada bug dengan kayu bakar standar pada video, jadi Anda harus menginstal yang asli. Juga di situs ada aset, di mana tanpa mereka. Baiklah, mari kita selesaikan pendahuluan, ayo pergi!

Ayo mulai!


Kami mendaftar dan mengunduh editor Defold versi 2 di situs web (1 tidak lagi didukung), membuat proyek Anda sendiri di sana dan mengunduhnya. Proyek kemudian disimpan di situs, atau secara lokal (jika kita takut bahwa Defold yang licik akan mengintip). Selanjutnya, buka proyek Anda melalui editor (akan ada saya di gambar), lihat:



Di sebelah kiri adalah file, di sebelah kanan adalah jeroan dari simpul yang dipilih, di tengah adalah editor. Saya tidak akan mengganggu Anda dengan analisis antarmuka, Anda bisa mempelajarinya sendiri. Lihat folder bawaan? Ada satu set standar skrip, font dan hal-hal lain untuk mesin, Anda bisa belajar. Yang lainnya adalah file Anda sendiri. Di pengaturan proyek (di gambar tengah) ada garis (disorot) koleksi utama, ada tautan ke file koleksi utama dari mana aplikasi Anda mulai, buka:



Ya, ya, ini persis kekacauan yang akan Anda miliki di editor, karena tidak ada cara untuk menyembunyikan yang tidak perlu (kami akan memberi kredit dalam minus). Pertama mari kita pahami apa itu koleksi. Ketika saya menulis tentang editor bawahan di atas, dapat dipahami bahwa setiap file proyek, tidak peduli apa ekstensi itu, adalah file teks, dan dapat diedit secara independen. Jadi, koleksi juga merupakan file teks dengan deskripsi objek internal.



Koleksi dapat berisi objek apa pun (skrip, sprite, suara, dll.), Serta koleksi lainnya yang disematkan di dalamnya. Semua kontennya selama eksekusi akan dibuat, skrip diinisialisasi. Koleksi bisa dibungkus dalam Proksi. Proxy adalah hal yang hebat, mereka biasanya membungkus berbagai level permainan Anda, misalnya. Mereka dapat dikirim, dimuat (koleksi bersarang dibuat selama pemuatan), dijeda, diperlambat, dan proses dipercepat.

Juga, hal yang sangat mudah - Pabrik dan Pabrik Koleksi. Ini adalah shell untuk objek yang sangat diperlukan jika Anda perlu membuat dan menghapus objek secara dinamis selama eksekusi.



Ini adalah contoh koleksi dinamis yang bagus. Ini adalah lonjakan, itu dimuat dengan algoritma acak di tingkat dan dihapus, itu biaya dia untuk keluar dari tampilan kamera agar tidak membuang-buang sumber daya.



Ini adalah skrip di dalam spike, dalam metode pembaruan ini memeriksa apakah posisinya sendiri kurang dari posisi karakter (pemain di tengah kamera) ditambah margin kecil, lalu dihapus sendiri. Omong-omong, Anda bisa menggantung properti di skrip. Sebagai contoh, saya memiliki objek koleksi pabrik di mana ada domba NPC.



Ini adalah NPC kami, ia memiliki properti pada script seperti kecepatan lari, langkah, kekuatan lompat dan daya tahan. Saat membuat sebuah instance, saya secara acak memberikan properti ini padanya.

Buat npc:



Instance internal skrip mengubah propertinya (keunikan melalui diri.):



Dan sekarang domba-domba kita berlari dengan kecepatan yang berbeda:



Berbicara tentang editor kode, ini primitif. Metode tidak dapat diminimalkan (seperti pada Sublime, misalnya), dan ketika ada banyak garis, Anda harus memutar roda untuk waktu yang lama dan menyakitkan, mencari yang tepat. Juga tidak ada peningkatan skala, tetapi ini adalah hal sepele. Aset defold memiliki instruksi tentang cara mengajar Sublime untuk mengisi metode dari editor.

Sedangkan untuk partikel, ada kemudahan - jika Anda memilih emitor di jendela editor dan menekan bilah spasi, Anda dapat langsung melihat hasilnya.

Nah, sekarang tentang bagaimana mesin bekerja


Defold menerima dua cabang terpisah untuk rendering, ini adalah GUI dan GO.

GUI - seperti namanya, ini adalah antarmuka pengguna. Itu ada secara terpisah, dikonfigurasi pada layar dan selalu ditampilkan di atas segalanya. GUI memiliki metode sendiri yang tidak terkait dengan GO, meskipun mirip dengannya. Ini juga koleksi, tetapi dengan keterbatasan. Satu skrip diterima per GUI, dengan ekstensi .gui_script. Suatu hal yang sangat baik dan nyaman, meskipun ada nuansa - Anda tidak dapat secara langsung mengakses objek game apa pun dari GUI, hanya melalui variabel global, atau melalui pesan (saya akan memberi tahu Anda nanti).

GO adalah objek game (sesuatu seperti node transformasi), berisi informasi tentang gerakan, rotasi, skala, dll. Di dalam, dibutuhkan segalanya, termasuk GO lainnya. Digunakan untuk koleksi, ini adalah shell yang diperlukan untuk sejumlah objek (seperti grup).

Selanjutnya, kesenangan dimulai. Saya pindah ke Defold dari Android Studio yang ramah dengan Libgdx, dan inilah yang mengejutkan saya: objek tidak dapat diakses secara langsung, hanya melalui metode kruk atau pesan yang masih tidak memberikan kebebasan kreatif, ada batasan serius. Jika dibandingkan dengan Libgdx yang sama, di sana saya dapat dengan tenang bahkan menulis ulang kelas yang ada dari perpustakaan Lieb dan sudah merujuknya. Di Defold, sayangnya, Anda menggunakan apa yang Anda miliki, dan jika ada yang hilang, minta pengembang untuk menambahkan fungsi yang diperlukan, atau Anda mencari solusinya. Misalnya, ketika bekerja dengan suara, Anda tidak dapat mengetahui apakah pemutarannya telah berakhir! Saya harus menambahkan kruk yang mengenali durasi suara dari file pemutaran. Adapun Box2D yang disederhanakan (kritik tiba-tiba dimulai), metode mulia untuk mendeteksi dan memproses sebelum, selama dan setelah tabrakan menghilang dari sana! Sebagai gantinya, sebuah pesan tiba di skrip, yang terletak di GO yang sama dengan tubuh fisik (tidak selalu setiap frame, terutama pada ponsel) dengan informasi tentang tabrakan, dan itu saja. Juga, seseorang tidak dapat menggerakkan tubuh jika fisik, hanya bisa bersifat kinematik, dan properti ini tidak dapat diubah selama eksekusi. GO tidak dapat diskalakan bersama dengan tubuh fisik, di editor itu akan mengubah skala untuk Anda, tetapi tidak dalam game (seperti yang mereka janjikan untuk memperbaikinya). GO tidak dapat diskalakan ke minus (misalnya, mirror by X), semuanya akan berfungsi di editor, tetapi dalam pelaksanaannya akan kembali ke yang asli. Secara umum, saya sedikit memberontak tentang hal ini dan (setelah menyelesaikan masalah ini melalui kruk) saya tenang, masih kecepatan Defold dan editornya melebihi rem Libgdx (pembaca akan memaafkan saya subjektivitas saya!) Dan kurangnya editor normal (saya ingat entah bagaimana membuatnya untuk Lieb editor peta di Autodesk Maya, tapi itu cerita lain ...).

Metode msg.post () dan cara menghubungkannya


Secara umum, setiap objek memiliki url (misalnya, "main: / main_pers # spine_anim"), di mana Anda dapat mengirim pesan, dan bahkan melampirkan variabel ke dalamnya. Pesan langsung terbang ke penerima tanpa harus mengantri untuk diproses. Keduanya nyaman dan juga terkadang membuat kebingungan. Pesan sering diperlukan untuk mengirim informasi dari GO ke GUI (misalnya, domba Anda menangkap gelembung dengan buah, kami memperbarui skor di GUI).



dan sebaliknya (energi sudah habis, kami memberi tahu domba-domba bahwa sudah waktunya tidur).



Masalah muncul ketika variabel yang dihitung dalam salah satu skrip dalam metode pembaruan tidak punya waktu untuk memperbarui, karena pesan yang keluar dari gilirannya. Tapi ini bukan apa-apa, yang utama adalah membiasakan diri dengannya.

Nuansa lain adalah alamat benda. Pada dasarnya, ini adalah string, namun, pada platform seluler, string dinonaktifkan untuk menghemat sumber daya (di mana, sialnya, ada tertulis!?), Alih-alih ada hash. Tampaknya tidak ada, ya, tetapi jika logika permainan Anda mengirim pesan melalui jalur yang diedit, maka tunggu masalahnya, layanan pos tidak akan menyerahkan surat kepada penerima. Oleh karena itu, cadangan alamat dalam variabel melalui metode msg.url () dan jangan sentuh. Sebenarnya, ini adalah hal sepele, tetapi pada mulanya sangat menghabiskan waktu yang berharga. Misalnya, untuk mengetahui apakah ada domba di tanah, Anda perlu menambahkan tubuh kinematik tepat di bawah kaki, dan tanyakan padanya apakah ada jalan masuk ke tanah.

Tulang naga bukannya Spine


Tidak masalah, kami menggunakan naga, karena tulang belakangnya sangat mahal. Tapi, seperti biasa ada tapi. Tulang belakang memiliki fungsi - kulit, naga tidak memilikinya. Bagaimana cara mengatasinya? Tangan. Buka json dari tulang belakang dan lihat di mana ada kulit, analisis, salin, tempel ke json kami dari naga dan edit sebagaimana mestinya, itu saja. Skrip python menghemat jumlah yang layak. Adapun skrip, ini umumnya merupakan dongeng. Karena semua file adalah teks, pengeditan dapat dilakukan secara otomatis. Sebagai contoh, saya mengumpulkan level di editor menggunakan atlas umum dengan banyak tekstur (lebih dari 300), tetapi saya tidak menggunakan semuanya, hanya sekitar 100. Agar tidak menggunakan tangan saya, saya "mengoptimalkan" pengoptimal atlas - semua yang digunakan dalam koleksi tetap, sisanya membuang. Sangat nyaman ketika Anda dapat mengotomatisasi sesuatu.

Bagikan dan Admob


Tombol Bagikan dapat ditemukan di aset dan dilampirkan dalam beberapa menit. Perhatian dengan aset! Aset Admob misalnya, secara signifikan memperlambat pembangunan, dan juga tidak diberikan sama sekali ketika tidak ada koneksi jaringan. Dalam kasus Admob (saya tidak akan menulis bagaimana cara menanamkannya, semuanya ada di dokumentasi di github), Anda masih harus melakukan pemeriksaan pada platform, jika tidak, build di windows akan memberikan kesalahan. Karena itu, ketika mengembangkan, menunda iklan dan aset lainnya untuk terakhir kalinya, seperti Membangun defold tanpa mereka sangat cepat. Sedangkan untuk pelokalan, Anda dapat membuat sendiri kamus seperti itu:

dict["ru"]["lang"]=" " dict["en"]["lang"]="Ya ne russkiy" 

dan ubah teks selama inisialisasi, dengan merujuk sebagai berikut:

  language=sys.get_sys_info().language label.set_text("game:/go#label",dict[language]["lang"] 

Pada dasarnya itu semua, menurut hasilnya, Defold sangat keren (ketika saya menemukan jawabannya), jadi saya menyarankan semua orang. Siapa yang peduli dengan apa yang saya dapatkan darinya, tonton trailernya di sini (bukan untuk PR, audiens target saya adalah anak-anak).

Source: https://habr.com/ru/post/id416461/


All Articles