Düzgün olmayan hareketli grafik boyutlarına sahip hareketli grafik sayfalarını nasıl işleyebilirim?


14

Düzgün olmayan hareketli grafik boyutlarına sahip bir hareketli grafik sayfası için, her bir hareketli hareketli grafik için sınırlayıcı dikdörtgenleri nasıl alabilirim (yani aşağıdaki görüntüdeki mavi kutular / yalnızca birkaç örnek çizdim)?

Ne belirlemek istiyorum: offset_x, offset_y, width, height

resim açıklamasını buraya girin

Şimdiye kadar, sadece tüm spriteların aynı boyutlara sahip sprite sayfaları kullandım . Bu durumda, sadece belirli bir hareketli grafiği almak için x ve y ofsetini belirtmeniz gerekir. Bununla birlikte, düzgün olmayan boyutlardaki sprite sayfaları için bu işe yaramaz.

EDIT: Yorumlar ve cevapları okuduktan sonra, wrt daha kapsayıcı hale getirmek için sorumu yeniden ifade ettim. bir oyunda sprite sayfası kullanma süreci. Daha önce, soru, insanların neden eşit olmayan boyutlarda sprite sayfaları ürettiklerini ve bununla nasıl başa çıkabileceğimi içeriyordu.


1
Bana göre hepsi aynı boyutlara sahip, renkle doldurulmayan alan sadece alfa sıfıra ayarlanmış piksellerdir.
Derek

Yanıtlar:


8

Özdeş olmayan boyutlardaki çoğu hareketli grafik sayfası genellikle hareketli grafiğin çapasının bulunduğu bir tür meta verilere sahiptir. Tam alfa piksellerini çıkarmak ve size bu verileri manuel olarak oluşturmamak için ihtiyacınız olan verileri vermek gibi birçok araç vardır.

Bu meta verilere sahip değilseniz, bunu kendiniz yazmanız gerekir. En doğru yol, sorunuzda söylediğiniz yöntemdir, sadece elle yapmaktır. Biraz zaman alabilir, ancak muhtemelen yeni sprite yapmaktan daha hızlıdır.


Bu - otomatik algılamaya dayanan yaklaşımların kullanımları olsa da, pratikte titiz ve hataya eğilimlidirler. Zaten sprite (sizin sprite kökenini meta verilere ihtiyaç yapmak o kadar ekstra veri çok fazla bir yük pek değil mi, bir kökene sahip?). Sanatçı her zaman bireysel sprite büyüklüğünün ne olduğunu uygulamanızdan daha iyi bilmelidir.
Steven Stadnicki

+1. Spritelar ile meta veriler sağlamanın bunu akılcı bir şekilde çözmesi garanti edilir .
Bartek Banachewicz

5

Her hareketli grafiğin sınırlayıcı dikdörtgenlerini bulmak için görüntü üzerinde analiz gerçekleştirebilir, sınırlayıcı dikdörtgenleri sıralayabilirsiniz (belki de minimum X, sonra Y'yi artırarak) ve hareketli grafik sayfasının çerçevelerine karşılık gelen bir dizi sınırlayıcı bölgeye sahip olacaksınız.

Bu işlem nispeten pahalı olabileceğinden, muhtemelen bunu çevrimdışı yapmak istersiniz, örneğin oyununuz için oluşturma işleminin bir parçası olarak. Daha sonra sınırlayıcı bölge bilgilerini karşılık gelen hareketli grafik sayfası görüntüsüyle depoladığınız bir dosyaya serileştirebilirsiniz. Çalışma zamanında hem görüntüyü hem de sınır tanım dosyasını yüklersiniz ve her bir hareketli grafiğe erişmek için gereken bilgilere sahip olursunuz.

Ancak bunu söylemek yapmaktan daha kolay. Esasen , makine görme sorunları olan özellik algılama ve özellikle damla algılama yapmak isteyeceksiniz . Ayrıca görüntüyü eşleştirebilir (siyah beyaza) ve bir kenar algılama tekniği kullanabilirsiniz . Bu tekniklerin ardındaki ilgili matematik, bu bağlantılarda benden çok daha iyi açıklanıyor ve bu matematiği kendiniz uygulamaktan hoşlanmıyorsanız, size yardımcı olabilecek birkaç kütüphane var. Aşağıdaki bağlantılar benim için en umut verici görünüyordu:


1
+1. Doğru hareketli grafik sınırlarını bulmak için bazı bilgisayar algılama / görüntü işleme becerileri gerektireceğini kabul ediyorum. Bazen kaplumbağa-kabuk animasyonuna bakarsanız, bu imkansız bile olabilir. Diğer animasyon karelerine göre doğru pozisyonu belirlemek zor olacak. Ve nedenine gelince : Büyük olasılıkla doku alanının optimum kullanımı nedeniyle. Ve genellikle koordinatlara sahip bir dosya böyle bir spritesheet ile birlikte verilmelidir, ancak bunu Google görsel aramadan alıyorsanız, bu bilgi eksik olabilir.
bummzack

İyi bir noktaya değindin: cevabım sprite kökenleri konusunu ele almıyor; sadece sıkı oturan sınırlayıcı dikdörtgenler bulmaya yol açacak ve üniform olmayan sprite içeren bir tabaka için, her çerçevenin kökenini bilmek oldukça önemlidir. Bazı (muhtemelen etki alanına özgü) varsayımlar yapmadığınız sürece, örneğin başlangıç ​​noktasının her zaman (genişlik / 2, maksimum Y) veya başka bir şey olmayacağı sürece bunu yapmak zor olacaktır.

4

Bu tür üniform olmayan sprite sayfası için kendi aracımı yaptım. Ofsetlerin düzenlenmesine izin verir, vb. İşte size bir fikir vermek için bir ekran görüntüsü:

resim açıklamasını buraya girin


Düzgün olmayan bir animasyondan yalnızca bir animasyon içeren tek tip bir sprite sayfası oluşturduğunuz anlaşılıyor mu? Yoksa bunu yanlış mı yorumluyorum?
Ben

Hayır, düzgün olmayan bir sprite sayfası açıyorum ve spriteların etrafına bir dikdörtgen çiziyorum (otomatik olarak doğru boyuta küçülüyor). Bir kez ive her animasyonu oynayabilir ve ihtiyaçlarımı göre ofset ayarlayabilirsiniz ki tekrarlayarak bir animasyon oluşturdu.
Anonymouse

Orada yaptığınız çok temiz bir araç gibi görünüyor. Aracı paylaşmak ister misiniz?
eckyputrady

@eckyputrady, im üzgünüm ama tam olmaktan uzak ama başka bir araç (ki temelde bana ilham) öneririz. Burada bulabilirsiniz: colourclash.com/sprite_buddy/sprite_buddy.html
Anonymouse

0

Tekstüre göz atın

http://www.texturepacker.com/

Bunun gibi bir dosya çıkarır (tercih ettiğiniz ayarlara bağlı olarak)

    {
    "filename": "image_front_1",
    "frame": {"x":1,"y":160,"w":34,"h":52},
    "rotated": false,
    "trimmed": false,
    "spriteSourceSize": {"x":0,"y":2,"w":36,"h":40},
    "sourceSize": {"w":36,"h":40}
},
{
    "filename": "image_front_2.png",
    "frame": {"x":36,"y":160,"w":34,"h":52},
    "rotated": false,
    "trimmed": false,
    "spriteSourceSize": {"x":0,"y":0,"w":36,"h":42},
    "sourceSize": {"w":36,"h":42}
},
{
    "filename": "image_front_3.png",
    "frame": {"x":71,"y":160,"w":34,"h":52},
    "rotated": false,
    "trimmed": false,
    "spriteSourceSize": {"x":0,"y":0,"w":34,"h":52},
    "sourceSize": {"w":36,"h":42}
},
{
    "filename": "image_front_4.png",
    "frame": {"x":106,"y":160,"w":34,"h":52},
    "rotated": false,
    "trimmed": false,
    "spriteSourceSize": {"x":0,"y":0,"w":34,"h":52},
    "sourceSize": {"w":36,"h":42}
}

Bu verileri kullanarak, ayrı ayrı dikdörtgenleri görüntüden kolayca alabilirsiniz.


Bu soru hangi teknolojiyi kullanacak. Sadece bir araca bir bağlantı ve onun çıktısının bir örneği ile cevap vermek bence yeterli değil.
MichaelHouse

-1

spritebuddy.com benim için harika çalıştı. Sitenin kendisinde herhangi bir yardım bulunamadı, ancak bu Google Grupları gönderisi bunu gerçekten iyi açıklıyor. Spritelarınızın sınırlarını otomatik olarak tahmin eder, ayarlamanıza izin verir ve onları animasyon dizileri halinde düzenlemenizi sağlar. Sonra tüm bunlar için JSON veya XML'de bir meta veri dosyası verir. Sonra tek yapmanız gereken doğru sınırlayıcı dikdörtgenleri almak için oyununuzdaki veri dosyasını ayrıştırmaktır.


1
Bu soru hangi teknolojiyi kullanacak. Ayrıca, bu araç yorumlardan birinde önerildi.
MichaelHouse

Cevabımı güncelledim, ancak OP'nin sorusuna cevap vermediğini kabul etmiyorum: "Belirlemek istediğim şey: offset_x, ofset_y, genişlik, yükseklik." Bunun oyun çalışma zamanında (çok kötü performans göstermeyecek) veya daha önce olması gerekip gerekmediği belirtilmemiştir. "DÜZENLE: [...] Ben daha kapsayıcı wrt yapmak için sorum yeniden. Ben bir oyunda bir spritesheet kullanma gerçek süreci, bu benim süreç. Ben spritebuddy kullanarak uygun JSON dosyası oluşturmak sonra ihtiyacım veri elde etmek için benim oyun ayrıştırmak.
CletusW

1
@CletusW: İyi cevaplar, bu aracın işleminiz için neden bu kadar iyi çalıştığını, ne işe yaradığını ve nasıl yardımcı olduğunu açıklar. En sevdiğiniz örneğe bağlarsanız, bu sadece bir bonus, cevabın eti değil.
Sean Middleditch
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.