Oyun yükleme süresi ile oyun yükleme süresi arasındaki oran


9

Rastgele bir labirentin olduğu bir oyun geliştiriyorum .
Labirent gizlenen bazı AI yaratıklar var. Ve labirentine göre bir yol izlemelerini istiyorum.

Şimdi bunu uygulamak için iki olasılık var, ilk yöntem (kullandığım), labirent oluşturulduktan sonra birkaç aranan gizlenen yolu hesaplamaktır.
İkincisi, bir yaratık gizlenmeye başladığında hesaplanması gereken bir yolu hesaplamaktır.

Ana kaygım yükleme süreleri. Labirent oluşturmada birçok yol hesaplarsam, ön yükleme süresi biraz uzundur, bu yüzden gerektiğinde bunları hesaplamayı düşündüm.
Şu anda oyun 'ağır' değil, bu yüzden orta oyundaki yolları hesaplamak fark edilmez, ancak korkarım bir kez daha karmaşık hale gelecektir.

Herhangi bir öneri, yorum, görüş, yardımcı olacaktır.

Düzenle:

Şimdilik gelince p, önceden hesaplanmış yolların sayısı olsun , yaratıkların mevcut bir yol yerine yeni bir yol 1/palma olasılığı vardır (bu bir yol hesaplama anlamına gelir). Bir yaratık, patika elbette tamamen hesaplanana kadar devriyesine başlamaz, bu yüzden süreçte öldürülmesi konusunda endişelenmenize gerek yoktur.


8
Bu noktada, ön optimizasyon olurdu. Bir sorun olana kadar olduğu gibi bırakırım.
John McDonald

3
Ve @JohnMcDonald ile biraz zil yapmak için, eğer bu yolları oyunun ortasında hesaplayabilir ve farkedilemezse, yükleme sırasında ne kadar katkıda bulunan bir faktör olabilirler?
James

Yanıtlar:


6

BerickCook fikri doğru ifade etti. Şimdi düzgün çalışıyorlarsa hesaplamaları olduğu yerde bırakın.

Hesaplamayı daha önce yapabilirseniz ve oyunun ortasında onlara ihtiyacınız olmayacağından eminseniz, daha önce yapın. Yükledikten sonra başka yapın. Oyun sırasında hesaplama farkedilmezse, orada yapabilirsiniz. Bir noktada karmaşıklık gelişir ve hesaplamalar çok ağırlaşırsa optimizasyona başlayın.

Ama bir şey: eğer hesaplarınız oyunun ortasında oynanacak şekilde uygulanmışsa, bunları her zaman yükleme sırasında gerçekleştirilmeye zorlayabilirsiniz.

Çok sayıda çözüm var:

  • seviye oluşturma / yükleme sırasında yolları hesaplama / yükleme
  • yolları hesaplamak için ikinci bir iş parçacığı kullanma
  • algoritmalarınızı optimize edin
  • diş açmaya erişiminiz yoksa, kesilebilir bir sistem kullanın.

Bir kitlesel pazar oyununda son seçeneği gördüm ve kullandım. Hesaplamanın devam etmesi için gereken tüm verileri düzgün bir şekilde kaydettiğinizden emin olun ve hesaplama sırasında kalan süreyi / işlemleri düzenli olarak kontrol edin.

Durumunuza bağlı olarak, kesilebilir sistem hesaplama sona ermeden önce kullanılabilecek ön ve kısmi çözümler verebilir.


Düzenleme : Cevaplama @Keeper

"Kesilebilir algoritma" yalnızca sahip olduğumuz kısıtlamalar nedeniyle kullanışlıdır. Temelde çok iş parçacıklığından yoksun kaldık.

Bir noktada, yapay zekanın çoklu sözlüklere dayalı büyük miktarlarda hareket hesaplaması gereken bir oyunumuz vardı. Bu hesaplama sırasında, tüm animasyonlar duracaktır çünkü sözlükler daha fazla veriyle genişletildi ve oyun çok oyunculu (AI'nın oyuncunun hamleleri için bile etkileşimde bulunması gerektiğinde) uyarlandığında verileri tutan veri seti değiştirildi ve daha az verimli oldu. Oyun döngüsü için yalnızca bir iş parçacığımız vardı (zorunlu olan çoklu platform kodunun tüm desteklenen platformlarda çalışması gerekir). Bu noktada, hesaplama algoritmasını kırmaya karar verdik, böylece onu kesebildik. Bu nedenle, değişkenler kaydedilemediği için yürürlükteki özyinelemeli sistemi kullanamadık. İşlevler, üst ve alt nesnelere gerekli tüm değişkenleri ve işaretçileri tutan nesnelerle değiştirildi. Yapmıyorum

  • mevcut hesaplamalarının durumunu kaydet
  • bir döngünün sonunda ya da bir döngü sırasında kesme (bir alt nesne kesildiğinde)
  • zaman dolduğunda çık
  • sağ dizinde bir döngüyü yeniden başlatmayı ya da şu anda alt kümesinin en üstünde bulunan alt nesneyi çağırmayı durdurduğu yerden devam edin.
  • hesaplama kesilirse her şeyi temizle
  • en iyi kısmi sonucu verir.

Sadece en pahalı operasyonlar ayrı nesnelere bölündü ve hesaplamaları durdurabileceğimiz doğru yerleri bulmak biraz zaman aldı, ama sonunda çok iyi çalışıyor.

Performansı kaybettik, ancak animasyonlar tüm platformlarda sorunsuz bir şekilde çalıştığından, algılanan performans kullanıcı için çok daha iyiydi, daha sonra tüm platformlar dalgalı animasyonlardan veya donmalardan muzdarip olmadan daha büyük sözlükleri kullanabilir. Ayrıca bu, daha sonra ihtiyaç duyduğumuzda birden fazla örneği paralel olarak çalıştırmamızı sağladı.

Tabii ki şimdi iPhone ve iPad'de oyunun buna ihtiyacı yok, ikinci bir iplik kullanmak ideal olacaktır. Ama kodun hala orada olduğundan şüpheleniyorum.


Teşekkürler, kulağa çok ilginç geliyor. "Kesilebilir sistem" kavramı hakkında ayrıntılı bilgi verir misiniz (neden ve nasıl). (googling o kadar yararlı değildi ..). Soruya bazı ayrıntılar ekleyeceğim.
Kaleci

@Kalıcı Umarım kesilebilir kısım hakkındaki sorunuzu cevapladım. Bu, ama yapılacak bir acıdır ve çoğu modern sistemde geçerli değildir.
Coyote

Şimdilik bu yöntemi kullanmayacak olsam da gözlerimi yeni bir şeye açtın. Cevabınız kabul edilmeyi hak ediyor.
Kaleci

8

Şimdilik, oyunun ortasındaki yolları hesaplamak farkedilemez olduğundan, bu ideal bir yaklaşımdır. Oyunların hesaplamalar tarafından kesintiye uğradığı noktaya geldiğinde / olduğunda, seviye yüklenmeden önce yolları per-hesaplama için değiştirin.

Daha uzun ilk yükleme süreleri affedilebilir, ancak oyun sırasında rastgele FPS dalgalanmaları genellikle değildir.


2

İhtiyacınız varsa bir olasılık, neredeyse her PC'nin bu günlerde birden fazla CPU çekirdeği olduğu için hesaplamaları ikinci bir iş parçacığına taşımaktır.

Temel süreç şöyle olacaktır:

  • Bir yaratık bir yol istediğinde, isteği bir iş parçacığı güvenli istek kuyruğuna ekleyin ve iş parçacığını işaret edin.
  • Yaratık, iş parçacığının girdiyi bu kuyruktan çıkarmasını, işlemesini ve tamamlanmış bir listeye koymasını beklerken boş durur.
  • Her çerçeve tamamlanmış listeyi ana iş parçacığından kontrol eder ve tamamlanmış yolları yaratıklara atar.

Birkaç ekstra durum için de dikkat etmelisiniz (örneğin, yaratık, istek işlenmeden önce ölürse ne olur).


2
İş parçacığı oluşturmak istemiyorsanız, yolunuzu aşamalı olarak da hesaplayabilirsiniz (örn. Her karede bazı adımları hesaplayın).
bummzack
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.