Programcı olmayanlar için XNA oyun dağıtımlarını kolaylaştırmak


12

Şu anda bir taban olarak XNA RPG başlangıç ​​kiti kullanarak bir RPG üzerinde çalışıyorum. (http://xbox.create.msdn.com/tr-TR/education/catalog/sample/roleplaying_game) Küçük bir ekiple çalışıyorum (iki tasarımcı ve bir müzik / ses sanatçısı), ama ben sadece programcı. Şu anda, aşağıdaki (sürdürülemez) sistemle çalışıyoruz: takım oyuna eklemek için yeni resimler / sesler yaratıyor veya mevcut sesleri / resimleri değiştiriyorlar, daha sonra çalışmalarını mevcut bir yapıyı koruduğumuz bir depoya bağlıyorlar. Her şeyin. (Kod, görüntüler, ses, vb.) Her gün, yeni görüntüleri, kod değişikliklerini ve sesi yansıtan yeni bir yükleyici oluşturuyorum ve herkes yüklüyor.

Benim sorunum şu: Örneğin, ekibin geri kalanının savaş seslerinin yerini alabileceği bir sistem oluşturmak istiyorum ve inşa etmemi beklemeden değişiklikleri hemen görebiliyorlar. XNA'nın kurulum şekli, eğer yayınlarsam, tüm görüntü ve ses dosyalarını kodlar, böylece takım "çalışırken değiştirilemez". Microsoft VS'yi herkesin makinesine kurabilir ve onlara nasıl hızlı bir şekilde yayınlanacağını gösterebilirim, ancak bunu yapmanın daha basit bir yolu olup olmadığını bilmek istedim.

XNA kullanan ekiplerle çalışırken buna karşı çıkan var mı?


2
Tüm görüntüleri ve ses dosyalarını XNA kodlayarak, bunların XNA içerik kanalı tarafından oluşturulduğunu ve .xnb dosyalarına dönüştürüldüğünü mü demek istediniz?
David Gouveia

Tam uzantıyı hatırlayamıyorum, ancak standart boru hattından geçiyorlar, evet.
Sal

Yanıtlar:


12

Her şeyden önce, her seferinde yayıncı ve yükleyici oluşturmanız gerektiğini düşünmüyorum. Projeyi derleyin ve çıktı dosyalarını (örneğin EXE ve İçerik klasörü artı kullanmakta olduğunuz DLL bağımlılıkları) depoya yerleştirin ve XNA redist'i yüklü olduğu sürece bilgisayarlarında da çalışmalıdır.

Sorunuza gelince, biri Visual Studio'yu makinelerine yüklemeyi ve diğeri oyunda bazı değişiklikler yapmayı içeren iki çözüm düşünebilirim:

  • Visual Studio'yu yüklemelerini ve varlıklarını XNA içerik kanalından geçirmelerini öğretmelerini sağlayın. Sadece bir içerik boru hattı projesi oluşturmaları, dosyaları oraya sürüklemeleri ve derlemeleri gerekir. Ardından, ortaya çıkan XNB dosyalarını proje klasöründeki dosyalarla değiştirebilir ve değişiklikleri görmek için EXE'i çalıştırabilirler.

  • Windows için geliştiriyorsanız, kodunuzu, içerik kanalından geçmeye gerek kalmadan çalışma zamanında varlıkları orijinal biçimlerinde yükleyecek şekilde değiştirebilirsiniz. Kullanabileceğiniz görüntüleri yüklemek içinTexture2D.FromStream ( bu örnek gibi ) ve ses için bulduğum en iyi çözüm bunun yerine FMOD API'yi kullanmaktı ( bu örnek gibi ). Sonra varlıkları doğrudan değiştirebilir ve oyunu çalıştırabilirler.

İşleri daha da ileriye taşımak için oyununuzu mümkün olduğunca veriye dayalı hale getirmeyi de deneyebilirsiniz. Bu temel olarak, karakter sınıfı istatistikleri veya kullandığınız görüntülerin ve ses dosyalarının yolu gibi kolayca değiştirebileceğiniz her şeyin koddan çıkarılması ve harici metin dosyalarına yerleştirilmesi gerektiği anlamına gelir. (ör. XML, JSON, INI). Ardından, oyunda değişiklikleri görmek için bu dosyaları bir metin düzenleyicide düzenlemeniz yeterlidir ve yeniden oluşturmanıza gerek yoktur.


1
Hızlı yanıtınız için teşekkür ederim. İkinci çözümünüzü beğeniyorum ve ondan ortaya çıkan bir sorum var: VS'de #IF DEBUG'a benzer bir bayrak oluşturmanın bir yolu var mı, bu da #IF NON_PRODUCTION_MODE gibi bir şey yapmama izin verecek, Bu şekilde, bu üretim dışı çağrıdaki tüm FromStream () çağrılarını sarabilirim. Son olarak, oyunu üretime göndermeye hazır olduğumda, modları kolayca değiştirebilir ve ses dosyalarını tekrar kodlayabilirim.
Sal

1
@Sal Evet, tam da bunu yapabilirsiniz. Kontrol Buradaki belgeleri .
David Gouveia

1
@Sal Varsayılan olarak, Visual Studio iki derleme profili oluşturur: Hata Ayıklama ve Serbest Bırakma. İkisi arasında geçiş yapabilirsiniz Build->Configuration Manager. Varsayılan olarak, Debug DEBUGderlemesinde derleme sembolü tanımlanmıştır, bu da serbest bırakılmayan kodunuzu ile satabileceğiniz anlamına gelir #if ( DEBUG ) doStuffIWouldntDoInRelease(); #elif theActualReleaseCode(); #endif.
Cypher

1
@Sal Ayrıca, depoya bin / * dizinlerini eklemenin çok daha kolay olduğunu gördüm ve tasarımcıların / sanatçıların / qa'nın sadece bin klasörünü kontrol etmelerini sağlayın, böylece en yeni ve en iyi şekilde çalışabilirler. Bunu yaparak, tüm bağımlılıkları, dokuları, sesleri vb. Bir araya getirirler. Daha sonra her gün tek yapmaları gereken svn updateçalışma dizinindeydi ve hızlandılar.
Cypher

4

Partiye biraz geç kaldım, ama işte benim fikrim.

Zaten var olan kod tabanını değiştirmek gibi bir şey içeren 3. olasılık ile gider. Bu, ikili dizini (gerçek oyun .exe ve derlemedeki ilişkili .dll dosyalarını) bir çıktı dizininde (örneğin bir post-build komut dosyasıyla) bir yere koyarsanız (ve kopyalarsanız) çalışır. Daha sonra, Visual Studio 2010 ve XNA Game Studio 4.0 hakkında konuştuğumuzu varsayacağım (Prosedür diğer sürümler için çok benzer, sadece bazı sayıları değiştirmeniz gerekiyor)

Yani, fikir: projenizin kök dizininde .sln çözümünün bulunduğu bir komut dosyası (.cmd) aşağıdaki adımlarla oluşturun:

  1. "Visual Studio 2010 Komut İstemi" ni çağırın:

    "C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ vcvarsall.bat" x86 çağırın

    Bu komut dosyamızın XNA kitaplıklarını ve gerekli tüm araçları ve ikili dosyaları bulabilmesi içindir.

  2. İçerik Projesi'nde (.contentproj) MSBuild görevini çağırın:

    msbuild / property: XNAContentPipelineTargetPlatform = Windows / property: XNAContentPipelineTargetProfile = mygame.content / projectfile.contentproj dosyasına ulaşın

    Özellikleri, belirtilen farklı platformlara / profillere göre değiştirebilirsiniz. Hatta bir seferde daha fazla platform için içerik oluşturmak için daha ileriye gidebilirsiniz (Windows Phone, Xbox 360 veya Windows). Profil şu olabilir: Erişim veya HiDef (http://msdn.microsoft.com/en-us/library/ff604995.aspx)

  3. Çıktıyı yinelemeli olarak, ikili dosyaların + gerçek oyunun depoda depolandığı klasöre kopyalayın:

    xcopy / d / y / i / e bin \ x86 \ Hata Ayıklama \ İçerik * .. \ game_output \ İçerik

    Bayraklar hakkında ayrıntılı bilgi için, komut isteminde de çağırabilirsiniz: xcopy /?. Önemli olanlar şunlardır: /dyalnızca değiştirilmiş dosyaları kopyalamak - çok sayıda varlığınız olması durumunda, zaten var olan ve değiştirilmemiş olanları tekrar tekrar kopyalamamanız yararlıdır; /ydaha yeni bir sürümle güncellenebilmeleri için mevcut dosyaların üzerine otomatik olarak yazmak için. Ben kullandım xcopyçünkü normal copy, bildiğim kadarıyla özyinelemeli klasörleri kopyalayamaz - ve muhtemelen içeriği klasör ve alt klasörlerde yapılandırıyorsunuzdur. Ayrıca, normalden daha iyidir copy(birçok farklı bayrak).

  4. pauseKomut dosyasının kullanıcı girişini beklemesi için arayın . Bu, yapının iyi olup olmadığını ve herhangi bir hatayla karşılaşılmadığını kontrol etmek için yararlıdır.

Şimdi, içerik dosyalarını değiştiren sanatçıların (veya herhangi birinin) sadece .cmd komut dosyasını çift tıklatması gerekir ve yeni içerik oluşturulacak ve test edilen hazır nesnelerin bulunduğu çıkış dizinine kopyalanacaktır.

Bununla birlikte, David'in gönderisinin 1. noktasına geri dönmeniz gereken küçük bir sorun var: sanatçılar İçerik projesini dosya ekleyerek / kaldırarak / dolaşırken değiştirmek istiyorlarsa, Visual Studio'da proje (veya herkesin yapacağından şüphelendiğim proje dosyasını elle düzenleme). Dediğim gibi, bu küçük bir konudur, çünkü sadece depodaki yeni dosyaları işleyebilirler ve siz, kodlayıcı bunları işlemek için yapıldığında kodlayıcı onları İçerik Projesine dahil eder.

Bu fikir üzerine Shawn Hargreaveas, msbuild ve İçerik Projelerini komut satırından oluşturma hakkında bir şeyler yayınladı: http://blogs.msdn.com/b/shawnhar/archive/2006/11/07/build-it-ahead-of-time .aspx Onun çözümü yeni bir dosya oluşturmaktı, ama bence mevcut proje dosyasını doğrudan kullanmak daha kolay ve daha sürdürülebilir.

Not: Uzun yazı için özür dilerim xD

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.