PC ve XBox 360 Geliştirme için C # ile çalışan herhangi bir Lua API var mı? [kapalı]


18

Oyun Geliştirme üzerine bir kitap okuyorum, burada size Lua'daki oyununuz için nasıl senaryo yazacağınızı gösteriyorlar. Onlar Lua program ve C ++ kullanmak, ama bir kütüphane veya C # Lua kullanmak için API var mı merak ediyorum: özellikle XNA PC ve XBox 360 için oyunlar geliştirmek için ?


5
Bir tür küçük nitpick, ama Lua (bir isim), LUA değil (bir kısaltma, o ya da bağırıyorsun)
RCIX

Lua "Hakkında" sayfasından: "Lua sadece C ve C ++ 'da değil, aynı zamanda ... C # ...' da yazılan programları genişletmek için kullanılmıştır. "C # 'da lua" için Google'dan ilk sonuç, GameDev.net'ten ( gamedev.net/reference/articles/article2275.asp ) Lua'yı C # ile kullanma başlıklı ilginç bir makaleydi .
reverbb

Birçok .net devs komut dosyası yazmak için ironpython veya ironruby kullanır.
Off Rip

Yanıtlar:


6

Bu size işaret edecekti (http://www.xnua.com/xna_lua_xnua), ancak uzun süredir güncellenmedi.

C # mükemmel bir dildir ve bir anlamda c # oyununuzda komut dosyası dili olarak kullanılabilir. Nick Gravelyn, karo motoru (http://blog.nickgravelyn.com/downloads/#tileengine) hakkında bazı güzel öğreticiler oluşturdu ve iletişim kutusunu kapatmak için özel bir komut dosyası motoru kullandı. Ayrıca "verim" anahtar kelimesini öğrendiğinde temel bir örneği vardır: http://blog.nickgravelyn.com/2010/02/the-magic-of-yield/


3
Burada bazı iyi noktalar. Düşünülmesi gereken bir şey, oyununuz c # ile yazıldığında neden bir komut dosyası dili istiyorsunuz? C ++ motorları bir betik dili kullanmaktan çok fazla çeviklik kazanabilir, çünkü C ++ genellikle derlemek için uzun zaman alır. C # bu konuda pritty hızlı. Herhangi bir nedenle komut dosyalarınızın çalışma zamanında derlenmesini istiyorsanız, CS dosyasını yükleme zamanında derlemek için her zaman CodeDom'u (veya başka bir kod oluşturma yöntemlerini) kullanabilirsiniz, ancak bu yalnızca PC'de çalışır. "Oyun Motoru Araç Geliştirme" kitabında bu konuda bir bölüm var
Cubed2D

^^ Oyun Motoru Araç Seti Geliştirme güzel bir kitap :). Şimdi biraz modası geçmiş, ancak kavramlar hala sağlam. .NET komut dosyası dil bağlamaları ile ilgili sorun, Xbox 360 üzerinde çalışabilmek için hemen hemen yorumlanması gerektiğidir. System.Reflection.Emit olmadan, kod oluşturma yolunda fazla bir şey yapamazsınız. Bu yeteneklerin yakın gelecekte Xbox 360'a geleceği izlenimi altındaydım, ancak aşağıdaki cevabımdaki yorum tartışmasına dayanarak, muhtemelen böyle değil. Bu nedenle, Xbox 360'ta komut dosyası performansı muhtemelen çok iyi olmayacak :(.
Mike Strobel

@ Cubed2D: Lua, betik oyunları için bir tür endüstri standardıdır ve profesyonel olmayan programcının anlaması da daha kolaydır.
RCIX

@Mike sağ, derlemek veya 360 kod üretebilir. Ben bunu uygulamak için gidiyordu ben sadece 360 ​​c # komutları destek olmaz ve sadece bir pc araç seti özelliği var. Sadece bir 360 derlemede komut dosyaları klasörünü dahil etmek ve bir pc bir göz ardı vs proje tweak. @RCIX sadece herkesin yaptığı için yapmanız gerektiği anlamına gelmez. Xna'yı kullanmak istiyorsanız, değerinden daha fazla sorun olacak. .Ua dünyasında programcı olmayanlara lua uygulamaya çalışırken tweakable parametreleri açığa çıkarmanın daha iyi yolları var (pro-programcı olmayan yorumunuzla
başa çıkacağınızı varsayalım

@ Cubed2D: Bu iyi bir nokta, ama gerçekten hedef platformunuza bağlı. sadece PC için yazıyorsanız, o zaman LuaInterface ve yerel lua dll kullanabilirsiniz ve bir uygulama yazmak zorunda değilsiniz. Bunun yanı sıra, oyun geliştirme dünyasında böyle bir takibe sahip olduğu için, bu ortam için iyi olmasını sağlayan doğal olarak geliştirilmiş özellikler. Dahası, Lua ile programlamaya ana adımımı attım ve birçok insanın yaptığına bahse girerim, bu yüzden insanların neden kullanmak istediği anlaşılabilir.
RCIX

2

C # dilinde komut dosyası arıyorsanız, kesinlikle IronPython'a bir göz atın . Sadece C # için bir python API değil, aslında C # ile aynı CLR derlemesini (aynı performansla) derleyen, ancak bir komut dosyası dili ile arayüzlenebilen tamamen ayrı bir python uygulamasıdır. C # için herhangi bir Lua sarıcı, Marshalling'in ek yükü nedeniyle çok yavaş olacaktır.


2

Sean'ın dediği gibi, IronPython bakmaya değer. IronPython aslında Dinamik Dil Çalışma Zamanı'nı (DLR) hedefleyen .NET için birkaç dinamik dil uygulamasından biridir. Orada (gibi DLR Lua uygulanmasına yönelik en az bir açık kaynak projesi bu bir ), ama emin tamamlanmak herhangi uygulamaları varsa değilim. Lua için iyi uygulanmış bir DLR bağlama seti, IronPython ve IronRuby ile eşit performans göstermeli ve bir Lua sarıcıdan çok daha hızlı olacaktır. Karşılaştırma açısından, IronPython genellikle CPython'dan daha iyi performans gösterir (bazen önemli ölçüde daha iyi).

Not: As ElementCy aşağıda devletler, DLR diller genellikle Ancak, Xbox 360 desteklenmez ise DLR bir "yorumlanır modu". Kesin olarak söyleyecek kadar bilgim yok, ancak performans kesinlikle düşse de IronPython'un (veya diğer DLR dil uygulamalarının) yorumlanmış modda Xbox 360'da çalışmasını sağlamak mümkün olabilir. DLR ekibinden birine bunun mümkün olup olmadığını bilip bilmediğini sormak faydalı olabilir. Değilse, Xbox 360 , yaklaşan Silverlight desteğinin bir parçası olarak Reflection.Emit desteğini almalıdır . Bu olursa ve DLR'yi kurup Xbox 360'ta çalışmanın sorun olmayacağını düşünürüm.


4
IronPython ile ilgili tek sorun, xbox360'da çalışmaz. Sadece PC için kullanmak istiyorsanız sorun yok. IronPyton, System.Reflection.Etümünü kullanır ve Xbox'ın .net Framework'ünde yoktur.
ElementCy

Çok iyi bir nokta. Güncellenmiş.
Mike Strobel

2
Dont xbox winPhone XNA ve Silverlight hem olduğu gibi, yakında Reflection.Emit her zaman oluyor ve bu ad desteklemiyor düşünüyorum
Cubed2D

1
Haklı olabilirsin. WP7 aslında Silverlight'ı değil, .NET yerine .NET CF tabanlı "Silverlight Mobile Compact Framework "'ü çalıştırır. Xbox 360'ın da tam .NET Framework yerine .NET CF çalıştırdığına inanıyorum, bu yüzden muhtemelen WP7 uygulamasına benzer bir uygulama ile sonuçlanacak. Oh iyi.
Mike Strobel

2

Size verebileceğim en iyi çözüm sadece C # 'da senaryo yazmaktır. Pencereleri hedeflediğinizde bunları çalışma zamanında derleyebilir ve xbox için önceden derleyebilirsiniz. (dll olarak)

Bu en kolay çözüm olurdu. Bunu VB.NET veya herhangi bir .NET dilinde de yapabilirsiniz. (komut dosyaları olanlar hakkında emin değilim) Temelde, ben kendi dll komut dosyalarına sahip diyorum. Windows üzerinde çalışma zamanında derlemelerini sağlayabilirsiniz. (bunu gerçekten xbox 360'ta yapmalarını istiyor musunuz?, oyunlarınızı orada güncelleyemezsiniz, en azından sanmıyorum)

Hayal kırıklığınızı anlayabiliyorum, Lua'yı da kullanmak istedim.

Özetlemek gerekirse: 1) Windows 2'de çalışma zamanında oluşturulmasını sağlayın) Xbox 360 için önceden oluşturun

Ben bunu tavsiye ederim.


1
  1. Lua yorumlayıcı yönetilmez, AFAIK, bu nedenle XNA ile Xbox'ta çalışamazsınız

  2. DLR'ye dayanmayan ve Xbox'ta çalışan Jint adlı Javascript yorumlayıcısını kullanabilirsiniz ( http://jint.codeplex.com/ )


Burada Lua <-> C # olan birkaç bağlantı olduğu için ilk noktanın yanlış olduğunu söyleyebilirim.
Komünist Ördek

Yönetilen kodu yalnızca Xbox'ta çalıştırabilirsiniz. Lua <-> C # köprüsü, yönetilen koddan Lua'yı çağırmanıza izin veren yönetilmeyen bir koddur; MS, XNA veya Xbox 360 OS'ye ekleyene kadar, orada çalıştıramazsınız.

0

Sorunuza teknik olarak cevap vermiyor (xbox'ta çalışmıyor), ancak LuaInterface , Cua ile nispeten acısız bir şekilde Lua entegrasyonuna izin verir.


0

Sadece bu soruyu güncellemek için, son günü bazı kapsamlı aramalar yaparak geçirdim ve UniLua'yı (birlik, saf C # uygulaması ile kullanım için) kullanmanın Xbox'ta Lua almak için en iyi ve en etkili seçenek olduğunu gördüm. Söktüm, tüm Birlik malzemesini çıkardım ve harika çalışıyor.

LuaState için [] operatörünü aşırı yükleyerek LuaInterface'te bulunan bazı işlevleri de ekledim.

CFWLua

Umarım faydalı olmuştur.

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.