"Erken optimizasyon yapmayın", "işleri yapmak için mümkün olan en kötü yolu seçme" anlamına gelmez. Yine de performans sonuçlarını göz önünde bulundurmanız gerekir (sadece prototip olmadıkça). Mesele şu ki gelişimdeki o noktada diğer, daha önemli şeyleri sakatlamak değil - esneklik, güvenilirlik vb. maliyetleri takip edin. Güçlü yazarak mı kullanmalısınız? Çoğu oyun iyi sonuç verdi; Oyun oynamak için esnekliğin ilginç kullanımlarını bulursanız, bunu kaldırmanız ne kadara mal olur?
Optimize edilmiş kodu, özellikle "akıllı" kodu değiştirmek çok daha zor. Her zaman bazı şeyleri daha iyi yapan, diğerleri ise daha kötü olan bir seçimdir (örneğin, bellek kullanımı için CPU zamanı değişiyor olabilirsiniz). Bu seçimi yaparken, tüm sonuçların farkında olmanız gerekir - felaket olabilirler ancak yardımcı olabilirler.
Örneğin, Komutan Keen, Wolfenstein ve Doom, optimize edilmiş bir işleme motorunun üzerine inşa edildi. Her biri, oyunun ilk etapta var olmasını sağlayan "numaralarına" sahipti (her biri zaman içinde daha da geliştirildi ancak bu önemli değil). Bu iyi . Oyunun özünü, oyunu mümkün kılan düşüncesini yoğun bir şekilde optimize etmek sorun değil; Özellikle, bu optimize edilmiş özelliğin çok fazla keşfedilmemiş oyun tasarımlarını düşünmenize izin verdiği yeni bölgeleri keşfediyorsanız. Optimizasyonun getirdiği sınırlamalar size ilginç bir oyun sunabilir (örneğin, RTS oyunlarındaki birim sayım limitleri performansı arttırmanın bir yolu olarak başlamış olabilir, fakat aynı zamanda bir oyun efekti de vardır).
Ancak bu örneklerin her birinde, oyunun optimizasyon olmadan var olamayacağına dikkat edin. “Tamamen optimize edilmiş” bir motorla başlamadılar - çıplak bir zorunlulukla başladılar ve çalışmaya başladılar. Yeni teknolojiler geliştiriyorlardı ve onları eğlenceli oyunlar yapmak için kullanıyorlardı. Motor hileleri kod tabanının mümkün olduğu kadar küçük bir kısmı ile sınırlıydı - daha ağır optimizasyonlar yalnızca oyun çoğunlukla yapıldığında ya da ilginç bir yeni özelliğin ortaya çıkmasına izin verildiğinde ortaya çıktı.
Şimdi yapmak isteyebileceğiniz bir oyun düşünün. Bu oyunu yapan ya da bozan gerçekten teknolojik bir mucize var mı? Belki de sonsuz bir dünyada açık bir dünya oyunu hayal ediyorsundur. Bu gerçekten oyunun merkezi parçası mı? Oyun sadece onsuz işe yaramaz mıydı? Belki de arazinin sınırsız, gerçekçi jeoloji ile deforme olduğu bir oyun düşünüyorsunuz; daha küçük bir kapsamla çalışmasını sağlayabilir misiniz? 3B yerine 2B olarak çalışır mı? En kısa zamanda eğlenceli bir şeyler alın - optimizasyonlar mevcut kodunuzun çok büyük bir bölümünü elden geçirmenizi gerektiriyor olsa bile, buna değer olabilir; ve işleri daha büyük yapmanın oyunu daha iyi hale getirmediğini bile fark edebilirsiniz.
Çok fazla optimizasyona sahip yeni bir oyuna örnek olarak, Factorio'ya işaret ediyorum. Oyunun kritik bir parçası da kayışlar - binlerce insan var ve fabrikanızın her yerinde birçok bireysel malzeme parçası taşıyorlar. Oyun yoğun olarak optimize edilmiş kayış motoru ile başladı mı? Hayır! Aslında, orijinal kemer tasarımını optimize etmek neredeyse imkansızdı - kemerin üzerindeki eşyaların fiziksel bir simülasyonunu yaptı, bu yapabileceğiniz bazı ilginç şeyler yarattı (bu, “ortaya çıkan” oyun şeklini aldı - oyun şaşırtıcı. Tasarımcı), ama kemerdeki her bir eşyayı simüle etmek zorunda kaldın. Binlerce kayışla, on binlerce fiziksel olarak simüle edilmiş öğe elde edersiniz - yalnızca bunu kaldırarak ve kayışların işi yapmasına izin vermek, ilişkili CPU zamanını% 95-99 oranında azaltmanıza izin verir, hafıza yeri gibi şeyleri düşünmeden bile. Ancak, yalnızca bu sınırlara ulaştığınızda bunu yapmak faydalı olacaktır.
Kemerlerle ilgisi olan her şey, kemerlerin optimize edilmesine izin vermek için yeniden yapılmak zorunda kaldı. Kemerlerin optimize edilmesi gerekiyordu, çünkü büyük bir fabrika için çok sayıda kemere ihtiyacınız vardı ve büyük fabrikalar oyunun bir cazibesi. Sonuçta, eğer büyük fabrikalara sahip olamıyorsanız, neden sonsuz bir dünyaya sahipsiniz? Komik, sormalısın - erken sürümler yoktu :) Oyun, şu anda bulundukları yeri bulmak için defalarca elden geçirildi ve yeniden şekillendirildi - Java'nın bir yolun olmadığının farkına vardığında% 100 sıfırlama dahil oyun böyle ve C ++ 'a geçti. Ve Factorio için çok işe yaradı (hala iyi bir şey olsa da başlangıçtan itibaren optimize edilmedi - özellikle de bu, ilgisizlikten dolayı başarısızlıkla sonuçlanabilecek bir hobi projesi olduğu için).
Ama olay orada olması vardırSınırlı bir fabrikada yapabileceğiniz birçok şey - ve pek çok oyun bunu göstermiştir. Sınırlar eğlence için özgürlüklerden daha da güçlendirici olabilir; "Haritalar" sonsuz olsaydı, Spacechem daha mı eğlenceli olurdu? Yoğun şekilde optimize edilmiş "kayışlarla" başlarsanız, hemen hemen o yöne gitmek zorunda kalırsınız; ve diğer tasarım yönlerini keşfedemediniz (fizikle simüle edilmiş konveyör bantlarla ne ilginç şeyler yapabileceğinizi görmek gibi). Potansiyel tasarım alanınızı sınırlandırıyorsunuz. Öyle görünmüyor çünkü pek fazla bitmemiş oyun görmüyorsunuz, ancak zor kısmı eğlenceyi doğru yapmak - gördüğünüz her eğlenceli oyun için, muhtemelen orada bulunamayan ve hurdaya çıkmış yüzlerce kişi var (veya daha da kötüsü, korkunç mesajlar olarak serbest bırakıldı). Eğer optimizasyon bunu yapmanıza yardımcı olursa - devam edin. Olmazsa ... muhtemelen erken. Eğer bir oyun teknisyeni harika çalışıyor, ancak gerçekten parlamak için optimizasyonlara ihtiyaç duyduğunu düşünüyorsanız - devam edin. Eğer ilginç mekaniğiniz yoksa,onları optimize etme . Önce eğlenceyi bulun - çoğu optimizasyonun buna yardımcı olmadığını ve çoğu zaman zarar verici olduğunu göreceksiniz.
Sonunda harika, eğlenceli bir oyunun var. Şimdi optimizasyon yapmak mantıklı mı ? Ha! Hala düşündüğün kadar net değil. Eğlenceli bir şey var mıonun yerine yapabilir misin? Unutma, zamanın hala sınırlı. Her şey bir çaba ister ve bu çabayı en çok önem verdiği noktaya odaklamak istersiniz. Evet, "ücretsiz oyun" veya "açık kaynak" bir oyun yapıyor olsanız bile. Oyunun nasıl oynandığını izleyin; performansın bir darboğaz haline geldiğine dikkat edin. Bu yerleri optimize etmek daha eğlenceli hale getiriyor mu (daha büyük, daha da karışık fabrikalar inşa etmek gibi)? Daha fazla oyuncu çekmenize izin veriyor mu (örneğin daha zayıf bilgisayarlar ile veya farklı platformlarda)? Her zaman önceliklendirmeniz gerekir - oran verme çabasını araştırın. Muhtemelen oyununu oynamaktan ve başkalarının oyunu oynamasını izlemek için bol miktarda asılı meyve bulabilirsiniz. Ancak önemli kısmı not edin - oraya ulaşmak için bir oyuna ihtiyacınız var . Buna odaklan.
Üstte bir kiraz olarak, optimizasyonun asla bitmeyeceğini düşünün. Tamamladığınız ve başka görevlere geçtiğiniz küçük bir onay işaretine sahip bir görev değildir. Her zaman yapabileceğiniz "bir tane daha optimizasyon" vardır ve herhangi bir gelişimin büyük bir kısmı öncelikleri anlamaktır. İyileştirme uğruna optimizasyon yapmazsınız - bunu belirli bir hedefe ulaşmak için yaparsınız (örneğin, "333 MHz Pentium'da bir kerede ekranda 200 ünite" harika bir amaçtır). Terminal hedefinin izini kaybetmeyin, çünkü artık terminal hedefi için ön koşul olmayabilecek ara hedeflere çok fazla odaklanıyorsunuz.