Animasi Flash mandiri di Unity3D. Bagian Satu, Liris

Dalam seri artikel ini saya akan berbicara tentang bagaimana dan mengapa kami memutuskan untuk membuat solusi kami sendiri untuk mengimpor animasi flash ke Unity, tentang optimisasi dan dapur internal dari plug-in yang dihasilkan. Dan juga di program: cerita tentang bagian dalam format swf, fitur ekstensi editor Unity dan umumnya tentang animasi pada umumnya. Saya meminta potongan!




Pendahuluan


Pada awal setiap proyek ada kepedihan pilihan teknologi untuk banyak bagiannya. Salah satu bagiannya adalah sistem animasi. Ada beberapa variabel yang bergantung pada pilihan ini. Pertama, apa yang digunakan animator Anda (dapat) bekerja atau alat animator apa yang lebih mudah Anda temukan. Jelas bahwa tidak masuk akal untuk memilih produk yang sangat spesifik, karena jika karyawan saat ini pergi karena satu dan lain hal (bus tiba-tiba?), Akan sangat sulit untuk menggantinya, bagian dari proyek hanya akan berhenti tanpa batas, yang, dalam hal produk komersial bisa sangat mahal. Variabel kedua lebih teknis: integrasi ke mesin Anda. Adakah solusi pihak ketiga dan kualitas solusi ini, adakah kekuatan dan kemampuan untuk membuat solusi saya sendiri, serta produktivitas dan kenyamanan semua hal di atas. Ya, variabel ketiga adalah kemampuan alat ini, karena jika Anda, mimisan, membutuhkan kinematika terbalik , maka itu benar-benar aneh untuk memilih animasi non-kerangka.


Jenis animasi 2d


Pertimbangkan opsi paling populer untuk menerapkan animasi di game. Saya hanya akan berbicara tentang animasi 2d, animasi 3d - ini adalah topik percakapan, pendekatan, dan alat yang sama sekali berbeda. Anda dapat melewati bagian tanpa rasa takut jika Anda memahami hal-hal ini (tidak akan ada wahyu dan tidak ada kerusakan), atau jika Anda bertujuan melihat fitur hanya animasi flash, mereka ada di bawah.


Animasi Bingkai


Tinjauan mini kami dibuka dengan jenis animasi yang paling sederhana dan tertua: animasi frame-by-frame. Setiap bingkai animasi seperti itu diwakili oleh gambar yang terpisah, dengan perubahan cepat yang ilusi gerakan muncul.


Pro:


Implementasi dasar, biasanya di mesin apa pun. Segala kerumitan dan gaya animasi, setidaknya lay out dan masukkan film ke dalam bingkai (tentu saja secara teori). Alat apa pun: hampir semua hal dapat memberi Anda urutan bingkai yang dapat, jika perlu, direkatkan menjadi satu atlas tekstur.


Cons:


Minus utama adalah, tentu saja, ukuran barang ini di memori. Secara alami, ada segala macam trik seperti memotong bingkai dalam blok dan penggunaan berikutnya berulang blok, memuat latar belakang bingkai dari disk dan membebaskan sudah ditunjukkan, dan lain-lain. Tapi trik ini punya kekurangannya. Block slicing - hanya cocok untuk pixel art , pemuatan latar belakang - menciptakan beban tambahan pada disk, membutuhkan banyak ruang pada disk ini sendiri, dan ukuran gim Anda bertambah, serta jumlah data yang diunduh untuk memulai atau memperbarui.


Total:


Hanya cocok untuk ukuran kecil dan jumlah frame animasi, idealnya untuk pixel art dan gaya game retro ala NES .


Animasi Video


Sebagai pendewaan kegilaan dari animasi frame-by-frame, animasi video muncul. Dan ya, itu digunakan dan bahkan sesekali ke tempat itu. Kami menerapkan ini untuk game dalam genre " Obyek Tersembunyi " untuk animasi besar dan kompleks, serta untuk memotong adegan dengan sentuhan realisme. Dengan bantuan codec seperti theora dan vp8, Anda dapat menerapkan animasi video yang cukup dapat ditoleransi (dan bahkan dengan saluran alfa ) sendiri.


Kelebihannya di sini, tentu saja, adalah bahwa Anda dapat menampilkan dalam animasi seperti itu segala yang diinginkan hati Anda, dari adegan yang diarahkan dengan partisipasi aktor nyata, hingga membuat pertempuran 3d. Kerugiannya adalah beban liar pada CPU ketika decoding ini dan, tentu saja, kualitas gambar. Anda dapat menemukan kompromi antara kualitas dan kinerja dalam kasus yang sangat terbatas dan spesifik, seperti dalam game yang ditunjukkan di atas untuk Obyek Tersembunyi, misalnya.


Secara umum, itu jauh dari cocok untuk semua orang dan jauh dari selalu, atau lebih tepatnya hampir tidak pernah, jika kita tidak mempertimbangkan adegan potongan yang diberikan - di mana adalah tempat untuk "animasi" tersebut. Implementasi yang baik dari animasi seperti itu tidak dapat membanggakan kesederhanaan baik, ada banyak nuansa dan trik, baik dari segi kualitas gambar output dan beban yang diterima pada prosesor pusat. Karena kekhususannya, ada beberapa implementasi yang sudah jadi, kualitasnya juga tidak berbeda, atau harganya mahal (hai, Bink_Video ), jadi banyak yang menulis sendiri.


Animasi kerangka


Jadi kita sampai pada jenis animasi 2d yang populer dan modern. Animasi kerangka semakin banyak menangkap hati dan pikiran pengembang di bidang 2d, menjadi animasi standar untuk game. Sangat lucu bahwa mereka datang secara luas dalam 2d relatif baru-baru ini, tidak seperti 3d, di mana mereka muncul pada masa Raja Peas, ketika para ayah menulis Half-Life . Inti dari animasi kerangka, cukup aneh, ada di kerangka, yang menciptakan animator dari tulang yang terhubung satu sama lain oleh struktur pohon. Fragmen melekat pada tulang dalam bentuk gambar terpisah. Seluruh struktur digerakkan oleh perpindahan dan rotasi tulang relatif satu sama lain. Perpindahan dan rotasi tulang dalam kerangka mengikuti garis waktu animasi umum.


Keuntungannya jelas: kita tidak perlu menyimpan setiap frame animasi dalam bentuk gambar yang terpisah, hanya fragmen (lengan dan kaki karakter, misalnya), yang akan kita gerakkan tulang-tulang kerangka. Ada implementasi yang sangat baik dari jenis animasi dengan runtime untuk platform dan mesin yang diperlukan, dengan harga penggunaan yang wajar atau bahkan gratis: Spine , Spriter , Anima2D , DragonBones dan lainnya. Berkat kerangka dan fitur-fiturnya, kehalusan animasi yang luar biasa dapat dicapai dengan menginterpolasi posisi tulang-tulangnya, serta menggabungkan transisi dari animasi ke animasi dan bahkan mencampur dua animasi yang berbeda: pengambilan gambar dalam pelarian, pengambilan gambar secara diam-diam dan sebagainya. Saya tidak akan mencantumkan semua kemungkinan animasi kerangka, benar-benar ada banyak dari mereka dan mereka sangat keren. Saya lebih baik memberikan tautan di mana mereka ditampilkan dengan jelas dengan gambar dan deskripsi di situs web Spine .


Itu terlihat seperti peluru perak, tapi tidak. Ada beberapa kekurangan. Segera buat reservasi yang untuk banyak proyek dan animasi - kerugian ini mungkin tidak ada. Jika animasi kerangka cocok untuk Anda - sangat bagus, gunakan, mereka indah dan modern.


Ayo kembali ke minus. Tahap tambahan dalam membuat animasi adalah rig (atau rigging, seperti banyak istilah dalam industri kami, juga di-Russified). Penciptaan kerangka dan pengikatan tulang untuk fragmen. Jika objek memiliki satu animasi, dan bukan beberapa, seperti, misalnya, karakter permainan dalam genre " Platformer ", maka panggung benar-benar berlebihan. Tidak semua animasi mudah dianimasikan dengan tulang. Ada banyak animasi di mana tulang menghalangi dan tanpa mereka itu lebih mudah dan lebih cepat, baik dalam hal penciptaan dan dalam hal kinerja permainan. Item terpisah saya akan mengambil spesialis di pasar. Jumlah mereka bertambah dengan popularitas animasi skeletal, tetapi masih belum mudah untuk menemukannya di tim Anda. Penyebaran alat dan alat juga mempengaruhi, seseorang terbiasa dan menggunakannya, orang lain, perlu untuk berlatih kembali, yang menciptakan kesulitan tambahan dalam menemukan dan melatih karyawan.


Animasi Garis Waktu


Saya mengambil jenis animasi ini sampai akhir, bukan karena itu lebih baik daripada orang lain, tetapi karena ini adalah animasi flash yang persis sama tentang bagian dalam yang akan kita bahas di bagian teknis artikel. Flash bukan satu-satunya perwakilan dari jenis animasi ini, tetapi tentu saja pemimpin mereka, jadi semuanya akan dijelaskan sehubungan dengan itu. Animasi garis waktu terdiri dari fragmen yang dianimasikan dalam lapisan terpisah pada garis waktu. Hampir hal yang sama yang kita lihat dalam animasi kerangka, tetapi tanpa kerangka. Menurut bingkai kunci pada timeline, kita dapat memindahkan, memutar, mengganti, menggambar fragmen baru ke dalam frame ini dan, tentu saja, menambahkan tanda penghubung, penskalaan dan rotasi di antara mereka. Artinya, kita tidak memindahkan tulang dengan fragmen yang melekat, tetapi fragmen itu sendiri. Tentu saja, kita kehilangan banyak peluang yang diberikan oleh animasi skeletal kepada kita, tetapi tidak semua orang membutuhkannya. Sebagai gantinya, kami memperoleh orang lain, seperti:


  • kemampuan untuk menggambar dan menyisipkan fragmen baru di tengah animasi;
  • tidak ada rig, tidak ada tulang yang terkadang hanya mengganggu;
  • Adobe Flash (sekarang Adobe Animate ) adalah alat animasi tertua dan paling terbukti selama bertahun-tahun, sejumlah besar animator, dengan satu atau lain cara, memilikinya;
  • kemampuan untuk menggunakan animasi lama ketika menerjemahkan proyek flash Anda ke Unity, termasuk animasi yang dibuat dalam grafik vektor , dan tidak hanya dalam yang raster .

Apakah flash mati? Sebagai pemain di browser - tentu saja, sebagai alat untuk animasi - hidup dan sehat, tidak ada alternatif dan tidak diharapkan. Kontra? Tentu saja Minus utama adalah bahwa ini bukan animasi kerangka, ya Kami kehilangan kesempatan untuk mencampur animasi satu sama lain, kami tidak memiliki kinematika terbalik dan kemampuan serupa yang melekat hanya pada kerangka. Tapi kami memiliki garis waktu yang saling bersarang, juga topeng raster dan vektor! Semua animator suka topeng! Di sini perlu disebutkan bahwa di Spine, baru-baru ini juga muncul kemampuan kliping , tetapi sejauh ini hanya geometris dan sangat terbatas dibandingkan dengan masker flash.


Ringkasan Jenis Animasi


Secara alami, saya tidak mencantumkan semua jenis animasi, hanya yang utama. Misalnya, yang disebut animasi prosedural tertinggal, ketika objek atau fragmennya digerakkan hanya dengan kode, tetapi tidak mungkin untuk membandingkannya dengan yang lain, dan saya tidak benar-benar ingin mengembang artikel, lebih baik melihat sesuatu yang lebih khusus dalam animasi. untuk melengkapi gambar.


Untuk meringkas. Tidak ada peluru perak, seperti biasa dan di hampir semua hal. Anda harus memilih proyek, tugas, dan orang-orang. Lagipula, tidak ada yang membatasi siapa pun untuk menggunakan satu jenis animasi. Di mana-mana ada proyek di mana semua jenis animasi digunakan pada saat yang sama dan semua orang senang. Memotong adegan - video, karakter - kerangka, pemandangan - garis waktu, penerbangan dari penghasil sistem partikel - prosedural, partikel-partikel itu sendiri dalam sistem mereka - bingkai demi bingkai. Kami mengambil yang terbaik dari setiap jenis.


Penderitaan pilihan dan keputusan untuk menulis sendiri


Nah, untuk beberapa alasan obyektif, kami memutuskan bahwa kami membutuhkan animasi flash untuk proyek kami. Muncul pertanyaan tentang mengintegrasikan mereka ke dalam mesin. Setelah mencoba beberapa opsi untuk pengaya, kami memilih yang cocok dengan kemampuannya, masih hidup dan mendukung, dan juga memiliki harga yang sama sekali tidak sopan untuk lisensi antar lisensi, tetapi Anda dapat mentolerir produk yang bagus. Saya sengaja tidak akan memberikan nama, agar tidak membuat iklan atau anti-iklan kepada siapa pun.


Dengan plugin ini, kami hidup selama hampir satu tahun pengembangan, di mana detailnya diklarifikasi, yang tidak dapat kami gunakan lebih lanjut. Yakni, kualitas integrasinya ke dalam Unity. Itu semua menghasilkan bug serius yang terus terang yang tidak bisa dikatakan mudah, cepat, dan tanpa perlawanan diperbaiki di sisi pengembang, dan dalam kinerja yang mengerikan pada perangkat target, dan kami masih memiliki level iPad 2 . Ini terjadi karena integrasi yang buta huruf ke dalam mesin tertentu, ketidaktahuan akan spesifik dan jebakannya, kami lebih dari puas dengan kemungkinan, tetapi kode sumber, bahkan dalam perintah pribadi, menolak untuk dibuka, dan diputuskan untuk menulis keputusan kami.


Saya memiliki beberapa pengalaman yang cukup sukses menulis ekstensi untuk Unity dan memiliki sedikit pengalaman mengkonversi animasi flash ke format saya. Yang terakhir sudah lama, tetapi sesuatu ditarik kembali. Di tempat yang sama, diputuskan untuk menuliskan semuanya sebagai proyek rumah, agar tidak bergantung pada proyek atau pada perusahaan tempat saya bekerja, dan jujur โ€‹โ€‹saja, saya juga ingin memiliki produk sendiri. Jadi, dipersenjatai dengan spesifikasi format swf 250 halaman, saya pergi ke pertempuran.


Opsi Ekspor


Untuk memulainya, ada baiknya membahas opsi untuk mengekspor animasi dari editor flash. Ada beberapa dari mereka, tentu saja dengan pro dan kontra. Mari kita pergi melalui yang utama.


format .xfl


Di editor animasi flash, dimungkinkan untuk menyimpan sumber animasi dalam format .xfl yang tidak terkompresi alih-alih format .fla yang tertutup, yang ditawarkan secara default. Formatnya cukup sederhana tetapi tidak berdokumen. Ini terdiri dari beberapa direktori bersarang dan sekelompok file .xml, di mana semua status klip yang disimpan di dalamnya dijelaskan. Format deskripsi juga sederhana dan jelas, berikut adalah contohnya:


static_clip.xml


<DOMSymbolItem name="static_clip" itemID="5c719f28-00000051" lastModified="1550950184"> <timeline> <DOMTimeline name="static_clip"> <layers> <DOMLayer name="Layer_1" color="#00FFFF" current="true" isSelected="true"> <frames> <DOMFrame index="0" keyMode="9728"> <elements> <DOMBitmapInstance selected="true" libraryItemName="bitmap.png"/> </elements> </DOMFrame> </frames> </DOMLayer> </layers> </DOMTimeline> </timeline> </DOMSymbolItem> 
Tautan ke sumber

Di sini kita memiliki klip statis static_clip dengan satu layer Layer_1 dan satu frame, di mana ada bitmap bernama bitmap.png .

movie_clip.xml


 <DOMSymbolItem name="movie_clip" itemID="5c719f30-00000053" lastModified="1550950713"> <timeline> <DOMTimeline name="movie_clip"> <layers> <DOMLayer name="Layer_1" color="#00FFFF" current="true" isSelected="true"> <frames> <DOMFrame index="0" duration="4" tweenType="motion" motionTweenSnap="true" keyMode="22017"> <elements> <DOMSymbolInstance libraryItemName="static_clip"> <matrix> <Matrix tx="-50" ty="-50"/> </matrix> <transformationPoint> <Point x="28.5" y="27.5"/> </transformationPoint> </DOMSymbolInstance> </elements> </DOMFrame> <DOMFrame index="4" tweenType="motion" motionTweenSnap="true" keyMode="22017"> <elements> <DOMSymbolInstance libraryItemName="static_clip" centerPoint3DX="128.5" centerPoint3DY="127.5"> <matrix> <Matrix tx="100" ty="100"/> </matrix> <transformationPoint> <Point x="28.5" y="27.5"/> </transformationPoint> </DOMSymbolInstance> </elements> </DOMFrame> </frames> </DOMLayer> </layers> </DOMTimeline> </timeline> </DOMSymbolItem> 
Tautan ke sumber

Di sini kami menjelaskan klip animasi movie_clip , yang masing-masing berisi dua frame kunci dengan indeks 0 dan 4. Frame berisi klip statis kami static_clip di koordinat (-50;-50) dan (100;100) . Di antara frame ada gerakan tween (animasi prosedural, dalam kasus kami ini hanya transfer, tanpa penskalaan dan rotasi), masing-masing, posisi klip statis antara frame kunci dapat diperoleh dengan interpolasi linier koordinat dari frame ini.

Tentu saja, semuanya akan di animasi nyata, ahem ... sedikit lebih rumit dan lebih produktif, tetapi Anda dapat mencari tahu semuanya tanpa dokumentasi. Tampaknya di sini adalah kebahagiaan. Dan saya tahu beberapa proyek dan perusahaan yang cukup berhasil, tetapi dengan beberapa keterbatasan dan kesulitan. Kesulitan-kesulitan ini adalah lalat di salep .xfl, yaitu:


  1. Tweens (tweens, Russified yang dia bisa) sangat berbeda, keduanya sederhana: dengan interpolasi linier, dan lebih kompleks: dengan fungsi yang ditentukan pengguna dan grafik interpolasi ini, morphing grafik vektor pada kembar, dengan aturan mereka sendiri hanya untuk macromedia dan adobe;
  2. Grafik vektor, seperti semua animasi kecuali grafik raster, dijelaskan dalam bentuk teks, misalnya . Oleh karena itu, perlu untuk menulis rasterizer Anda sendiri, yang, karena kompleksitas dan fitur-fitur vektor dalam flash, dalam praktiknya tidak mungkin;
  3. Aturan untuk bermain animasi, termasuk yang bersarang, Anda harus memikirkan diri sendiri dari awal, tidak ada dokumentasi untuk itu dan kapan bingkai harus ditampilkan, apa yang harus diubah dalam situasi apa, dan apa yang harus pergi tanpa interpolasi - masih harus ditentukan oleh eksperimen panjang, mencoba untuk mencakup semua kasus yang mungkin di tes berjalan, yang merupakan latihan yang sangat non-sepele untuk solusi umum, bukan pribadi.

Ini bukan semua kesulitan dari pendekatan ini, tetapi mereka cukup untuk memahami bahwa untuk solusi umum hanya cocok dengan pemesanan yang kuat. Sekali waktu, saya mengambil jalan ini untuk salah satu proyek di mana saya berpartisipasi. Ada adegan potong flash, dengan kembar klasik (tanpa aturan interpolasi khusus dan fungsi khusus interpolasi ini), hanya grafik bitmap dan tanpa fitur canggih lainnya yang disediakan oleh editor flash. Solusi pribadi ditulis cukup cepat dan efisien, tetapi animator harus sangat terbatas sehingga mereka tidak menggunakan sesuatu yang lebih atau kurang rumit. Pendekatan ini memiliki hak untuk hidup dan ada beberapa perpustakaan, dengan berbagai tingkat kelalaian, berdasarkan itu, tetapi, seperti yang saya katakan, dengan banyak reservasi dan keterbatasan.


skrip .jsfl


Pilihan lain yang hampir berfungsi adalah mendapatkan informasi tentang animasi kami. jsfl-scripts memungkinkan Anda untuk memperluas flash-editor, berinteraksi dengan lingkungannya, mengubah animasi dan, tentu saja, mendapatkan semua informasi yang diperlukan tentang garis waktu, lapisan, klip dan bingkai di dalamnya. Dan itu juga digunakan oleh animator untuk mengotomatiskan berbagai tindakan, tetapi ini adalah cerita dari buku tetangga. Secara umum, pendekatan ini diberkahi dengan semua kelemahan dari pendekatan sebelumnya, jadi saya tidak akan memikirkannya, saya hanya bisa mengatakan bahwa dengan itu Anda dapat menurunkan seluruh animasi kami dalam bentuk, misalnya, animasi frame-by-frame, dan ini bukan cara Jedi nyata (tapi, tentu saja, terjadi di beberapa proyek). Kami akan kembali ke skrip ini dalam pendekatan yang saya pilih: untuk meraster grafis vektor dan mengoptimalkan halaman animasi.


Aplikasi UDARA


Tetapi pendekatan ini sudah cukup berhasil dan dapat digunakan sebagaimana mestinya. Saya tidak memilihnya, tetapi untuk referensi saya akan memberikan opsi ini. Inti dari pendekatan ini adalah kita membuat aplikasi AIR pada flash itu sendiri atau, untuk aesthetes, pada Haxe , misalnya, yang akan mendapatkan semua informasi dari animasi yang telah dikompilasi ke dalam format swf. Kami memainkan frame-by-frame animasi di dalam aplikasi kami, mendapatkan semua informasi frame dan menyimpannya dalam format yang kami butuhkan untuk runtime kami. Di sini semua masalah di atas diselesaikan:


  • tidak perlu meraster grafis vektor, flash runtime akan melakukannya untuk kita, tetap hanya untuk mendapatkan informasi ini dan menyimpan hasil raster fragmen vektor;
  • tidak perlu membuat aturan main dan berurusan dengan interpolasi kembar khusus, flash player di dalam aplikasi AIR tahu persis bagaimana melakukan ini dan akan melakukan hampir segalanya untuk kita;

Sebagai bonus, kami mendapat kesempatan untuk menggunakan skrip frame dalam animasi (semua jenis play() , stop() dan gotoAndPlay() lainnya gotoAndPlay() , beberapa animator sangat menyukainya). Kelemahannya adalah ketidakmampuan untuk mengekspor animasi yang dilingkarkan ke dalam flash itu sendiri, tetapi ini tidak masalah, karena Anda dapat mengulanginya di runtime Anda, dan meminta animator untuk menyiapkan segalanya untuk ini.


Perlu disebutkan bahwa saya yakin semuanya akan sedikit lebih rumit daripada kedengarannya dalam uraian saya, karena saya pribadi tidak pergi ke sana, jadi saya tidak bisa memberi tahu Anda detailnya. Biarkan mereka yang telah melewati jalan ini berbagi pengalaman mereka, dengan senang hati kita membaca tentang sukacita dan kesengsaraan mereka!


Flash player sendiri


Ini mungkin pilihan yang paling jujur, jelas dan langsung dari semua, tetapi juga yang paling sulit. Pada akhirnya, inilah yang dilakukan oleh flash player asli, yang sebagian besar dari kita miliki di browser favorit kita sebagai tambahan. Perwakilan populer dari genre ini: gameswf dan, tumbuh dari yang sebelumnya, scaleform . Keduanya sekarang sudah mati. Sangat menarik bahwa mereka digunakan terutama untuk mengimplementasikan GUI di berbagai proyek, termasuk AAA . Tetapi kami tertarik pada struktur internal, bukan aplikasi spesifik dari perpustakaan yang mati.


Setiap flash player yang menghargai diri sendiri setidaknya memiliki hal-hal berikut ini:


  • parser format swf;
  • grafik vektor rasterizer;
  • implementasi mesin virtual untuk menjalankan kode ActionScript ;
  • implementasi perpustakaan standar untuk kode pengguna;

Masing-masing poin ini berteriak tentang bagaimana jika mungkin untuk mengimplementasikannya, maka Anda harus mengubah lebih dari satu tim untuk tugas ini dan bertukar beberapa tahun pengembangan ke versi minimum. Bahkan pelaksanaan beberapa bagian kecil, cukup untuk memainkan sesuatu, akan memakan banyak waktu, dan kesulitan tambahan, dalam bentuk begitu banyak bagian yang tidak terdokumentasi dari seluruh pipa ini, akan menggandakan periode yang sudah sangat besar ini.


Ya, jaringan penuh dengan upaya untuk mengimplementasikan masing-masing bagian ini, dengan berbagai tingkat kelalaian dan kejengkelan. Tetapi bahkan tidak mungkin untuk mengambil perkembangan ini sebagai dasar, hanya akan membutuhkan waktu bertahun-tahun untuk menangkap bug, dan menulis unit test tidak tertulis sebelum menyadari bahwa itu tidak akan berhasil sepenuhnya. Mereka yang mencoba melengkapi game jika memiliki kemampuan yang diperlukan memahami apa yang saya bicarakan. Flash-player yang jujur โ€‹โ€‹juga harus meraster grafis vektor tidak terlebih dahulu, tetapi dalam runtime, yang akan memengaruhi kinerja seperti hit yang tidak setiap proyek dapat bertahan. Saya mengambil kesempatan ini untuk menyampaikan salam saya kepada para penyintas yang menggunakan bentuk skala pada perangkat seluler. Secara umum, cara yang paling suram dan putus asa, bukan pilihan kita.


Kami menggabungkan pendekatan


Jadi akhirnya sampai pada pilihan saya. Setelah mempelajari cara-cara yang mungkin, satu kombinasi menarik dibuat untuk saya. Relatif sederhana untuk diterapkan, layak untuk satu orang dalam volume dan pada saat yang sama cukup fungsional untuk memenuhi kebutuhan sebagian besar animasi garis waktu 2d.


Pertama, kami akan menggunakan animasi yang dikompilasi dalam swf agar tidak muncul dengan opsi pemutaran yang berbeda dan sulit menebak bagaimana flash player bekerja dari dalam, karena kami tidak dapat membahas semua kasus yang mungkin, tetapi kami mencoba menulis solusi umum. Juga, editor flash menghilangkan semua kembar yang digunakan dalam animasi, yang dengan cerdik mewakili, dalam swf yang dikompilasi, posisi telanjang dari fragmen.


Kedua, kami melarang penggunaan skrip dalam animasi. Ya, ini adalah persyaratan yang sangat sulit dan menyedihkan, tetapi saya tidak memiliki tim programmer untuk mengimplementasikan mesin virtual yang jujur โ€‹โ€‹dan perpustakaan standar yang harus saya tulis hampir secara membabi buta. Di sini, tentu saja, minus dari pendekatan saya terlihat terhadap pendekatan di mana aplikasi AIR digunakan, karena dalam yang terakhir beberapa skrip untuk pemutaran animasi internal dapat digunakan. Di sisi lain, itu tidak mengganggu pembuatan animasi yang bagus. Untuk mentransfer informasi khusus dari animasi ke game, Anda dapat menggunakan frame labels disebut, yang akan terlihat dari kode, dan juga menggantung acara khusus pada frame tertentu dalam bentuk fungsi callback yang sudah menggunakan runtime.


Ketiga, kita menyingkirkan penulisan rasterizer kita sendiri dari grafik vektor, untuk ketidakmampuan menulis satu untuk kasus umum, untuk mencakup semua opsi dan kemampuan vektor dalam flash. Sebagai gantinya, kami akan merasterisasi gambar ke Kompilasi (!) Menggunakan skrip jsfl. Pada saat yang sama, dengan bantuan skrip ini, kami akan mengoptimalkan grafik vektor kami dengan menggabungkan klip statis menjadi satu gambar, mengurangi atau meningkatkan gambar bitmap yang dihasilkan untuk kebutuhan kami: kualitas dan / atau kinerja. Di sini perlu juga mengingat berbagai opsi untuk kualitas / resolusi seni untuk perangkat dengan kerapatan piksel yang berbeda di layar (misalnya, seni HD dan SD).


Kesimpulan dari bagian lirik


Ini menyimpulkan bagian pertama artikel. Pada bagian kedua akan ada detail implementasi teknis, potongan kode, gambar (!), Optimasi, trik dan trik. Segera hadir di layar Anda, jangan lewatkan! Pada akhirnya, saya akan memberikan beberapa tautan menarik dengan informasi tentang penggunaan animasi flash dari kolega, untungnya dari ZeptoLab dan Playrix .

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


All Articles