Чи варто використовувати Lua для логіки гри на мобільних пристроях?


33

Як і справді вище,

Я пишу гру на базі андроїд у вільний час (андроїд, тому що це безкоштовно і у мене немає реальних прагнень робити щось комерційне).

Логіка гри походить від дуже типової моделі на основі компонентів, за якою суб'єкти існують і мають до них приєднані компоненти, а повідомлення надсилаються туди-сюди для того, щоб все сталося.

Очевидно, що шар для його дійсного виконання є тонким, і якби я писав версію iPhone для цього додатка, мені доведеться переписати рендерінг і основний драйвер (цієї системи на базі компонентів) в ціль C.

Суб'єкти - це просто плоскі файли, що визначають назви компонентів, які потрібно додати, а самі компоненти - це прості, цільові об'єкти, що містять логіку сутності.

Тепер, якщо я записую всю логіку для цих компонентів на Java, мені доведеться переписати їх на Objective C, якщо я вирішив би зробити порт iPhone. Оскільки основна частина логіки програми міститься в цих компонентах, вони в ідеальному світі будуть записані якоюсь платформою-агностиком, мовою / сценарієм / DSL, яка потім може бути просто завантажена в додаток на будь-якій платформі.

Мене, однак, вважають, що це не ідеальний світ, і що продуктивність Lua тощо на мобільних пристроях все ще не начертається, що накладні витрати занадто великі, і пізніше я зіткнуся з проблемами, якщо я пішов по цьому маршруту?

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

Відповіді:


17

Що стосується мов сценаріїв, Lua дуже швидкий, але, як і все, він змінюється залежно від процесора. Наприклад, Lua не буде чудовим на консольній платформі, оскільки він, як правило, дуже гіллястий, а деякі консольні платформи розгалужуються дуже повільно. Щоб найкраще відповісти на ваше запитання, я б запропонував запустити деякі орієнтири. Подивіться, як швидко Lua виконує деякі різні алгоритми на пристрої. Я підозрюю, що ви будете добре, доки у вашому коді сценарію не будете робити важкої математики чи ітерації. (Ви все одно не повинні цього робити. Вони сценарії. Робіть розрахунки в двигуні.)

При цьому сценарій не є срібною кулею для незалежності платформи. Можливо, вам доведеться перезаписатись у Obj-C, якщо ви портуєте на iPhone через обмеження Apple щодо виконання динамічного коду. У мене немає посилання назовні, але це, можливо, варто прочитати. Apple ледве дозволяє керувати кодом (ви повинні отримати спеціальний дозвіл на запуск спеціального дистрибутива). Вони, звичайно, не дозволять реалізувати Lua в магазині додатків.

[редагувати] Мабуть, я помилився з приводу речі Lua на iphone. Погляньте на коментарі нижче.


9
Lua широко використовується в додатках iPhone, і вносилися зміни в умови, які це дозволяють. Дивіться тут: appleoutsider.com/2010/06/10/hello-lua
Колін Гісласон

5
Багато консольних програм фактично використовують LUA. Так, це галузеве - але це не має значення, якщо ви керуєте логікою високого рівня. Тільки не зателефонуйте до нього з вашого циклу візуалізації;) Наскільки я знаю, LUA для ігор чудово підходить під час останніх змін до договору розробника - є безліч ігор, якими керує LUA. Але як і будь-яка розробка на закритій платформі, попросіть у власника платформи (тобто Apple) остаточні відповіді. Також не потрібно Obj-C - iPhone дозволяє C / C ++ просто чудово. (Я рекомендую вам робити що-небудь UIKit в Obj-C, хоча. Знижений фактор болю)
Рейчел Блюм

7
Іди іди в чарівну мильну коробку. Луа - це іменник не абревіатура, ви ніколи не писали б JAVA. Луа означає місяць. Ви б не написали МОН. спасибі - нацист Лау.
deft_code

2
На жаль, я знаю безліч людей, які пишуть "JAVA".

1
Я дійсно використовував Lua в значній мірі на NDS (це набагато менш потужно, ніж на IPhone), і він працював досить швидко. Досить швидко, щоб ми зробили більше ніж половину логіки однієї гри безпосередньо в луа.
Клаїм

7

Реалізація C Lua спеціально розроблена для роботи на вбудованих пристроях. Це невеликий і швидкий (для мови сценаріїв). Я б подумав, що це добре для хоча б легких завдань.


4

Звичайно. Логіка сценаріїв навряд чи буде вашим вузьким місцем (ви насправді будете мати профіль із Shark або Instruments, правда?). Я працював над версією iPhone Marooned, яка використовувала багато Lua для логіки гри. Я багато працював у налаштуваннях продуктивності, і в основному Lua був 0%.

(Lua була сірою областю, коли ми випустили Marooned, але з тих пір він офіційно благословенний на розвиток iOS.)


1

Див. Http://code.google.com/p/android-scripting/ щодо рекомендованого способу створення сценаріїв на Android. Lua все ще не дуже добре підходить на платформі Android, оскільки для цього потрібна C. Звичайно, ви можете використовувати NDK, але це не срібна куля.


1

Це трохи залежить від того, наскільки ваша логіка гри вбудована в сценарії. Взагалі LUA використовується як клей високого рівня, але багато бурхливої ​​роботи відбувається через C (++). Так, LUA швидкий, наскільки йде мова скриптів - ви все ще дивитесь на уповільнення порівняно з рідними мовами приблизно від 30 до 50 разів, тому це дійсно залежить від того, скільки відбувається в LUA.


0

Ви можете фактично написати всю свою гру в Луа і взагалі уникати Java / ObjectiveC / C / C + +.

Для розробки крос-платформ використовуйте Corona . Її безкоштовно використовувати, поки ви не плануєте відправляти в App Store або Android Marketplace.

Якщо ви хочете націлити на iPhone / Pad / Touch, подивіться на віск .

Як бічна примітка @Sean Edwards: Я брав участь у доставці п'яти назв, націлених на Nintendo DS, Wii, Sony PSP та Xbox360, які використовували один і той же двигун і були написані в Луї. Його широко використовують на консолях і мобільних пристроях.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.