Snusmumriken
Нет, никакого скрытого тетриса. Ты пишешь тетрис и получаешь тетрис.
Yuriy
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 есть что то подобное что бы не самому считать таймы?
Andrey
о, супер. ну его же можно отключать.
Snusmumriken
Включаешь только для общего анализа. Для частного — уже что-то своё делаешь.
Andrey
я так и делаю на проекте включаю только когда надо посмотреть где накосячено
Snusmumriken
Я накатал тупейший но быстрый профилировщик, типа ставишь точку "начать записывать эту фигню", а потом такой: "закончить записывать эту фигню". Можно вызывать много раз, показывает общее время вызовов и время последнего вызова.
https://pastebin.com/qYrT6eJ4
Andrey
вызов цикла в цикле и еще в цикле и рекурсии - достаточно один раз включить на большом проекте и сразу понять кто виноват, хотя это был слоненок :) очень наглядно приучает людей к SOLID
Andrey
иногда скорость серверного запроса можно в сотни раз увеличить таким образом. особенно если много легаси
Andrey
Snusmumriken
Она для теста производительности лукапов : )
Snusmumriken
Видишь строчку if ... then return profiler end?
Если ты реквайрнешь этот скрипт, он вернёт модуль. А всё что ниже — тесты, которые запустятся если скрипт был вызван самостоятельно.
Andrey
понял.
Andrey
А чот в короне не нахожу всяких гуишных конструкторов типа кнопки меню формы стандартные
Andrey
вижу библиотеку с физикой только :)
Snusmumriken
А, берёшь прямоугольник и вешаешь тап-обработчик : )
Можно ещё текста нафигачить.
Andrey
блин. это сурово
Snusmumriken
Нет, это не сурово а как раз напротив легко и приятно, и ты полностью можешь задизигнить что хочешь.
Snusmumriken
В ловке нет даже обработчиков, слоёв и групп, всё ручками и aabb-коллизией.
Andrey
не ну реально сурово. это мне надо расчитывать координаты кнопок ? :)
Gil
Snusmumriken
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
(а ещё луёвые таблички могут быть классами, могут быть объектами, числами и строками, могут быть чем хочешь)
Snusmumriken
Доступ через точку для простых строковых ключей работает в обе стороны.
Александр
Snusmumriken
Можно конструировать табличку сразу ручками:
local arr = {
{0, 0},
{0, 0},
key = "foo",
["weird key"] = "bar"
}