Yuriy
я правда не понимаю почему все так любят игры в lua. такое ощущение что это язык для геймеров
Игры в lua. Я чего-то не знаю об этом языке... Типа 2 раза if написал и на тебе - скрытый тетрис?
Snusmumriken
Нет, никакого скрытого тетриса. Ты пишешь тетрис и получаешь тетрис.
Snusmumriken
Ты забыл табличку : )
Leon174
Коллеги всем привет! Хочу попробовать написать приложение под айфон и андроид на lua. Есть ли кроссплатформенные луашные фреймворки для этого, или такое не возможно и надо "осваивать" другие языки ? Куда копать ? Честно говоря девайсной разработкой еще не занимался.
Тогда исключительно информативности для и объективности ради стоит и других упомянуть. LÖVE (https://love2d.org/), мелкая и няшная фитюлька. Нравится многим, даже имеет свой awesome список (https://github.com/love2d-community/awesome-love2d). Мобильные платформы заявлены, как в реальности, не в курсе. Говорили, что есть проблемы. Gideros (http://giderosmobile.com/). Тоже симпатичная вещь, но какая-то непопулярная. Вот и сейчас не упомянули. На хабре кто-то назвал ее Love2d на стероидах. Есть свои фишки, есть своя какая-никакая среда. Но почему-то постоянно идет вторым сортом. Amulet (http://www.amulet.xyz/). Вообще не пробовал и не смотрел, но документация создает впечатление серьезной вещи. Постоянно релизится. Есть еще Cocos2d (https://www.cocos.com/en/products#Cocos2d-x), но никакущая документация убила весь мой интерес к нему. Говорят, очень популярен на китайщине.
Snusmumriken
Да, а ещё есть уютный чатик по ловке https://t.me/love2d_ru И уютный чатик по короне https://t.me/CoronaRu
Yuriy
🤦‍♂
Snusmumriken
А в чём проблема? Box2d в зубы и вперёд. В ловке есть, в короне тоже присутствует.
Yuriy
Дело в причино-следственной связи
Snusmumriken
Я вот недавно засел за факторио, и там можно мутить луями сложные изменяющиеся со временем или от действий карты и сценарии. Или я такой поставил legend of grimrock, а там вся триггерно-скриптовая часть на луях. В целом, если в игрушке в приницпе возможны скрипты, с вероятностью >80% это будет угадай что.
Anonymous
Пифон!
Anonymous
Пайсон
Yuriy
питон только у пошаговых Там торопиться некуда
Snusmumriken
Да не, если ограничить питон по функционалу, чтобы он не ИИ управлял и не командовал графическими эффектами, а раз в N тиков проверял соблюдение правил игры и определял что "кто-то победил/проиграл" или "с прошлой волной врагов игрок рассправился, надо наспавнить новых, вот этих вот" — питон справляется, но встраивать его тот ещё геморрой. Я мутил на pygame вполне себе нагруженные штуки, но там неизвестно откуда появляются просадки производительности.
Snusmumriken
https://hsto.org/webt/tl/sz/vt/tlszvtgabk5jcjljesri56wg6xc.jpeg https://hsto.org/webt/2k/ge/da/2kgedai80rfduvhogj6ooaxrog8.jpeg Во, пара фотачек. Внутри куба — raspberry pi, на ней запущено два питоновых приложения: 1. графический интерфейс на pygame 2. сервис, который по сети принимает трёхмерный массив битиков из графического интерфейса, и рулит диодами: очень быстро переключает слои (~200 раз в секунду) и заполняет у них сдвиговые регистры. Питон показывает себя неплохо, но заметно стрёмное мерцание.
Andrey
Кстати по поводу производительности. В PHP есть модуль xhprof - что он дает - ты его подключаешь, и он тебе показывает сколько каких вызовов было, откуда куда, сколько по времени исполнялось итд. Фигачится xml файл, или в БД. Очень удобно для рефакторинга и что бы надавать по ушам разрабам. В lua есть что то подобное что бы не самому считать таймы?
Snusmumriken
Кстати по поводу производительности. В PHP есть модуль xhprof - что он дает - ты его подключаешь, и он тебе показывает сколько каких вызовов было, откуда куда, сколько по времени исполнялось итд. Фигачится xml файл, или в БД. Очень удобно для рефакторинга и что бы надавать по ушам разрабам. В lua есть что то подобное что бы не самому считать таймы?
Профилировщики на любой вкус http://lua-users.org/wiki/ProfilingLuaCode Другое дело что любой профилировщик очень, очень сильно бьёт по производительности, поэтому к цифрам не надо присматриваться, анализируя общую картину в условных процентах. Если понадобятся прям точные данные — находишь функцию которая чот подозрительно много жрёт, и лепишь счётчик времени её выполнения вокруг.
Andrey
о, супер. ну его же можно отключать.
Snusmumriken
Включаешь только для общего анализа. Для частного — уже что-то своё делаешь.
Andrey
я так и делаю на проекте включаю только когда надо посмотреть где накосячено
Snusmumriken
Я накатал тупейший но быстрый профилировщик, типа ставишь точку "начать записывать эту фигню", а потом такой: "закончить записывать эту фигню". Можно вызывать много раз, показывает общее время вызовов и время последнего вызова. https://pastebin.com/qYrT6eJ4
Andrey
вызов цикла в цикле и еще в цикле и рекурсии - достаточно один раз включить на большом проекте и сразу понять кто виноват, хотя это был слоненок :) очень наглядно приучает людей к SOLID
Andrey
иногда скорость серверного запроса можно в сотни раз увеличить таким образом. особенно если много легаси
Snusmumriken
Она для теста производительности лукапов : )
Snusmumriken
Видишь строчку if ... then return profiler end? Если ты реквайрнешь этот скрипт, он вернёт модуль. А всё что ниже — тесты, которые запустятся если скрипт был вызван самостоятельно.
Andrey
понял.
Andrey
А чот в короне не нахожу всяких гуишных конструкторов типа кнопки меню формы стандартные
Andrey
вижу библиотеку с физикой только :)
Snusmumriken
А, берёшь прямоугольник и вешаешь тап-обработчик : ) Можно ещё текста нафигачить.
Andrey
блин. это сурово
Snusmumriken
Нет, это не сурово а как раз напротив легко и приятно, и ты полностью можешь задизигнить что хочешь.
Snusmumriken
В ловке нет даже обработчиков, слоёв и групп, всё ручками и aabb-коллизией.
Andrey
не ну реально сурово. это мне надо расчитывать координаты кнопок ? :)
Andrey
а, вот спасибо!
Snusmumriken
Вот и всё (тут даже кучка лишнего, вроде заполнения таблички pos и вычисления координат) handleMove — это обычная функция которая принимает ивент, читани про ту штуку.
Andrey
:)))
Andrey
Я рисовать не умею. Даже если программа рисует. Когда то делал аквариум тамагочи на экшен скрипт - у меня там у рыб хвосты отваливались.
Andrey
Лучше уже что то стандартное использовать размер кнопко не принципиален.
Snusmumriken
Нативные вроде тоже есть.
Snusmumriken
https://docs.coronalabs.com/api/library/widget/newButton.html
Andrey
дада, уже было, нашел, спасибо!
Snusmumriken
Карочи, корона изначально придумана для игрушек. Но приложения, даже с довольно сложной вёрсткой и дизигном на ней тоже можно сделать, и это даже не очень сложно. Да, это не android studio, которая даёт миллиард шаблонов, но тут можно с определённым комфортом сделать кроссплатформенные приложули на луях.
Andrey
Да понял уже. И еще глупый вопрос Нужна библиотека которая умеет по дефолту ходить в MSSQL, ORACLE, LDAP, POSTGRE и забирать оттуда селектами (вьюхами) данные.
Snusmumriken
А у тебя бд прям на телефоне?
Andrey
нет, это разные проекты
Snusmumriken
Просто если БД где-то захостена — сделай простенький бекенд, который на запрос будет всё верифицировать, ходить в произвольную базу и выдавать какой-нибудь жысон с данными. Просто так светить свою базу на весь интернет и пускать в неё всех подряд — как-то хреновато.
Snusmumriken
А, я подумал что ты из приложения на мобиле хочешь лезть в базу, у меня глюки.
Andrey
Не совсем. Мы делаем б2б продукт, в том числе коробку у нас есть API но вот всякие крупные клиенты хотят интеграцию со своими системами. Универсальный настраиваемый коннектор. А то что в телефоне это к редмайну что бы контролировать разрабов
Snusmumriken
Тогда нужны уточнения. У вас на бекенде та же луа? А с ffi или нет?
Andrey
нет на бэкенде PHP JAVA и все такое. но будет интерфейс по настройке всяких коннекторов, там через API закачка к нам
Snusmumriken
Ну тогда нужна пыховая или жавовая библиотека (или их комплект), которая лазает по базам. Это уже не ко мне, я луёвый бекендщик : )
Andrey
Ты не понял. В интерфейсах будет луашный код. Он будет запускаться и коннектиться к нашему API. Делать на пыхе не безопасно очень. В луе можно запретить все что не надо.
Andrey
т.е. местные админы сами настраивают что откуда и куда.
Andrey
через веб-морду
Snusmumriken
Тады luasql https://keplerproject.github.io/luasql/manual.html Каких баз не хватает — такие доберёте отдельными либами.
Andrey
Пойдет. И еще для LDAP есть что ?
Snusmumriken
Ну наверное https://github.com/Kong/lua-ldap
Snusmumriken
Но в целом, оно просто гуглится
Andrey
Latest commit 3299998 on 3 Mar 2016 у них там все поменяется скоро. спасибо, посмотрю
Snusmumriken
Ну вот ищо один, вроде мейнтенится https://github.com/lualdap/lualdap (не первая, а вторая строка гугла)
Andrey
судя по мануалу, как раз то что нужно! Спасибо!
Andrey
Спасибо!
Александр
драсти, а в луа можно задать динамический массив два на два? И как?
Ivan
динамический или 2х2?
Snusmumriken
local arr = {} for i = 1, 2 do arr[i] = {} for j = 1, 2 do arr[i][j] = 0 end end arr[1][2] = 1
Александр
Хм, у меня видимо проблемы с терминологией, для меня динамика в размерах
Александр
Snusmumriken
У луа есть таблички, это не совсем массивы. И они динамические, но при попытке обратиться по несуществующему индексу скажут "nil".
Александр
Они как-то иначе задаются?
Snusmumriken
Да, хеш-таблички. И ещё много что.
Snusmumriken
arr.key = "foo" print( arr['key'] ) --> foo
Snusmumriken
(а ещё луёвые таблички могут быть классами, могут быть объектами, числами и строками, могут быть чем хочешь)
Александр
arr.key = "foo" print( arr['key'] ) --> foo
Оо, пасибо, ато я ман выгуглил там предлагают сразу в array["key"] = val
Snusmumriken
Доступ через точку для простых строковых ключей работает в обе стороны.
Snusmumriken
Можно конструировать табличку сразу ручками: local arr = { {0, 0}, {0, 0}, key = "foo", ["weird key"] = "bar" }