Czy powinienem używać Lua do logiki gry na urządzeniach mobilnych?

33

Jak wyżej naprawdę

W wolnym czasie piszę grę na Androida (Android, ponieważ jest darmowa i nie mam prawdziwych aspiracji do robienia czegoś komercyjnego).

Logika gry wywodzi się z bardzo typowego modelu opartego na komponentach, w którym byty istnieją i mają dołączone do nich komponenty, a komunikaty są wysyłane tam i z powrotem, aby wszystko się stało.

Oczywiście warstwa, która faktycznie działa, jest cienka, a gdybym miał napisać wersję tej aplikacji na iPhone'a, musiałbym ponownie napisać mechanizm renderujący i sterownik rdzenia (tego systemu opartego na komponentach) w Celu C.

Jednostki są tylko płaskimi plikami określającymi nazwy komponentów, które mają zostać dodane, a same komponenty są prostymi, jednocelowymi obiektami zawierającymi logikę encji.

Teraz, jeśli napiszę całą logikę dla tych komponentów w Javie, to musiałbym ponownie napisać je w Celu C, jeśli zdecyduję się na port iPhone. Ponieważ większość logiki aplikacji jest zawarta w tych komponentach, w idealnym świecie zostałyby napisane w jakimś niezależnym od platformy języku / skrypcie / DSL, który można by po prostu załadować do aplikacji na dowolnej platformie.

Zostałem jednak przekonany, że nie jest to idealny świat i że wydajność Lua itp. Na urządzeniach mobilnych wciąż nie jest do zera, że ​​narzut jest zbyt duży i że później wpadłbym w kłopoty poszedł tą drogą?

Czy tak jest w rzeczywistości? Oczywiście jest to tylko hipotetyczne pytanie, z przyjemnością piszę je wszystkie w Javie, ponieważ jest to proste i łatwe, ale mogę powiedzieć, że naprawdę lubię tworzyć tę grę (mało prawdopodobne, biorąc pod uwagę, jak bardzo nie lubię, że muszę sobie z tym poradzić) z tymi wszystkimi różnymi urządzeniami mobilnymi) i chciałem stworzyć komercyjnie opłacalną grę - czy użyłbym Lua, czy po prostu skorzystałbym z możliwości przeniesienia i przepisał cały kod?

Rob Ashton
źródło

Odpowiedzi:

17

Jeśli chodzi o języki skryptowe, Lua jest bardzo szybka, ale jak wszystko różni się w zależności od procesora. Na przykład Lua nie byłaby świetna na platformie konsolowej, ponieważ zazwyczaj jest bardzo rozgałęziona, a niektóre platformy konsolowe rozgałęziają się bardzo wolno. Aby jak najlepiej odpowiedzieć na twoje pytanie, sugeruję przeprowadzenie testów porównawczych. Zobacz, jak szybko Lua wykonuje różne algorytmy na urządzeniu. Podejrzewam, że nic ci nie będzie, o ile nie będziesz ćwiczyć matematyki ani iteracji w kodzie skryptu. (I tak nie powinieneś tego robić. To są skrypty. Wykonuj obliczenia w silniku.)

To powiedziawszy, skryptowanie nie jest srebrną kulą niezależności platformy. Może być konieczne przepisanie tekstu w Obj-C, mimo że portujesz na iPhone'a z powodu ograniczeń Apple dotyczących wykonywania kodu dynamicznego. Nie mam pod ręką linku, ale warto przeczytać. Apple ledwo zezwala na kod zarządzany (musisz uzyskać specjalne pozwolenie na uruchomienie specjalnej dystrybucji). Z pewnością nie pozwolą na implementację Lua w App Store.

[edytuj] Najwyraźniej pomyliłem się co do Lui na iPhonie. Spójrz na komentarze poniżej.

Sean Edwards
źródło
9
Lua jest szeroko stosowana w aplikacjach na iPhone'a i wprowadzono zmiany w warunkach, które na to pozwalają. Zobacz tutaj: appleoutsider.com/2010/06/10/hello-lua
Colin Gislason
5
Wiele aplikacji konsolowych faktycznie korzysta z LUA. Tak, jest rozgałęziony - ale to nie ma znaczenia, jeśli kontrolujesz logikę wysokiego poziomu. Tylko nie nazywaj tego z pętli renderowania;) O ile mi wiadomo, LUA dla gier jest w porządku z ostatnimi zmianami umowy dewelopera - istnieje wiele gier napędzanych przez LUA. Ale podobnie jak w przypadku wszelkich prac rozwojowych na zamkniętej platformie, zapytaj właściciela platformy (tj. Apple) o ostateczne odpowiedzi. Ponadto nie ma potrzeby korzystania z Obj-C - iPhone pozwala C / C ++ w porządku. (Radzę jednak zrobić cokolwiek UIKit w Obj-C. Zmniejszony czynnik bólu)
Rachel Blum
7
Idź idź magiczne mydło. Lua to rzeczownik, a nie akronim, nigdy nie napisałbyś JAVA. Lua oznacza księżyc. Nie napisałbyś KSIĘŻYCA. dzięki - nazistowscy Lau.
deft_code,
2
Niestety znam wielu ludzi, którzy piszą „JAVA”.
1
Użyłem lua mocno na NDS (który jest znacznie mniej wydajny niż iPhone) i działał dość szybko. Wystarczająco szybko, abyśmy mogli stworzyć ponad połowę logiki jednej gry bezpośrednio w lua.
Klaim
7

Implementacja C Lua jest specjalnie zaprojektowana do działania na urządzeniach wbudowanych. Jest mały i szybki (dla języka skryptowego). Myślałbym, że będzie w porządku dla przynajmniej lekkich zadań.

tenpn
źródło
4

Pewnie. Jest mało prawdopodobne, aby logika skryptowania była twoim wąskim gardłem (w rzeczywistości będziesz profilować za pomocą Sharka lub Instruments, prawda?). Pracowałem nad wersją Marooned na iPhone'a, która używała dużo Lua do logiki gry. Zrobiłem dużo strojenia wydajności i zasadniczo Lua wynosiła 0%.

(Lua była szarą strefą, kiedy wypuściliśmy Marooned, ale od tego czasu została oficjalnie pobłogosławiona dla rozwoju iOS).

David Dunham
źródło
1

Zobacz http://code.google.com/p/android-scripting/ do zalecany sposób prowadzenia włączony na Androida. Lua nadal nie pasuje zbyt dobrze na platformę Android, ponieważ wymaga C. Oczywiście możesz użyć NDK, ale to nie jest srebrna kula.

użytkownik1800
źródło
1

Zależy to trochę od tego, ile logiki gry jest wbudowane w skrypty. Zasadniczo LUA jest używany jako klej na wysokim poziomie, ale wiele pracy z pomrukiem odbywa się za pomocą C (++). Tak, LUA jest szybka, jeśli chodzi o języki skryptowe - nadal patrzysz na spowolnienie w porównaniu z językami ojczystymi około 30 do 50 razy, więc to naprawdę zależy od tego, jak wiele dzieje się w LUA.

Kaj
źródło
0

Możesz napisać całą grę w Lua i całkowicie unikać Java / ObjectiveC / C / C ++.

Do programowania wieloplatformowego użyj Corony . Jest darmowy, dopóki nie planujesz wysyłki do App Store lub Android Marketplace.

Jeśli chcesz celować w iPhone / Pad / Touch, spójrz na wosk .

Na marginesie @Sean Edwards: Brałem udział w wysyłce pięciu tytułów na Nintendo DS, Wii, Sony PSP i Xbox360, z których wszystkie używały tego samego silnika i zostały napisane w Lua. Jest szeroko stosowany na konsolach i telefonach komórkowych.

Bkersten
źródło