Postmortem: Playdate shoot-em-up Hyper Meteor


Playdate duyurulduğunda, sevimli sarı el bilgisayarı beni hemen büyüledi, benzersiz siyah beyaz ekran ilgimi çekti ve her türlü yaratıcı olasılığı açan krank konusunda heyecanlandım.

Ancak Playdate ile ilgili teknik olarak heyecan verici bir şey de vardı. Modern platformların geliştirilmesi her platformdan daha kolaydır, ancak hepsinde aynı sıkıcı CPU/GPU mimarisi vardır. Nintendo’nun Gameboy ve DS günlerinden beri, oyunlarımızı tasarlamamızı ve kodumuzu donanımlarının belirli tuhaflıkları ve kısıtlamaları etrafında yapılandırmamızı isteyen bir konsol olmadı. Playdate için kod yazma fikri, yaratıcı yönler kadar benim için heyecan vericiydi.

Vertex Pop oluşturuldu Hiper Meteor Playdate için, ilk oyun sezonunun bir parçası olarak. Hiper Meteor geminizi çarparak meteor dalgalarına ve düşman güçlere saldırdığınız bir arcade shoot-em-up’tır. Teknik olarak, pastamızı yiyip onu da yemek istedik: baştan sona ipeksi pürüzsüz bir kare hızı kritikti, ama aynı anda ekranda çok sayıda düşman fırlatmak da önemliydi.

Bu makale hem Playdate için geliştirme kılavuzu hem de hedeflerimize nasıl ulaştığımızı detaylandıran teknik bir otopsi işlevi görüyor. hiper meteorolojir.

Playdate için dikkate değer donanım özellikleri şunlardır:

  • 180 MHz ARM CPU (FPU ile)
  • 16 MB RAM
  • 400×240 1 bit ekran

Geliştirmeye başladığımızda, cihazın ne kadar güçlü olduğuna dair iyi bir fikrim yoktu. Kağıt üzerinde 180 MHz oldukça yavaş geliyordu ve RAM’i en son ne zaman ölçtünüz? megabayt? Rakamların somut olarak ne anlama geldiğini anlamak zordu, özellikle mevcut oyunlara atıfta bulunmadan, bu yüzden ihtiyatlı bir şekilde tasarladık ve kapsam verdik.

Ancak, Playdate’in göründüğünden çok daha güçlü olduğunu çabucak bulduk. Geliştirme sürecimizde biraz değişiklik yaparak, yaratıcı hedeflerimize boş alan bırakarak ulaşabildik.

Bir dil seçmek

Vermeniz gereken ilk kararlardan biri oyununuzun kodunu Lua’da mı yoksa C’de mi yazacağınızdır. (Mükemmel) SDK belgeleri Lua’yı şiddetle teşvik ediyor, ancak ben C’yi kullanmayı seçtim.

Lua girilmesi kolay bir dildir. Esnek ve sezgiseldir ve Panic, hareketli grafikler, çarpışma yanıtı, geometri, yol bulma, kullanıcı arayüzü ve çok daha fazlası için işlevsellik dahil olmak üzere oyuna özel yardımcı sınıflardan oluşan cömert bir koleksiyon sunar. Lua, Playdate’e başlamanın kesinlikle en hızlı yoludur.

Dezavantajı, özellikle çöp toplandığından, genel olarak yavaş bir dil olmasıdır. Oyununuz karmaşıklık içinde büyüdükçe performans bir sorun haline gelecektir. Lua hala harika bir seçim, oyununuzun kapsamı büyürse optimizasyon için biraz zaman harcamayı bekleyin. Belgelerde bazı harika ipuçları var!

Playdate’i buldum C API’si zarif, güçlü ve birlikte çalışması keyifli olmak. Ama motordan çok “çerçeve”. API; girdi, grafik, ses, dosya G/Ç vb. için işlevsellik sunar, ancak oyun kodu söz konusu olduğunda kendi başınızasınız.

C kullanmayı seçerseniz, gerçekten “metale” yazıyorsunuz ve Playdate OS’den neredeyse hiçbir sistem yükü olmadan, CPU inanılmaz derecede hızlı. Buna rağmen Hiper Meteor Yoğun bir oyun, optimizasyon hakkında düşünmem hiç gerekmedi.

Bazı insanlar için “her şeyi sıfırdan yazmak” bir anlaşma bozucudur ve bu tamamen mantıklıdır. Ama diğerleri için eğlencenin bir parçası. Kesinlikle ikinci kategoriye giriyorum, oyunun her bölümünü vec2 yapısına kadar kodlamaktan mutluluk duyuyorum. Ayrıca C yazmayı eğlenceli ve özgürleştirici buldum. C++/C# ile aşina iseniz oldukça hızlı bir şekilde adapte olacaksınız.

GPU’su mu? Ne GPU’su?

Playdate’de işleme, muhtemelen alıştığınızdan biraz farklıdır. Playdate’in özel bir GPU’su veya herhangi bir donanım hızlandırmalı grafiği yoktur. Her şey CPU üzerinde gerçekleştirilir.

Neyse ki, yerel çizim API’leri gerçekten hızlıdır. Hiper Meteor düzinelerce sprite, parçacık, arka plan katmanı, kullanıcı arayüzü vb. çizer ve Playdate ter dökmez. Ancak, bitmap dönüşümleri (ölçeklendirme ve döndürme gibi) gerçek zamanlı olarak performans göstermez.

Şans eseri, en önemli gereksinimlerimiz arasında Hiper Meteor bir sürü döndürülmüş sprite vardı. Bunu başarmak için, her hareketli grafiği gereken her açıda önceden oluşturmayı ve başlatma sırasında bitmapler olarak yüklemeyi seçtik.

Bunun oyunun çalışmasını sağlamanın kritik bir parçası olacağını bilerek, sağlam bir varlık hattı oluşturmak için önceden zaman harcadım. İşte nasıl çalıştığı:

  • Tüm görseller vektör tabanlıdır, Sketch kullanılarak oluşturulur ve SVG dosyaları olarak dışa aktarılır
  • Ardından, İşleme’de yazılan bir komut dosyası her SVG dosyasını yükler, onları döndürür ve rasterleştirir (kenar yumuşatma devre dışıyken) ve işleme sonrası efektleri uygular (dolgu desenleri ve anahatlar gibi)
  • Son olarak, bu tek kare görüntüler hareketli grafik sayfalarında derlenir
Hyper Meteor'dan örnek hareketli grafik sayfası
Hyper Meteor’dan örnek hareketli grafik sayfası

Lansman sırasında 3000’den fazla bitmap yükledik. Bu kulağa oldukça saçma gelse de, aslında Playdate için mükemmel bir yaklaşım. Oyun sadece birkaç saniyede yükleniyor ve bitmap’ler piksel başına 2 bit olduğundan, 16 MB RAM fazlasıyla yeterli.

Bir uyarı, Playdate’in görüntüleri hızlı bir şekilde yükleyebilmesine rağmen, diskteki dosyaları sorgulamada oldukça yavaş olmasıdır. Bu sorunu çözmek için, birden çok bitmap’i tek bir dosyada paketlemek ve dosya arama sayısını azaltmak için BitmapTable s’yi (Playdate’nin hareketli grafik sayfası terimi) kullanabilirsiniz.

Son olarak, gereksinimleri daha az olan oyunlar için, ek yükleme süresi pahasına playdate->graphics->transformedBitmap’i kullanarak bitmap’leri başlatma sırasında oluşturabilir ve önbelleğe alabilirsiniz.

Gelişmiş Grafik Efektleri

Bitmap’ler ve önceden oluşturulmuş grafikler hakkında konuştuğumuza göre, Playdate’in daha gelişmiş grafik özelliklerini tartışmaya değer. Oluşturmanızın çoğunu bitmap kullanarak yapmanızı önersem de, Playdate estetiğini gerçekten öne çıkaran şey bu tekniklerdir.

bu Geometri çizim işlevleri inanılmaz bir raster kalitesine sahip olmakla birlikte oldukça performanslıdır. Çizgi, üçgen, dikdörtgen, elips ve yay çizimi için, çizgi genişliği parametreleri ve hatta uç kapak stilleri için destek içerirler.

Geometri işlevleri de destekler Dolgu Desenleri, playdate- >graphics->setColorToPattern öğesini çağırarak ayarlayın. Dolgu rengini 8×8 bitmap desenine ayarlayarak Playdate’in ekranında çarpıcı görünen renk taklidi efektleri yaratır.

Karıştırma modları 1 bitlik bir ekranda gerçekten anlamlı değil, ancak Playdate bazı eğlenceli kaynak/hedef piksel manipülasyonları gerçekleştirebilir. Bitmap desteği Çizim Modlarıbasit maskelerden ( kDrawModeFillWhite ) ters çevrilmiş renklere kadar
( kDrawModeInverted ) ikili operatörlere ( kDrawModeXOR ve kDrawModeNXOR ). Geometri, hedef piksel rengini tersine çeviren kColorXOR olarak ayarlanmış renkle çizilebilir.

Son olarak, her grafik işlevi bir şablon maskeleme efektleri oluşturmak için kullanabileceğiniz parametre. Şablonlar, tıpkı ekran gibi LCDBitmap’lerdir, böylece şablonunuzu oluşturmak için aynı çizim işlevlerinin hepsini kullanabilirsiniz. Siyah ve şeffaf pikseller atılırken beyaz pikseller geçer. CPU stencil kullanımında yapılan her şey oldukça esnek olduğundan, render geçişlerinizi veya bunun gibi şeyleri optimize etme konusunda endişelenmenize gerek yok.

boyunca bu teknikleri denemek için çok zaman harcadım. Hiper Meteor’gelişimi. Aşırıya kaçmak için cazip gelsem de, bu efektleri kullanmak için birkaç yüksek etkili an (akıllı bomba aktivasyonu ve oyuncu ölümü gibi) seçtik.

Çözüm

oluşturma Hiper Meteor hem teknik hem de yaratıcı bir bakış açısıyla inanılmaz derecede ödüllendiriciydi. Playdate’de küçük kapsamlı oyunları ve deneysel tasarımı davet eden bir şey var. Umarım bu makale yardımcı olmuştur ve kendi Playdate oyunlarınızı yapmanız için size ilham verir. Onları oynamak için sabırsızlanıyorum!


    Kaynak : https://www.gamedeveloper.com/playdate-launch/postmortem-playdate-shoot-em-up-hyper-meteor

    Yorum yapın

    Geçici Mail pdf kitap indir instagram takipçi satın al tiktok takipçi satın al