Untuk spritesheet dengan dimensi sprite yang tidak seragam , bagaimana saya bisa mendapatkan bounding-rectangles untuk setiap sprite individu (yaitu kotak biru pada gambar berikut / saya hanya menggambar beberapa contoh)?
Yang ingin saya tentukan adalah: offset_x, offset_y, width, height
Sejauh ini, saya hanya menggunakan spritesheets yang memiliki semua sprite identik dimensi yang . Dalam hal ini, kita hanya perlu menentukan offset x dan y untuk mendapatkan sprite tertentu. Namun, untuk spritesheet dari dimensi yang tidak seragam ini tidak berfungsi.
EDIT: Setelah membaca komentar dan jawaban, saya mengulangi pertanyaan saya untuk membuatnya lebih inklusif. proses aktual menggunakan spritesheet dalam game. Sebelumnya, pertanyaan tersebut berisi poin mengapa orang menghasilkan spritesheets dari dimensi yang tidak seragam dan bagaimana saya bisa mengatasinya.
Jawaban:
Kebanyakan sprite sheet dari dimensi yang tidak identik biasanya memiliki beberapa jenis data meta dengan tempat jangkar sprite tersebut berada. Ada banyak alat yang melakukan hal-hal seperti menghapus piksel alfa penuh dan memberi Anda data yang Anda butuhkan sehingga data ini tidak dihasilkan secara manual.
Jika Anda tidak memiliki meta data ini, Anda harus membuatnya sendiri. Cara yang paling akurat adalah yang Anda katakan dalam pertanyaan Anda, yaitu melakukannya dengan tangan. Mungkin perlu waktu, tapi mungkin lebih cepat daripada membuat sprite baru.
sumber
+1
. Menyediakan metadata dengan sprite dijamin untuk menyelesaikannya secara masuk akal .Anda dapat melakukan analisis pada gambar untuk menemukan persegi panjang pembatas dari setiap sprite, mengurutkannya persegi panjang pembatas (mungkin dengan meningkatkan minimum X, lalu Y) dan Anda akan memiliki satu set wilayah pembatas yang sesuai dengan bingkai dari lembar sprite.
Karena proses ini bisa relatif mahal, Anda mungkin ingin melakukan ini secara offline, misalnya sebagai bagian dari proses pembuatan untuk permainan Anda. Anda kemudian dapat membuat serial informasi wilayah pembatas menjadi file yang Anda simpan dengan gambar sprite sheet yang sesuai. Saat runtime Anda memuat gambar dan file definisi batas dan Anda memiliki informasi yang Anda butuhkan untuk mengakses setiap sprite individu.
Itu lebih mudah diucapkan daripada dilakukan. Pada dasarnya Anda akan ingin melakukan deteksi fitur dan deteksi gumpalan khusus yang merupakan masalah penglihatan mesin. Anda juga bisa mengubah gambar (menjadi hitam dan putih) dan menggunakan teknik deteksi tepi . Matematika yang relevan di balik teknik-teknik itu dijelaskan jauh lebih baik pada tautan-tautan itu daripada yang saya bisa, dan dalam kasus di mana Anda tidak merasa sanggup mengimplementasikan matematika itu sendiri, ada beberapa perpustakaan yang tersedia yang dapat membantu Anda. Rangkaian tautan berikut ini tampaknya yang paling menjanjikan bagi saya:
sumber
Saya membuat alat sendiri untuk spritesheet yang tidak seragam. Ini memungkinkan pengeditan offset, dan sebagainya. Berikut screenshot untuk memberi Anda ide:
sumber
Lihat pembungkus teks
http://www.texturepacker.com/
Ini menghasilkan file seperti ini (tergantung pada pengaturan yang Anda pilih)
Dengan menggunakan data ini, Anda dapat dengan mudah mengambil persegi panjang terpisah dari gambar.
sumber
spritebuddy.com telah bekerja sangat baik untuk saya. Tidak dapat menemukan bantuan di situs itu sendiri, tetapi pos Google Groups ini menjelaskan dengan sangat baik. Secara otomatis menebak batas-batas untuk sprite Anda, memungkinkan Anda menyesuaikannya, DAN memungkinkan Anda mengaturnya menjadi urutan animasi. Kemudian ia memuntahkan file metadata untuk semua ini dalam JSON atau XML. Maka yang harus Anda lakukan adalah mem-parsing file data itu dalam gim Anda untuk mendapatkan empat persegi panjang pembatas yang benar.
sumber