Sean ve Blue'nun fiziksel platform sınırlamaları ve yanlısı kararlar konusundaki mükemmel cevapları ile bir yorumu farklı bir yaklaşımla genişleteceğim:
Neden Tamamen Sadece Tamamen Yeniden Yükleyiniz?
Böylece loadLevel () çağrınız mükemmel çalışıyor, yay! Düz bir dosya bilgisinde akış yaparsınız ve dünyayı temel alarak, nesneler yaratarak ve ilerledikçe dokuları ve sesleri yükleyerek ilerlersiniz. Sonra, oyunun başlaması için hepsi bittiğinde - ya da "yeterince" bittiğinde, startPlay () 'i çağırırsınız ve dünyanız ortaya çıkar ve müziğiniz çalmaya başlar.
Şimdi seviye bittiğinde veya menüye kaçtığınızda veya oyundan çıktığınızda, sorunsuz bir deneyim sağlamak için elinizde tuttuğunuz tüm kaynakları ve belleği boşaltmak için unloadLevel () işlevini çağırırsınız.
Şimdi, "Seviyeyi Yeniden Başlat" özelliği eklemek istediğinizde ne olur? İyi...
unloadLevel(currentLevel);
loadLevel(currentLevel);
startPlay();
Ve bitti! Yeni bir kod yok, sadece birkaç basit fonksiyon çağırıyor ve zaten hepsini yazdınız ve hata ayıkladınız, şimdi yeni parlak Yeniden Başlatma Özelliğiniz listenizden çıkarıldı ve muhtemelen bir daha karşılaşılmayacak - zalimsiz, paslanmayan bir kod en iyi tür! Kodu bir restartCurrentLevel () işlevine taşıyın ve bu kodu uzağa katlayabilir ve bir daha asla bakamayabilirsiniz - belki elbette yeniden başlatılacak bir seviye olduğundan emin olduktan sonra :)
Ama sonra bunun bir atık olup olmadığını merak edersiniz, yine de yeniden yüklemek üzere olduğunuz şeyleri boşaltın. Eğer seviyeleriniz ve kaynaklarınız küçükse, kazanmanız gereken en fazla, birkaç saniyelik boş zaman süresidir. Her seferinde "Yeniden Başlat", yavaş sistemlerde (ve belki de eski akıllı telefonlarda) bile adlandırılır. "Erken optimizasyon", zamanınızla yapacak daha iyi şeyleriniz var.
Ah, ama şimdi seviyeleriniz artıyor ve dokularınız daha ayrıntılı hale geliyor ve soundtrack her ses ve müzikal katman için ayrı kanallarla 512kbps'te parçalandı (nedenini hatırlayamasanız da o zaman iyi bir fikir gibi görünüyordu). ..) ve gerçek bir şey değil, tamamen oluşturulmuş olduğunu düşündüğünüz, çok boyutlu Fourier dönüşüm matrislerini izleyen "devlet kökenli bağımlı voksel ışını" hakkında bir şey ve seviye yüklemesinin aslında sizi biraz sinirlendirmesi biraz zaman alıyor. Gerçek insanlarla bile test ettiniz ve aslında benzer oyunlardan daha kötü olduğu için bekleme süreleri için bir huzursuzluk gösteriyorlar (100 saniyeli bir MMORPG başkentinin <2 saniyede tam yüklenmesini beklemiyorsunuz değil mi?), ve bu bir problem.
Peki nasıl optimize edersiniz? Seviye yeniden yükleme bir sorun ise, seviye yükleme sorunu olmaz mı? Bunun sadece yeniden yüklendiğini düşünüyorsanız, neden dünyadaki insanlar seviyenizi ilk etapta yüklemekten çok daha fazla tekrarlıyorlar? Kodlama problemi değil, oyun oynama problemi gibi. Kim tekrar tekrar bir seviye yeniden yüklemek için eğlenceli olduğunu düşünüyor ve sadece tamamen önlenebilir yerine daha hızlı olmasını diliyorum ?
İlk önce asıl sorunu çöz!
Ancak, oyununuzun, en azından ara sıra yeniden başlatmanız gerekecek şekilde tasarlandığını ve yükleme süresinin bir kez ve tamamen kaçınılmaz bir şekilde yapması için tamam olduğu kadar uzun olduğunu, ancak tekrar yapmak zorunda kalmayacağınızı söyleyelim. Bu nasıl bir oyun? Biraz garip bir problem gibi görünüyor ... belki de art arda bulmacayı bozacağını düşündüğü yüksek çözünürlüklü bir Portal benzeri oyun?
Her şeyden önce, bunun önemsiz olmayacağının farkında olmalısınız. Tamamen yeni, denenmemiş bir kod yazmak zorunda kalacaksınız ve bu "duruma bağlı" dır, böylece seviye oyunları arasında neyin yeniden kullanılacağını veya neyin yeniden kullanılacağını bile bilmiyor olabilirsiniz. Rasgele unsurlar, yumurtlamalar, değişken dokular (iskeletleriniz sadece bazen zırh giyer mi?) Veya seviyenizdeki diğer değişen unsurlar var mı? Bir kıyafet veya özel bir model veya renkler / kapılar / tuzaklar gibi oyuncu ile değişen şeyler var mı?
Karşılaştırmalar yapacaksınız ve birçoğu. Şu anda yüklü olana karşı neyin gerekli olacağını karşılaştırarak, şu anda yüklenenlere karşı ne yapacağınızı karşılaştıracaksınız (son seviye için yüklenen şeylerle ne yaparsınız, bunun için değil - onları serbest bırakın veya geleceği önlemek için tutunun). yük?). Bu, oyununuz için gerçekten çok önemliyse, muhtemelen yüklenmeden önce bir şeyin yüklenip yüklenmediğini görmek için yükleme / boşaltma kodunuzu değiştirmek isteyeceksiniz (kodu çok amaçlı hale getirme, ancak daha önce çalışan özelliklere yeni hatalar getirme ve işlevler yapma) Bu, yakın gelecekte kullanılmayacak olan kaynakları dikkatlice salıverir). İç çekmek.
Ne yaparsanız yapın, oyununuz basit olsa bile, seviyeyi ilk kez yüklemeyeceğiniz bir seviye yeniden başlatıldığında seviye / oyuncu durumuna bağlı belirsiz hatalarla karşılaşacaksınız. Böylece oyun güncellemelerini aşağıdaki gibi metinlerle yazabilirsiniz:
“Bombayı bir füzeye patlatan bir füzenin patladığı bir karo üzerine, aynı zamanda 200 piksel su içinde olan bir damlanın düşürülmesi artık oyun verilerinizi bozmaz veya oyunun çökmesine neden olmaz.”
Gerçek Sebep Çoğu Oyun Rahatsız Etmiyor
Hiç kimse, bir taban katmanına sıyrılmak yerine mevcut duvarlarının üzerinden sadece duvar veya alçıpan boyadıklarını veya duvarları yukarı çekmek yerine parke zeminlerin üzerine halı döşendiğini hiç fark ettiniz mi?
Basit gerçek şu ki, en az ödül için hepsi daha iş. Mevcut duvarlarınız üzerinde boyamak çoğu zaman iyi sonuç verir ve parke zeminleri yırtıp atma değeri genellikle çok az veya yoktur.
Aynısı, yazılımdan oyunlardan multimedyaya Power Point Sunularına kadar geçerlidir - tek yapmanız gereken yükleme ekranından birkaç saniye uzaklaşmaksa insanlar zamanlarının% 1'ini inceleyerek geçiriyorlarsa, o zaman yapmak için inanılmaz önemsiz yatırım yaptığınız zaman çok kötü bir geri dönüş.
Ve bu yüzden çoğu oyun rahatsız etmiyor ve birkaç yükleme örneği haricinde ekranları yüklemenin aksi takdirde iyi bir oyunu daha az değerli hale getirdiği birçok oyunu düşünmekte zorlanıyorum; Aşırı örnekler, daha hızlı yükleme seviyesi için optimizasyonun mantıklı olduğu yerlerdir ve bu halka açık yapan oyunların küçük bir bölümüdür ve muhtemelen hiç kimsenin görmediği için hiç kimsenin görmediği daha küçük bir oyun bölümüdür.