Должен ли я использовать Lua для игровой логики на мобильных устройствах?


33

Как на самом деле выше,

В свое свободное время я пишу игру для Android (андроид, потому что он бесплатный, и у меня нет никаких реальных намерений делать что-то коммерческое).

Логика игры основана на очень типичной компонентной модели, в которой сущности существуют и к ним прикреплены компоненты, а сообщения отправляются туда и обратно для того, чтобы что-то произошло.

Очевидно, что слой для фактического выполнения является тонким, и если бы я должен был написать версию этого приложения для iPhone, мне пришлось бы переписать рендер и драйвер ядра (этой системы на основе компонентов) в Objective C.

Сущности - это просто плоские файлы, определяющие имена добавляемых компонентов, а сами компоненты представляют собой простые, универсальные объекты, содержащие логику для сущности.

Теперь, если я напишу всю логику для этих компонентов в Java, то мне придется переписать их в Objective C, если я решу сделать порт для iPhone. Поскольку основная часть логики приложения содержится в этих компонентах, в идеальном случае они будут написаны на не зависящем от платформы языке / script / DSL, который затем может быть просто загружен в приложение на любой платформе.

Однако я был убежден, что это не идеальный мир, и что производительность Lua и т. Д. На мобильных устройствах все еще не до конца понятна, что накладные расходы слишком велики и что я столкнусь с проблемами позже, если я пошел по этому маршруту?

Это действительно так? Очевидно, что это всего лишь гипотетический вопрос, я рад написать их все на Java, так как это просто и легко начать работу, но скажу, что мне действительно нравится создавать эту игру (маловероятно, учитывая, насколько я в настоящее время не люблю иметь дело с со всеми этими различными мобильными устройствами) и я хотел сделать коммерчески жизнеспособную игру - буду ли я использовать Lua или просто получу удар, когда дело доходит до портирования, и просто переписать весь код?

Ответы:


17

Что касается языков сценариев, Lua очень быстр, но, как и все, зависит от процессора. Например, Lua не был бы хорош на консольной платформе, потому что он имеет тенденцию быть очень ветвящимся, и некоторые консольные платформы разветвляются очень медленно. Чтобы лучше ответить на ваш вопрос, я бы предложил провести несколько тестов. Посмотрите, как быстро Lua выполняет несколько различных алгоритмов на устройстве. Я подозреваю, что у вас все будет хорошо, если вы не выполняете тяжелую математику или итерации в своем коде скрипта. (Вы все равно не должны этого делать. Это скрипты. Делайте вычисления в движке.)

That said, scripting isn't a silver bullet for platform independence. You may need to rewrite in Obj-C anyway if you port to iPhone due to Apple's restrictions on executing dynamic code. I don't have a link offhand, but it may be worth reading into. Apple barely allows managed code (you have to get special permission to run a special distribution). They most certainly will not allow a Lua implementation into the app store.

[edit] Apparently I was mistaken about the Lua on iphone thing. Take a look at the comments below.


9
Lua is widely used in iPhone applications, and changes were made to the terms that allow it. See here: appleoutsider.com/2010/06/10/hello-lua
Colin Gislason

5
Many console apps actually use LUA. Yes, it's branchy - but that doesn't matter if you control high-level logic. Just don't call it from your render loop ;) As far as I know, LUA for games is fine with the recent changes to the developer agreement - there are plenty of games that are driven by LUA. But as with any development on a closed platform, ask the platform owner (i.e. Apple) for definitive answers. Also, no need for Obj-C - the iPhone allows C/C++ just fine. (I recommend you do anything UIKit in Obj-C, though. Reduced pain factor)
Rachel Blum

7
Go go magic soap box. Lua is a noun not an acronym, you would never write JAVA. Lua means moon. You would not write MOON. thanks - the Lau Nazi.
deft_code

2
Sadly I know plenty of people that write "JAVA".

1
I did use lua heavily on NDS (that is far less powerful than an IPhone) and it worked quite fast. Fast enough for us to make more than half the logic of one game directly in lua.
Klaim

7

Lua's C implementation is specifically designed to run on embedded devices. It's small and fast (for a scripting language). I would have thought it was fine for at least light tasks.


4

Sure. Scripting logic is highly unlikely to be your bottleneck (you will actually profile with Shark or Instruments, right?). I worked on the iPhone version of Marooned, which used a lot of Lua for game logic. I did a lot of performance tuning, and basically Lua was 0%.

(Lua was a grey area when we released Marooned, but it’s since been officially blessed for iOS development.)



1

It does depend a bit how much of your game logic is embedded in scripts. In general LUA is used as high level glue but a lot of the grunt work happens through C(++). Yes, LUA is fast as far as scripting languages go - your still looking at a slowdown compared to native languages of about 30 to 50 times, so it really depends how much is happening in LUA.


0

You can actually write your entire game in Lua and avoid Java/ObjectiveC/C/C++ altogether.

For cross platform development use Corona. Its free to use until you plan to ship to the App Store or Android Marketplace.

If you want to target the iPhone/Pad/Touch take a look at wax.

Just as a side note @Sean Edwards: I've been involved in shipping five titles targeting Nintendo DS, Wii, Sony PSP, and Xbox360, all of which used the same engine and were scripted in Lua. Its widely used on consoles and mobiles.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.