Flash oyunlar için oluşturma performansı


11

Ben özel flaş BitmapDataçerçeve vs vs yerli flaş render hakkında SO okuyordu ve bazı cevaplar biraz çelişkili, bu yüzden merak ediyordum:

  1. Özel Bitmap arabellek yoluna gitmek genellikle en iyi uygulama mıdır yoksa flash motoruna oluşturma işlemini bırakmak en iyisidir?
  2. MovieClipSpriteların aksine vektör animasyonlarını kullanıyorsanız , bu yukarıdaki cevabı değiştirir mi?
  3. Eğer öyleyse hareketli grafik tabanlı animasyonlar kullanmak en iyi yöntem midir?

(Bu fark yaratırsa Flash 10'u hedefliyorum)

Yanıtlar:


14

1. Genel olarak en iyi uygulama yoktur.

Oyununuzda çok sayıda (karmaşık şekilli) eleman, parçacık vb. Varsa, bitmap tampon yaklaşımı çok daha hızlı olacaktır. Bitmap tamponu, spritelarınızın karmaşıklığı arttıkça daha iyi ölçeklenir. Vektör oluşturucu , daha karmaşık şekiller veya ara (şekil arası) animasyonlarla daha yavaş hale gelir, ancak başka faydaları da vardır:

  • Varlıklarınızı özgürce ölçeklendirebilir veya hatta kalite kaybı olmadan sahneyi yakınlaştırabilirsiniz.
  • Rotasyon veya eğriltme gibi diğer dönüşümlerin vektör grafiklerinde yapılması çok daha kolay olacaktır

Sonuç olarak, ne tür bir oyun inşa ettiğinize bağlı.

2. Bitmap hareketli grafik sayfaları yerine MovieClip'leri kullanma

Sanırım AS3 Sprite sınıfı değil, "bitmap sprite-sheets" demek istediniz ?

Bu gerçekten bir fark yaratmıyor. MovieClip tabanlı animasyonlarınızı her zaman animasyonlu bitmap'lere dönüştürebilirsiniz. Ya manuel olarak, filmi çerçevelere dışa aktararak ve bunları bir çalışma sayfasına dönüştürerek ya da dinamik olarak, çalışma zamanında MovieClip'inizden bir çalışma sayfası oluşturarak. İşte bunu nasıl yapacağım:

  1. MovieClip ve stop()bunun bir örneğini oluşturun .
  2. new BitmapDataMovieclip ile aynı genişliğe ve yüksekliğe sahip bir nesne oluşturun .
  3. MovieClip'i BitmapData öğesine dönüştürmek için draw () yöntemini kullanın .
  4. BitmapData nesnesini bir Array veya Vector içinde saklayın.
  5. MovieClip'inizin bir sonraki karesine gidin ve Adım 2 - 4'ü tekrarlayın, bunu MovieClip'inizin son karesine ulaşıncaya kadar yapın. MovieClip karelerinizin maksimum genişliği ve maksimum yüksekliği ile iki değişkeni güncellemek de iyi bir fikirdir (çünkü bunlar çerçeveden çerçeveye değişebilir).
  6. Artık depolanan tüm BitmapData Nesnelerini bir Sprite-Sheet halinde birleştirebilirsiniz ( BitmapData.copyPixels () kullanın )

3. Sprite tabanlı animasyonlar

İlk sorunuzun cevabında belirtildiği gibi, bunun kesin bir cevabı yoktur. Nesnelerinizle çok fazla dönüşüm yapmanız gerekiyorsa, örn. ölçeklendirme ve döndürme , flash yerel oluşturucuyu kullanarak muhtemelen daha iyi durumda olursunuz. Eğer var ise (elle veya dinamik olarak)-çarşaf sprite için pişmiş olabilir animasyonlar önceden tanımlanmış, ve aynı anda sprite yüzlerce görüntülemeniz gerekiyorsa, o zaman bir bitmap-render motoru için gidin.


Flash, oluşturulması için donanım hızlandırması kullanmaya başladığında, bir copyPixel oluşturucu muhtemelen yerel oluşturucudan daha yavaş olacaktır.
Bart van Heukelom

6

Sprite kullanarak raster tabanlı bir oyun oluşturuyorsanız, BitmapData kullanarak özel bir oluşturma çözümü oluşturmaya devam edin. Vektör tabanlı bir oyun oluşturuyorsanız, MovieClips kullanarak yerleşik animasyon mekanizmalarını kullanmaya devam edin.

Özel bir oluşturma çözümü oluşturmaya devam ederseniz, ihtiyacınız olanı başarmak için yalnızca ActionScript'i kullanarak kendinizi Flash'tan hemen ayırırsınız. Flixel motoru bu yöntemi kullanır ve oldukça güzel. Yine de kendi motorumu sıfırdan yazmayı tercih ediyorum, ama fikri anladınız.

Yerleşik Flash animasyon mekanizmalarına gitmek, vektör tabanlı oyunlar için en iyi sonucu verir, çünkü kütüphane varlıklarınızı MovieClips olarak kolayca oluşturabilir ve daha sonra isteğe bağlı olarak ActionScript'te başlatabilirsiniz. Animasyonu işlemek ve hareketli grafiğin konumunu buna göre taşımak için film kliplerini sağlanan zaman çizelgesini kullanırsınız. Tüm BattleOn! Adventure Quest Worlds gibi oyunlar bu yöntemi kullanır. Ayrıca güzel görünüyor.

Son sorunuzun, vektör animasyonlar için MovieClip sınıfı yerine Sprite sınıfını kullanmaya atıfta bulunduğunu varsayıyorum. Sprite, zaman çizelgesi olmayan bir MovieClip'tir, bu nedenle animasyonların sizin için yönetilmesinin kolaylığını kaybedersiniz.


3

Örtüşmenin daha hızlı olduğuna inanılan yaygın bir inanç olsa da, bunu kanıtlayan bir ölçüt görmedim. Bazı geliştiriciler sadece blitting'i tercih ediyor çünkü Flash'a genel bir sanal makine gibi davranmalarını ve kendilerini oluşturmayı kontrol etmelerini sağlıyor. Bununla birlikte, yerleşik görüntüleme listesini (yaptığım) beğenirseniz, Flash, yüksek kare hızlarında yüzlerce ekran DisplayObjects'e (örn. MovieClips, Sprites, Bitmaps) mutlu bir şekilde hareket edebilir, ölçekleyebilir, döndürebilir ve güzel efektler uygulayabilir. boyutları oldukça küçük olduğu sürece, örneğin her biri 200x200 pikselden az. MovieClips'i vektör kullanmadan kullanabilirsiniz. Çoğu oyun hangi sistemi kullanırlarsa kullanırlar. Ancak, özellikle bir piksel sanatçısı yerine bir Flash uzmanı tasarımcıyla çalışıyorsanız, zaman çizelgesindeki bitmap varlıklarını düzenlemek ve canlandırmak yararlı olabilir. Sahne kalitesini DÜŞÜK olarak ayarlayarak, daha çirkin dönüşümler pahasına çok daha iyi performans elde edersiniz. Flash, ekran dışında hiçbir nesneyi oluşturmaz, böylece sizi yavaşlatmazlar.

Flash'ın yavaşlayabileceği yer çok büyük bitmap'leri hareket ettiriyor ve dönüştürüyor - örneğin çok büyük bir kaydırma seviyeniz veya çok sayıda paralaks katmanınız varsa. Ekran dışı bir arabellekten arka planı örterken oyun nesneleriniz için MovieClip'leri kullanmanın hibrit bir yaklaşımı daha hızlı olabilir ve yine de standart Sprite ve MovieClip'lerin kullanım kolaylığına izin verirken sonsuz derecede yüksek seviyelere sahip olmanızı sağlar.


Karmaşık vektör şekilleri de performans üzerinde önemli bir etkiye sahip olabilir. Çok sayıda degradeyle animasyonlu MovieClip'leriniz varsa ve vektör şekillerinizin ayrıntı düzeyine dikkat etmezseniz, bir bitmapten çok daha yavaş çizer.
bummzack

MovieClips'i vektör kullanmadan kullanabilirsiniz. Çoğu oyun hangi sistemi kullanırlarsa kullanırlar. Ancak, özellikle bir piksel sanatçısı yerine bir Flash uzmanı tasarımcıyla çalışıyorsanız, zaman çizelgesindeki bitmap varlıklarını düzenlemek ve canlandırmak yararlı olabilir.
Iain

Evet flash oyunlar için, HUD ve oyuncu sprite birkaç şey dışında, vektör ve her karede flaş tarafından oluşturulan bir şey için degradeleri kullanmamanızı tavsiye ederim. Degradeler performansı hızlı yerler.
AttackingHobo

Bazı oluşturma ve güncelleme kriterleri: 8bitrocket.com/2007/12/23/…
Max Dohme
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.