Gamedev


Ответить в тред Ответить в тред

Check this out!
<<
Назад | Вниз | Каталог | Обновить тред | Автообновление
349 51 95

love2d Аноним 22/10/16 Суб 16:13:06 3054971
(1008Кб, 1191x670)
1191x670
Кроме меня и пары анонов пробовали лов2д. По мне так штука прикольная. Тут, кстати, можно не задумываться %о всякой хуйне% и сразу приступить к алгоритму самой игры. Нравится этот фреймворк, очень классный. Расскажите че написали то на нем, аноны!
Аноним 22/10/16 Суб 16:24:02 3054982
>>305497 (OP)
>Тут, кстати, нихуя нет и надо велосипедить все самому
Пофиксил
Аноним 22/10/16 Суб 16:33:02 3055013
>>305497 (OP)
Пилю изометрическую 2д рпг. Велосипедю свой физон и компонентную архитектуру.
Аноним 22/10/16 Суб 17:22:07 3055154
>>305501
Как должен выглядеть физон в изометрическом 2д?
Аноним 22/10/16 Суб 17:30:37 3055185
>>305515
Я пилю просто вид сверху, а отображать буду просто с некоторыми преобразованиями (координата Y сжата в 2 раза, отрисовка определенных спрайтов на определенные углы поворота и прочее).
Аноним 22/10/16 Суб 20:59:02 3055446
>>305518
Скинь потом заготовки, когда провалишься. Просто хочу сам разобраться, как это все в коде выглядит.

Имею ввиду, как на уровне архитектуры всё организуется, модули там и структура.

Я просто всё всегда во одном файле держу. Жутко неудобно, когда код достигает тысячи строк, уже просто сложно ориентироваться по нему становится.
Аноним 22/10/16 Суб 21:02:19 3055457
>>305544
>когда провалишься
Нахуй пошел, пидор.

Я и так планировал выложить часть исходничков на форум лова.
Аноним 23/10/16 Вск 12:32:41 3056298
>>305544
Использовать 'require' внутренние убеждения не позволяют?
Аноним 24/10/16 Пнд 09:10:35 3058329
(59Кб, 1145x733)
1145x733
Ну, катаю на love всякую хуиту.
Есть кучка прототипов с крайне хуёвой структурой, написанные б-г знает когда, после этого я застрял в тренировке на кошкак ака библиотечно-модульном состоянии.
Накатал кучу библиотек, от векторных на ffi (риальне быстрые, скорость и память на уровне C), только что запилил анимационную, со спрайтбатчами (тысячи и миллионы анимированных чуваков на экране за один вызов love.graphiccs.draw, видяха минимально грузится) и переиспользованием спрайтов (спрайтбатчи не поддерживают явное удаление, поэтому лишний буфер "удалённых" спрайтов, которым указан нулевой размер) и обрезка по видимому пространству (то что не влезает в экран - обнуляет высоту/ширину, в результате разгружается видяха) и ленивыми вычислениями текущего кадра. Кривоватая система анимированных объектов, которые могут состоять сразу из кучи спрайтов, а ля персонажи старбача, состоящие из тушки/рук/ног/башки/оружия/обвеса, масштабирующиеся, вращающиеся и сдвигающиеся корректной группой, и с теми же спрайтбатчами, даже если состоит из нескольких атласов (один спрайтбатч на атлас).
Сейчас принялся за сеть.
Либу сетевого взаимодействия с сервером (UDP), следящим за отваливающимися клиентами, колбекающим на каждый чих, добавляющим/удаляющим клиентов, считающим пинг и потерянные пакеты уже замутил.
Мутю софтину (можно и на чистой lua + luasocket), которая работает как "DNS"-сервер: серверы посылают ему запросы типа "добавь меня по такому-то имени", и эта штука добавляет их в список, периодически пингуя, чтобы NAT не проваливался. Клиенты посылают запрос, мол, "Дай чуваков с таким-то именем по маске", и софтина возвращает.
Пример запрос-ответа:
сервак с адресом '11.11.1.1:1488': 'set 2ch', ответ 'OK'
сервак с адресом '22.22.2.2:228': 'set 4chan', ответ 'OK'
клиент: 'get ch' (маска)
Ответ: '2ch 11.11.1.1:1488
4chan 22.22.2.2:228'
Да, отвечать на пинги от софтины обязательно, иначе отрубит.

Ответы от софтины могут быть в различных форматах, от json до csv, выбор произвольный.
Мне норм. Основная цель - связывать всякие мобилки которые сидят за NAT, получая прямой доступ: когда игрок выбирает сетевую игру, игра логинится в данной софтине, и с её помощью находятся новые игроки.
Такие дела.
Аноним 24/10/16 Пнд 09:26:04 30583410
>>305832
Нихуево так мутишь там. Где-то можно глянуть код всего этого, или лично для себя все делаешь?
У тебя, кстати, проверка IP не совсем правильная, она будет позволять делать номера > 255.
Аноним 24/10/16 Пнд 09:27:45 30583511
(4844Кб, 300x205)
300x205
>>305832
Продолжение.
В целом, если ОП нуб, очень не советую ему лове. Тут реально нихуя нет, и всё приходится делать ручками.
С одной стороны, это идеально для маленьких игрушек, потому что не подгребается двести мегабайт лишних библиотек и прочего говна, плюс полная свобода. Во втором констракте, например, свободы нет от слова нихуя: только марио или спейс инвейдерс, только хардкор. Начинал с него, охуел от попыток хоть какой-то процедурной генерации.
С другой стороны, лове и не позиционирует себя как движок.
Это фреймворк. Набор функций, апишка для вызовов команд OpenGL/OpenAL/2dBOX и прочей херни.
И так и надо, не для слабаков чай строят.
Зато код легко портируется куда угодно без изменений (разве что на мобилки надо адаптировать шейдеры на GLSL ES), плюс скорость (FFI/Jit) даст фору яве и прочей хуйне.
Быстрее только C++, и то не каждый раз.
Аноним 24/10/16 Пнд 09:30:26 30583612
>>305834
Есть проверки но позднее.
Мутю для себя, гитами не пользуюсь, только гугл-драйв для синхронизации/бекапов.
Могу покидать всякую фигню, плюс есть группка ВК https://vk.com/club61441078, в которой время от времени что-то появляется
Аноним 24/10/16 Пнд 10:06:33 30584113
Набор того что есть на пастбине:

1. Система состояний с референсом, специально для этого ушлёпка (>>305544)
http://pastebin.com/9rgH4BAj
Новые состояния можно загружать сразу из файла типа того: "gamestate:new('main menu', require 'main_menu')", файл main_menu.lua должен возвращать таблицу с функциями load/update/draw/keypressed/keyreleased и прочими любыми колбеками. А можно и просто таблицу хуярить. Состояния переключаются синглтоном из либы. Охуительно удобно, благо каждое состояние имеет своё пространство имён под ключом self.

2. Просто конечные автоматы, из которых можно делать другие конечные автоматы. Фактически, объект с системой состояний, который делает произвольные штуки.
Колбеки - load/update/unload, плюс своё пространство имён, очевидно.
http://pastebin.com/Fsd9YTb0

3. Вариант либы анимаций. Довольно специфическая и недопилен референс, но работает.
http://pastebin.com/XAQWxdud
Аноним 24/10/16 Пнд 10:28:37 30584314
>>305836
>Мутю для себя
Так ты игровые проекты какие-то делаешь, или просто всякие штуки реализовываешь на лове?
Мб можно было бы скооперироваться, велосипедить вместе.
Аноним 24/10/16 Пнд 10:35:27 30584415
(53Кб, 896x603)
896x603
(152Кб, 1492x850)
1492x850
>>305843
Да, игровые проекты.
Велосипедю для них же, ничто не просто так, всё для дела.
В данный момент, скооперирован с художником, пилим ведро-дрочильню. Образцы графона на пиках.
Тут в другом вопрос: насколько ты знаешь lua, love2d, FFI, JIT, паттерны проектирования, паттерны ООП, алгоритмы (типа коллизий/пространственной индексации), а так же линал, матстат и прочую хуету. Без этого, просто, нет большого смысла пилить что-то на love, потому что изучил новый паттерн - тут же хочется всё переписать. Я третий год непрерывно кодю, поэтому у меня приличный запас знаний, плюс оконченная математическая вышка, которая что-то да дала.
Так, ежели чо, могу помогать чем угодно, благо написана тонна говна, которую можно использовать где угодно, и накоплен приличный багаж инфы.
Аноним 24/10/16 Пнд 11:23:52 30584716
>>305844
>нет большого смысла СОВМЕСТНО пилить что-то на love
Фикс.

В одиночку - есть смысл, за милую душу.
а годик сделать пяток змеек/тетрисов/астероидсов/понгов, залезть в сетевой код (Сетевая змейка, о да. Кстати, отличный старт),
попутно вызубрив ООП, основные паттерны, научившись в сишку и собственные подрубаемые dll-библиотеки с наборами функций для luastate.
Аноним 24/10/16 Пнд 11:28:35 30584917
>>305844
Да, я согласен, что лов и луа не для новичков. Особенно учитывая, что классы в луа реализуются своеобразно.
У меня есть и опыт некоторый, и знания, и также тяга к знаниям, и желание раскуривать и запиливать что-то свое.
Недавно как раз коллизии на SAT написал для боксов с углом (делаю аркадную физику, пробовал бокс2д закостылить, но некоторые моменты мне не понравились). А сейчас в процессе запиливания Entity Component Systems.
Аноним 24/10/16 Пнд 11:37:46 30585218
(156Кб, 1280x720)
1280x720
>>305849
Вай малаца.
На тему классов. Самая короткая либа классов с наследованием на пике. Моя. Любимая.
Мне просто лень подгребать файл с ООП на очередную крошечную прожку, предпочту скопипастить функцию. На совсем крошечные либы с полутором классов, на класс-таблицу просто вешается
setmetatable(class, {__call =
function(self, ...)
local o = {}
o.x, o.y = 10, 20
self.__index = self
return setmetatable(o, self)
end}),
этого достаточно для обычного ООП.
Не, это просто и можно не заострять внимание на специфичности ООП в lua.
Оно ничем особо не отличается от питонового/жаваскриптового.
Аноним 25/10/16 Втр 15:40:41 30599119
Аноним 25/10/16 Втр 18:34:12 30600920
>>305844
>ведро-дрочильню
Только сейчас у меня в голове сработал триггер, что ты пилишь под мобилки на лов2д (я же правильно понял?)
Как оно вообще с производительностью и стабильностью? Андроид же вроде пока еще не "официально" разрабами поддерживается?
Аноним 26/10/16 Срд 02:01:22 30604221
Аноним 26/10/16 Срд 10:35:00 30608222
>>306009
Всё охуенно и с тем и с другим, проблем не было вообще, ну только шейдерный диалект чуть другой.

>>306042
Вы оба долбоёбы чтоль? Дают же бесплатный ZeroBrane, в котором есть и дебаг и лайвкодинг. Как вы блять вообще игры без лайвкодинга пишете?
Аноним 26/10/16 Срд 11:25:08 30608623
Расскажите вообще в двух словах, что это и почему я должен посмотреть это, а не продолжать с безумным смехом ковыряться в Construct 2 с его драгндроп программированием
Аноним 26/10/16 Срд 12:35:21 30608924
>>306086
И лове, и твой констракт - это одинаковые хуйни без задач, можешь успокоиться.
Аноним 26/10/16 Срд 12:43:22 30609225
>>306089
love2d это мультимедийный фреймворк общего назначения, обёртка на lua для сишной sdl2 и некоторых других вещей. На нём можно написать что угодно вообще. Если к тому же знаешь сишечку, то можно дописывать себе модули на ней и втыкивать их в своё поделие без проблем вообще. В частности, полагаю, что к стимворксу там обращение можно запилить без всяких прокладок за 5 минут.

Но это не игровой движок по сути, чтобы в нём появились сцены, камеры, твининги и прочая хуета, можно взять, например, hump, который по сути дефолтный уже чисто игровой движок для love2d.

констракт2 это не про программирование, это про что-то другое, я так не умею, мне проще кодом описать что я хочу, чем мышкой накликивать. Меня даже юнити в ступор вводит.
Аноним 26/10/16 Срд 17:59:01 30613526
>>306092
HUMP - не движок, это чисто набор тулзов:
Камера, векторы, состояния, ООП и сигналы а ля ивенты.
Движок - это готовая для наполнения контентом система.
На love сделан GRID, и это уже движок, с энтити-менеджерами, анимациями, клиент-серверной моделью и прочей фигнёй.
Читать тут: https://love2d.org/forums/viewtopic.php?f=5&t=80115
Аноним 26/10/16 Срд 18:01:02 30613627
>>306082
>Как вы блять вообще игры без лайвкодинга пишете?
Легко.
Самурай без меча подобен самураю с мечом.
Только без меча.
Аноним 26/10/16 Срд 18:08:41 30613728
>>306092
Обращения к SteamAPI через FFI.
1. Грузим steamapi.dll.
2. Дефайним функции.
3. Дёргаем методы.
4. ?????
5. PROFIT.
Подробнее тут: http://luajit.org/ext_ffi_tutorial.html
Кстати, игровые тайловые карты значительно эффективнее хранить в виде статических сишных массивов или массивов из сишных структур.
Пример векторной FFI-библиотеки, где каждый вектор - cdata:
http://pastebin.com/i7qC1aKn
Аноним 26/10/16 Срд 18:46:01 30614629
>>306137
Не проще тогда на сях и sdl писать игру?
Аноним 26/10/16 Срд 18:55:35 30614830
>>306146
Не совсем.
Это баланс между сахарной и супер-удобной высокоуровневой Lua и супер-быстрыми и экономичными сишными биндингами.
Обёртка вокруг сишной фигни делает её такой же сахарной и высокоуровневой как Lua, вместе с собтвенной скоростью и экономичностью.
Где-то валялся генератор сишных cтруктур любой размерности, с итераторами по этим самым размерностям для Lua. Да, к ним подрубаются метатаблицы, поэтому ООП тоже можно мутить.
Аноним 26/10/16 Срд 19:03:38 30614931
vec.jpg (152Кб, 1280x720)
1280x720
drones.gif (298Кб, 427x355)
427x355
>>306137
Да, пример работы векторов.Они неплохо цепочатся, кстати.
Аноним 09/11/16 Срд 20:05:35 30874032
test.png (11Кб, 385x361)
385x361
>>305497 (OP)
Решил запилить свою реализацию ЕЦС. Функционала пока минимально, да и оптимизации никакой, решил сначала спроектировать удобное использование.
Собственно, дошел до такого кода простейшего компонента и простейшей системы (причем в самом "движке" ничего дополнительного не надо указывать):

function Component_Position(_x, _y)
local self = {
name = "position",
x = _x or 0,
y = _y or 0 }
return self
end

function Systems.Drawing()
local self = Systems.Base()
self.name = "drawing"

function self.draw()
local entities = self.get_entities()
for i, e in pairs(entities) do
local p = e.position
love.graphics.circle("fill", p.x, p.y, 10)
end
end

return self
end


Весь код: http://pastebin.com/7de48LxW (пока в одном файлике, ибо тестирую)
Аноним 09/11/16 Срд 21:11:37 30875933
>>308740
Попробуй изучить ООП.
Ты пишешь похоже на ООП, но не совсем.
Двоеточие вместо точки, подставляет сам объект первым скрытым аргументом функции [code]
obj = {}
function obj.add(self, value)
table.insert(self, value)
end
это то же самое что
funtion obj:add(value)
table.insert(self, value)
end

Вызывать аналогично:
obj.add(obj, 30)
obj:add(30)
[/code]

Вот тебе пример класса с объектом:
[code]
Class = {}
function Class:new(x, y, r)
local o = {x = x or 0, y = y or 0, r or 30}
self.index = __self
return setmetatable(o, self)
end

function Class:draw()
love.graphics.circle('line', self.x, self.y, self.r)
end

object = Class:new(10, 20, 30)
object:draw()
[/code]

Почитай эту штуку:
http://tylerneylon.com/a/learn-lua/
Аноним 09/11/16 Срд 21:54:16 30876234
Аноним 09/11/16 Срд 22:19:47 30876735
>>308762
Это не совсем ООП, потому что ты создаёшь полные копии объектов.
Смотри в чём суть: методы объекта хранятся не в нём самом, а в классе.
У тебя же - каждый объект хранит в себе весь набор "методов". Не могу сказать что это плохо для синглтонов, но это неимоверное засирание памяти для массовых штук.
Плюс объекты создаются дольше: провесить одну ссылку на класс значительно дороже чем создавать ещё одну функцию, выделять ей память и так далее.
В подобных замыканиях есть смысл, если тебе нужны приватные методы/поля, и то, старайся их минимизировать.
Аноним 09/11/16 Срд 22:26:20 30876936
>>308767
P.S. Освой мета-таблицы уже наконец.
Работать с lua не используя самый мощный её механизм - пустая трата времени.
Я сам, осваивал в три захода, с перерывами в пару месяцев. До этого делал процедурные штуки, которые имели довольно стрёмную структуру, просто потому что чтобы сделать процедурами что-то сложное и притом расширяемое - приходится быть самим Кнутом или Дейкстрой, предварительно рисуя кучу UML-ек, чтобы из головы не вылетала структура.
ООП (с несколькими дополнительными приёмами, типа чистых модулей, составления структуры директорий и дерева модулей, вызывающих друг друга) позволяет делать хуяк-хуяк и в продакшн, всего по паре-тройке предварительных макетов архитектуры.
Хех, сейчас работаю программистом на lua.
Довольно весело.
Аноним 09/11/16 Срд 22:49:22 30877237
>>308767
Да, памяти действительно больше отжирает, и создаются долго, но зато по скорости в самом использовании вроде как получше даже: http://lua-users.org/wiki/ObjectOrientationClosureApproach
Ну и из плюсов все-таки приватные поля.
>приватные методы/поля, и то, старайся их минимизировать
Обычно вроде наоборот стараются загнать все в приватные и делать геттеры-сеттеры, чтобы в будущем при использовании класса не напортачить чего лишнего.
>>308769
>Освой мета-таблицы уже наконец.
Недавно-таки раскуривал, написал свой класс для 2д вектора со всеми арифметическими функциями, правда все равно пока еще не совсем уверенно владею (всякие индексы, ньюиндексы и прочее).
>Хех, сейчас работаю программистом на lua.
О чем работка?
Вообще недавно только подумал о всяких оптимизациях кода на луа (для игр), и обнаружил много всяких интересных моментов этого языка, что прям захотелось поглубже изучить луа.
Аноним 09/11/16 Срд 23:20:00 30877838
>>308772
Работка - прямо сейчас - хайлоад-платформа для микросервисов.
Потом будут сами микросервисы. Ну там, логгирование в бд, с пиками в 100к запросов в секунду.
Не love2d, чистая lua с несколькими либами типа lanes для многопоточности.
Аноним 09/11/16 Срд 23:42:06 30878139
>>308778
Прикольно, видимо луа все-таки еще огого (хотя, наверное, в таких вещах больше используется как обертка над Си, нежели полностью самостоятельный язык, потипу питона или еще чего).
>lanes для многопоточности
Вот это интересно кстати, планировал свой ECS фреймворк попробовать распараллелить (там как раз системы для обработки сущностей должны хорошо параллелиться).
Аноним 10/11/16 Чтв 00:13:02 30878540
>>308781
У Lua прикол в том, что она встраивается проще чем питон, сама по себе быстрая и лёгкая: единственные скрипты, которые реально используются в дохлых микроконтроллерах без особой памяти, плюс FFI, которая даёт возможность фактически писать на C на Lua, заодно, подключая совершенно любые сишные библиотеки, даже не адаптированные.
Фактически, это скриптовый и сахарный вариант няшной сишки с портабельностью и прочими шлюхами. Просто не распиарено, и как следствие - мало либ и сравнительно небольшое комьюнити. Так - очень универсальная штука, которая ещё и приятно выглядит и хорошо работает.
Аноним 10/11/16 Чтв 06:46:26 30880041
>>308785
Ты чего то не понимаешь, а именно того что луа не полноценный язык а скриптопараша. Его дохуя где используют, особенно если нужна поддержка моддинга. Но сколько бы ты говна не навесил на скриптопарашу, она скриптопарашей и останется, для выполнения своих узких целей, и сишку при всем твоем желании она не заменит.
Аноним 10/11/16 Чтв 08:30:55 30880242
Аноним 10/11/16 Чтв 08:35:26 30880343
Аноним 10/11/16 Чтв 08:41:33 30880444
>>308740
Не храни энтити в системах и убери методы из энтитей.
Аноним 10/11/16 Чтв 09:25:43 30880545
>>308804
А, методы в энтити от старого кода остались, действительно.
На счет того, что и где хранить - пока еще думаю (в системах сейчас вроде только ссылки на сущности хранятся). По идеи в идеале энтити надо преобразовать в айдишник, и где-то хранить массивы только лишь компонентов.
Аноним 10/11/16 Чтв 09:58:43 30880946
>>308805
>что и где хранить - пока еще думаю
Представь, что ты в рантайме добавил компонент. Теперь нужно все системы, которые от него зависят, уведомить об этом. Забыл одну - привет, неведомые баги.
Представь, что ты решил делать игру, где битвы происходят на отдельной карте (ну, или гуи руками делаешь). Теперь при переходе на экран боя (или меню) надо из систем выковыривать сохранённые энтити и где-то их хранить до конца боя. А можно было просто свапнуть менеджер энтитей, и всё само бы работало.
Аноним 10/11/16 Чтв 10:37:57 30881147
>>308809
>добавил компонент. Теперь нужно все системы, которые от него зависят, уведомить об этом
Логически, эти вещи как раз должны вместе идти по идеи. Например, какой-то ответ на коллизию должен быть - добавляем компонент этой коллизии и тут же подписываем сущность на нужную систему, которая именно эту коллизию обрабатывает.
Да, на счет какого-то менеджера сущностей и подумывал.
На счет хранения больше волнует вопрос об оптимальности по объему памяти и по скорости обработки. Если, например, делать массивы компонентов по их типах (массив позиций, массив скоростей и т.д.), то могут быть 2 варианта хранения: 1) когда в массиве индекс компонента строго соответствует айди энтити, но тогда будут "дыры" в массиве; 2) хранить компоненты "плотно", но вводить еще какие-то дополнительные связки индексов или ссылок.
Однако я сейчас только додумал о том, что однотипных компонентов может быть несколько, например за один такт обработки физики было нанесено сразу несколько дамагов одному энтити, тогда надо делать для каждого дамага свой компонент с именем того, кто нанес, и само кол-во дамага, и все эти компоненты далее должны будут системой дамага обрабатываться.
Тогда надо либо хранить по 2-му варианту, либо в менеджере сущностей делать двумерный массив, т.е. хранить массив под сущности, а уже в том массиве конкретной сущности хранить все экземпляры компонентов.
Аноним 10/11/16 Чтв 10:43:07 30881248
es-datastructur[...].png (64Кб, 714x602)
714x602
Аноним 10/11/16 Чтв 12:59:44 30883449
>>308812
Имхо, идея параллельных массивов довольно дурацкая.
Если тебе действительно Очень Нужна Экономия Памяти - используй FFI-структуры.
http://luajit.org/ext_ffi_tutorial.html
Это в сотни и тысячи раз уменьшает расход памяти и даёт быстрый доступ.
Другое дело что оно статичное, поэтому максимальное количество объектов приходится рассчитывать заранее, или хранить в lua-таблице.
Аноним 13/11/16 Вск 21:44:14 30937450
iterselect.png (20Кб, 600x540)
600x540
>>308834
Я подумал, что все-таки не буду углубляться в дикую оптимизацию того, что пока еще вообще не до конца допилено. Но все-таки хочу в итоге организовать все более-менее рационально и удобно средствами Луа. В статье выше все-таки делается расчет на десятки тысяч объектов, мне же сойдет и пару сотен на первое время.

Собственно, сделал энтити идентификаторов, и разделил список всех сущностей и список подписавшихся. Я подозревал, что при изменении структуры на более правильную и наращивании функционала вся структура кода будет идти немного косо, но не думал, что настолько рано. Однако схему создания компонентов и систем в моей реализации удалось сохранить. Заодно пришлось разобраться с итераторами и запилить собственный.

local entities = self.get_entities()
for i, e in iter_select(entities) do
local p = e.position
love.graphics.circle("fill", p.x, p.y, 10)
end

http://pastebin.com/QZzf2Uwh
Аноним 13/11/16 Вск 22:06:37 30937551
>>309374
Десятки тысяч упаковываются в одну lua-таблицу, как ffi-структуры.
Вкури это уже и не еби себе моск.
Как правило, чем проще решение тем лучше.
Аноним 13/11/16 Вск 22:24:47 30937952
>>309375
Да дело не столько в структурках, сколько в их организации.
И мне кажется писать для каждого компонента что-то типа ffi.cdef[[typedef struct { double x, y; } point_t;]] только лишь для того, чтобы данные чуть компактнее были, заместо привычного луа-кода, оно не стоит того, притом что нужда в компактности не такая большая.
Если уж ударяться в харкдор, тогда все на Си надо писать. А так мне больше интересно сам луа поковырять.
Аноним 13/11/16 Вск 23:02:21 30938453
>>309379
Простых организаций сущностей и так сделано дохрена.
Чем тебе коллекции с ключами-id не угодили, кстати?
Ну там, сущность:
entity[id] = obj = {x, y, sprite, update, draw, owner = playerN}, где update/draw - функции с колбеками и прочей дрянью.
Ну, и унификация этих же сущностей, мол, каждая должна иметь методы update/draw, а если не имеет того же draw - вместо отрисовки сущности используется рисование прямоугольника.
Достаточно просто же!
Спавн сущности - добавление элемента в табличку, доступ и удаление по id - простое. Чтобы не париться с уникальностью id - генератор UUID.
Всё что можно на ссылках.
Да, все ссылки на сущность (например, ссылка у владельца Меча Тысячи Истин) должны быть со слабыми ключами, чтобы удалив сущность из коллекции, она же удалилась у владельца.
Аноним 13/11/16 Вск 23:04:04 30938554
>>309384
UPD: Или наоборот, ссылки в коллекции сущностей слабые, а у владельцев - сильные.
Если владелец - игровой мир - рисуем её в игровом мире.
Аноним 13/11/16 Вск 23:22:00 30938755
>>309384
Так у меня практически тоже самое и реализовано.
Создание сущности:
function self.newEntity()
table.insert(entities, {})
return #entities
end
Возвращается по сути ID этой сущности, по которому потом можно нацеплять компоненты и подписывать на системы.
А системы имеют список subscribers, в котором содержатся ID тех, кто подписан на эту систему.
Одна из защит от обращения к несуществующим сущностям реализована в самом итераторе.

Избавление от прямого наличия методов update и draw - по сути одна из фич ECS да и вообще дата-ориентированного подхода. За счет замены тех методов на системы достигается избавление от всяких наследований и получается гибкость конструирования сущностей.
13/11/16 Вск 23:27:10 30938956
>>309387
>return #entities
На самом деле это не всегда правда будет, но это потом допилю.
Аноним 13/11/16 Вск 23:33:33 30939057
>>309389
Ладно, как знаешь.
С ООП на замыканиях, ты создаёшь кучу дубликатов и в целом, странных вещей, но это твоё дело, хех.
Просто попробуй различные варианты, и действуй исходя из практичности, а не хуярь всё подряд "золотым молотком".
Аноним 13/11/16 Вск 23:49:48 30939258
>>309390
Я думал какие-то из классов все-таки переписать без замыканий, но потом понял, что в данном случае это на самом деле мало что изменит: все системы всегда будут иметь один единственный экземпляр, и сам менеджер также используется в единичном количестве (ну или может пару их можно создать для разных состояний игры, например, но это не существенно). В текущей реализации вроде вариантов больше никаких нет, или я не вижу их.
В дальнейшем если еще что-то буду делать или эту архитектуру переделывать, то уже буду смотреть каким методом лучше запиливать ООП.
Аноним 21/11/16 Пнд 19:01:05 31079159
th.png (15Кб, 552x414)
552x414
И я-таки продолжаю трахаться со своим убер-фреймворком ЕЦС. Уже хочется переделать все с нуля, но я планирую еще до конца разобраться где какие косяки будут (мб смогу нормально вставить костыли чтобы все работало).
Завел себе репозиторий, вынес код фреймворка в разные файлы. Правда системы и компоненты оставил "по-деревенски", т.е. в одном файле куча компонентов или систем, но пока их немного - и так норм, легче отлаживать.

Решил проверить реализацию ивентов, выскочило несколько проблем:
опять же существование несколько однотипных компонентов у одного энтити (наверное все-таки введу айдишники),
еще как выше обсуждали - ручное или автоматические подписывание на системы - ручное дает гибкость, а автоматическое позволяет меньше задумываться над этими вещами (я не уверен, но возможно в любой задаче можно будет обойтись без той гибкости),
добавление/удаление компонентов, подписка/отписка от систем из других систем (пока сделал не очень красивое решение, но лучше хз как).

В общем использовать примерно так:
ecs.addComponent(e2, Component_Timer_Event(1.0, "change_direction", Component_New_Direction, {vx=love.math.random(-1, 1)30, vy=love.math.random(-1,1)30}))
ecs.subscribe(e2, "timer_handling")

Следующим шагом планирую запилить физику, в идеале в двух вариантах: интегрировать самописную и внедрить бокс2д.

Репа: https://gitlab.com/m1tch/ecs_on_lua/tree/master
Аноним 21/11/16 Пнд 19:05:22 31079360
>>310791
А, еще забыл про проблему приоритетов систем. Я сначала думал, что как они объявлены, так они и будут храниться в списке систем, но это совершенно так, и они даже ни в каком не обратном порядке.
Не знаю, понадобиться все-таки эта приоритезация, т.к. в продолжительном времени они все равно все циклически будут обрабатываться, но если по-хорошему делать, то это надо.
21/11/16 Пнд 19:47:06 31080061
>>310793
>но это совершенно не так
слоуфикс
Аноним 21/11/16 Пнд 20:21:13 31080262
>>310791
Box2d неимоверно тяжёл.
Для задач платформеров/леталок-стрелялок даже с худо-бедной физикой его слишком много. Из пушки по воробьям.
Особенно если ты хочешь заставлять прыгать персонажей через applyForce.
Аноним 21/11/16 Пнд 20:38:44 31080463
>>310802
Да, согласен, если какие-то аркадные штучки делать, при придется костылить.
Но в данном случае я хочу подключить его для теста своей архитектуры, т.е. смогу ли я прямо в эти системы и компоненты вписать внешнюю библиотеку (потом может и гуи какой-то придется вписывать).
Одна из проблем, которую я вижу, это добавление в бокс2дшный мир новые тела (т.к. у меня системы никак вручную не инициализируются, и не получится организовать везде свободный доступ к созданному миру); предполагаю, что придется решать через дополнительные сущности и системы (например, сущность - бокс2д мир, и компоненты, прикрепляемые к нему - описания новых тел, а какая-то система будет заниматься добавлением этих тел в физ. мир, другая же система будет делать как и положено world:update(dt) ).
Другая проблема - описание и добавление новых коллбеков в физ. мир при коллизиях. Решение, наверное, аналогичное.
Аноним 21/11/16 Пнд 20:50:37 31080764
>>310804
В отсутствии свободного доступа к миру изначальная проблема твоей архитектуры.
Костылей не наберёшься, и наткнёшься на большие сложности расширяемости.
Я предупредил.
Аноним 21/11/16 Пнд 20:56:53 31080865
>>310807
P.S. Я писал МНОГО вещей на love2d, пробуя разные варианты.
Наиболее эффективный - набор коллекций для всех персонажей имеющих ИИ, снарядов, сущностей и карта.
Каждый элемент имеет свои методы update/draw.
Проходим по списку, обновляем, отрисовываем.
Даже если объекты очень разные - они тем не менее обновляются и отрисовываются, ровно так как тебе хочется.
Всякие сложные объекты, вроде каких-нибудь снарядов в виде вращающихся лезвий, которые зависают в воздухе или липнут к поверхностям - конечными автоматами, где вместо update/draw подставляются соответствующие методы из текущего состояния (перегрузка __index, например), и методы взаимодействия с другими коллекциями, которые дёргаются в update.
Получается наиболее открыто, и легко добавлять что угодно.
Аноним 21/11/16 Пнд 21:21:25 31081266
>>310807
Ну я пока и щупаю проблемные места.
>>310808
У тебя одна сущность имеет один update в котором всё-всё-всё, или набор update с разными предназначениями? Если второе, то эти апдейты можно случайно (по какому-то случаю) нацеплять/отцеплять от сущностей?
И как ты все-таки физику реализовал? Ведь она не в самих сущностях, а над ними. И нужно определенным образом еще итерировать по ним, если это самописная физика, либо придерживаться некоторых внешний правил, если это готовая библиотека.
Аноним 21/11/16 Пнд 21:25:39 31081467
>>310812
Эмм. Отцеплять окончательно нельзя.
Знаешь что такое конечный автомат?
Кароч.
object = {}
object.states = {iddle = {update, draw}, walk = {update, draw}}
object.currentstate = object.states.iddle
function object:update()
self.currentstate.update(self)
end

function object:draw()
self.currentstate.draw(self)
end

Примерно так, но с мета-таблицами можно в несколько раз лаконичнее.
Учитывай что таблицы записываюся в переменные как ссылки на них.
Аноним 21/11/16 Пнд 21:32:55 31081568
>>310812
Физика - итерируем по объектам. Смотрим с чем сталкиваются (sweep & prune/quadtree/регулярная сетка в помощь). То с чем кажется что сталкиваемся - проверяем. Если и правда столкнулись - выполняем разрешение коллизии для обоих объектов.
Изич же!
Если использовать внешнюю систему - они, как правило, возвращают ссылку на физический интерфейс объекта.
Хранишь в сущности ссылку на физоновый объект, применяешь к нему его методы, узнаёшь координаты/списки столкновений/прочую хуету.
Для этого дела, советую либу Hardon Collider.
Она не решает коллизию автоматически, только выдаёт ссылки на объекты, с которыми произошло столкновение и dx/dy как вектор ближайшего разрешения коллизий. Это удобнее чем всё остальное, благо прямо таки объекты, возвращаемые либой можно пичкать параметрами и методами (главное - не оверрайдить уже имеющиеся), получая минимум затрат памяти.
Аноним 21/11/16 Пнд 21:38:19 31081869
>>310814
Хм, окей, идею понял. Больше похоже на то, что я раньше делал, ну у меня попримитивнее было, когда основное понятие - это объект, т.е. данные+методы достаточно жестко связаны. Фича ECS как раз в том, что можно практически "на горячую" менять отдельные детали поведения и содержимого компонентов.
На счет твоей идеи сейчас не могу сразу сказать на сколько может быть удобно относительно ECS использовать, надо подумать над разными примерчиками.
Аноним 21/11/16 Пнд 21:44:25 31082370
>>310815
Либа, кстати, интересная, спасибо за подсказку. Правда я уже свою запилил для OBB, но может чего подгляжу или интегрирую коллизии в свою физику.
Аноним 22/11/16 Втр 02:07:59 31084771
>>310818
>на сколько может быть удобно относительно ECS использовать
Я делал
а) локальное пространство самого объекта, а ля глобал внутри self,
б) локальное пространство внутри состояния, обращение по __index-перенаправлению на currentstate или метод self:getState().key = value. Просто и неимоверно эффективно.
На мой взгляд.
Lua гибкая.
Аноним 22/11/16 Втр 13:48:44 31091372
>>310791
>подписка/отписка от систем
Делай, чтобы системы у твоего менеджера запрашивали список энтитей с нужными компонентами (или просто все, а потом сами фильтровали нужные). Чем меньше состояния хранится вне компонентов, тем лучше и проще.
>>310793
>они даже ни в каком не обратном порядке
У тебя просто хеш-таблица вместо массивов/списков. Я себе делал приоритет для каждой системы, потом менеджер этого всего при добавлении новой сортировал все системы по этому приоритету. Позже я заметил, что всё равно стараюсь их размещать так, чтобы они регистрировались в том порядке в каком будут исполняться, и сами приоритеты я нигде не меняю, поэтому отказался от них вообще.
>>310804
>добавление в бокс2дшный мир новые тела
Делаешь систему физики. Далее, вместо прямого добавления и удаления тел, добавляешь энтите компоненты AddBody или RemoveBody, которые уже системой физики обрабатываются так, как она хочет.
Аноним 22/11/16 Втр 19:49:09 31096373
>>310913
>запрашивали список энтитей с нужными компонентами (или просто все, а потом сами фильтровали нужные)
Я вот на счет этой автоматизации пока и сомневаюсь. Теоретически возможно такое, что компоненты все идентичны, но поведение разное (ну, навскидку, 2 бота, один добрый, другой злой, один просто гуляет, другой нападает на игрока). Можно, конечно, какие-то теги или компоненты с "описаниями" ввести, но хз.

На счет приоритета - у меня сейчас менеджер сам подбирает все системы из таблицы Systems и инициализирует их у себя, т.е. у меня нет такого, типа manager.addSystem(drawing_system). Хотя это в общем-то интересная замена приоритетам, когда самостоятельно подключаешь системы в определенном порядке, надо подумать.

На счет физики и компонентов новых тел так и подумывал. С ручной подпиской на системы, правда, еще несколько моментов придется продумывать.
Аноним 23/11/16 Срд 13:14:27 31109174
>>310963
>Теоретически возможно такое, что компоненты все идентичны, но поведение разное
Такого быть не может. Разное поведение получается не магически же, а ты как-то их различаешь и запускаешь разный код. Различать можно тремя способами:
1. Разные компоненты.
2. Разные значения в каком-нибудь компоненте (AiComponent.isHostile или что-то подобное)
3. По имени энтити.
Очевидно, что третий способ долбоёбский, а для первых двух нифига не изменится, если ты будешь запрашивать, а не подписываться. Единственное, зачем нужна эта подписка - производительность (да и тут ещё вопрос, что будет быстрее, потому что в реальной игре каждая система добавляет/удаляет десятки/сотни компонентов - в зависимости от размера игры), но на первый раз лучше сделать "как правильно", а потом уже смотреть, если будет нехватать.
Аноним 23/11/16 Срд 19:52:59 31114375
>>311091
Хм, да, согласен, компоненты все-таки легче отслеживать и они не такие "низкоуровневые" в отличие от ручных подписок на системы, т.е. юзабельность повысится даже если придется делать компоненты-теги, или совсем-совсем частные типы компонентов, а гибкость останется примерно на том же уровне.
Аноним 27/11/16 Вск 15:31:11 31166776
eth.png (17Кб, 582x467)
582x467
В общем реализовал добавление систем вручную, решил сделать именно методами addSystem, т.к. мне кажется так более наглядно? плюс можно строить разные ECS менеджеры с разным функционалом.
Запилил выбор подписчиков в системах через новый самописный итератор, который внутри проверяет requirements (возможно стоит оптимизировать, и обновлять существующий список по добавлению новых компонентов к сущностям).

Ну и решил проблему со множественными компонентами: как я подумал, если каких-то компонентов может быть много, то они, скорее всего, являются событиями. Собственно, поэтому сделал 2 разные функции: addComponent и addEventComponent. Отличие второго в том, что по обращению к entity[component.name] будет возвращаться массив компонентов типа component.name. Единственное, что теперь системы, обрабатывающие ивенты, стали несколько толще, ибо приходится еще перебирать сам массив ивентов (подумываю на счет того, чтобы автоматизировать выборку сущностей и компонентов, т.е. перенести циклы из систем в менеджер, а в системах работать только с выданной сущностью/компонентами типа update(entity, dt), но тогда хз как физику запиливать).

Потихоньку накапливаются вещи для оптимизации (в хорошем смысле) и для налаживания безопасности (удаление сущностей/компонентов/систем), но они пока не в приоритете, ибо хочу уже запилить полный функционал фреймворка. По плану все еще реализация физики.
Аноним 27/11/16 Вск 15:41:20 31166877
>>311667
Еще щас подумал. Например, реализацию движения (Systems.Moving), т.е. обновление координат, можно (гипотетически) запилить через ивенты, которые будут возникать на каждом такте, а т.к. оно сейчас реализовано без них, значит и систему событий можно теоретически развернуть в обычное обновление.
В таком случае, наверное, надо будет просто добавлять дополнительные флаги и счетчики в определенные компоненты, а в системах их обсчитывать, и обрабатывать только тогда, когда какие-то условия срабатывают.
Т.о., если нанесение урона происходило бы по ивенту, то в новом варианте можно сделать компонент Damage (и он будет в единственном кол-ве в энтити) с полем health_damage, и если никто не наносил урон, то это поле = 0. А в системе Damaging можно просто без всяких условий делать entity.health = entity.health - damage.health_damage
Но пока хз на счет гибкости и юзабилити такого подхода.
Аноним 27/11/16 Вск 15:53:13 31167078
maxresdefault.jpg (77Кб, 1280x720)
1280x720
>>305497 (OP)
Начал свою игру про вселенную где можно делать ВСЁ ещё во времена 8, в 9 аесь апи поменяли пришлось переделывать, подзаебало стал простаивать, потом к 10 опять всё переделывать уже забросил.
Вообще то что там нихуя нет хорошо - если где-то криво сам правишь не надо чужой сортир копать.
Аноним 27/11/16 Вск 15:58:54 31167179
>>311670
Можно было продолжать на 8 или 9 пилить если ты мог на них пилить, какая разница какая версия?
Аноним 27/11/16 Вск 16:35:55 31167580
>>311671
Там толи какая-то хуйня с производительностью была от каких-то функций толи ещё что-то не работало, не помню уже.
Аноним 28/11/16 Пнд 09:33:18 31175781
>>311671
андроид порт только в 0.10 добавили, норм ретину только в 0.11 завезут. впрочем я хз что там надо было такого нахуевертить, чтобы переделывание под новую версию заняло больше 1 выходных.
Аноним 28/11/16 Пнд 12:39:36 31178782
VR is here.webm (5254Кб, 718x404, 00:00:31)
718x404
>>311757
не бойся у твоего 3-в-ряд с донатом конкурентов нет
Аноним 30/11/16 Срд 22:24:10 31220383
>>311667
Запилил свою физику в свой фреймворк.
Пришлось подумать как реорганизовать цельную обработку коллизий (нашли одно-разрешили одно) в поэтапную (нашли все - разрешили все). Решил, что пускай сначала в виде ивентов у энтити будут накапливаться коллизии, а потом в другой системе, если тела все еще пересекаются, то разрешать их. Т.е. у меня сейчас 2 системы на это: проверка коллизий, и разрешение коллизий, но сейчас понял, что это минимум, и систему разрешения надо заменить скорее на систему определения типа коллизий (или все-таки прикрутить это к самой проверке), а далее, само разрешение (расталкивание) будет одним из этих типов (и будет отдельная система под это).
Еще приходится в ивентах постоянно следить, чтобы они удалялись после обработки, мб оптимизировать это как-то.
В целом могу сказать, что фреймворк работает, надо только немного перестроить мышление под обработку компонентов системами (а не объектов апдейтами), и можно будет получать кайф от модульного кодинга всего функционала игры.
Аноним 01/12/16 Чтв 11:29:40 31228584
lovox.png (43Кб, 656x678)
656x678
Аноним 01/12/16 Чтв 13:54:19 31231185
>>312285
Дирижабль из мацы.
Аноним 03/12/16 Суб 17:57:19 31273686
Аноним 07/12/16 Срд 19:38:57 31338387
def.png (57Кб, 1257x689)
1257x689
>>311757
>андроид порт только в 0.10 добавили
пора на дифолд перекатываться уже. ничем не хуже хуюнити, базарю

http://www.defold.com/manuals/lua/
Аноним 07/12/16 Срд 21:12:54 31340588
>>313383
Вроде туторы норм есть, какие-то игры сделаны, компил под разные платформы, но комьюнити че-то никакое, лов2д как-то поживее.
Аноним 14/01/17 Суб 20:31:25 31990489
Блять, луа - самый уебанский язык на планете земля. Какого хуя, блять? Половина копируется по ссылке, половина по значению, никаких стандартных функций нет, пишите все с нуля. Сука, ассемблер удобнее.
Аноним 14/01/17 Суб 20:52:00 31996790
>>319904
Инты и булы по значению, таблицы и строки по ссылки, что непонятного?
Какие функции тебе нужны? Комьюнити луа хоть и относительно мертвое по сравнению с другими языками, но все-таки умельцы делают достаточно всяких либ, которые покрывают большинство возникающих потребностей, надо только поискать.
Так-то язык довольно прикольный и легкий, со своими фичами.
Аноним 14/01/17 Суб 21:46:46 32002991
>>319967
Да я просто охуел, что таблицы копируются по ссылке и нет стандартной функции клонирования, но уже загуглил. Просто не очень интуитивная шняга, переписать бы этот фреймворк под православный руби.
Аноним 15/01/17 Вск 15:08:16 32020392
есть два знакомых, что дико котируют его, а мне чет не зашел.
Аноним 31/03/17 Птн 12:56:26 39355693
это бамп в тематике
Аноним 28/05/17 Вск 07:22:52 40320394
image.png (110Кб, 1366x768)
1366x768
>>320029
У нормальных людей уже давно свой пак либ-на-все-случаи-жизни, чтобы не пердолиться с мелкой фигнёй.
Аноним 02/07/17 Вск 18:03:27 40965995
Бампусики. Всем любви в этом ITT треде.
Есть ли у отписавшихся тут какой-либо прогресс и успехи?
Или свалили в итоге на что-то еще?
Аноним 03/07/17 Пнд 03:59:14 40974196
photo2017-07-03[...].jpg (75Кб, 897x799)
897x799
Oh crap.gif (15790Кб, 595x414)
595x414
>>409659
Ну так, более-менее.
Время от времени что-то пилится, например, сейчас таки замутил систему сущностей на HC с тегированием и блекджеком.
Там что-то такое.
Аноним 03/07/17 Пнд 07:12:03 40974797
>>409741
прикольно, если бы они еще не трахали его и держали дистанцию и что-то делали по idle.

в этом плане было интересно изучать Don't starve. Там подобное относится к 'мозгам'. Советую глянуть как там реализовано.
Аноним 03/07/17 Пнд 20:54:34 40985298
>>409747
Ну, это простейший тестовый ИИ, который нужен только чтобы узнать, работает ли система ИИ, так что ничего страшного.
Мне другое интересно: как нормально впиливать поиск путей, который будет работать с комплектами полигонов, и не проще ли при создании карты заранее построить графы путей, по которым можно двигаться как по ключевым точкам. И да, игра должна проходить на замкнутом пространстве, с ключевыми точками вроде зон захвата (нет, это не wot2d), точками спавна бонусов и всего такого, и с временно недоступными зонами, вроде открывающихся/закрывающихся ворот.
Алгоритмы ИИ должны учитывать, что прежде чем проходить ворота, их нужно открыть.
Аноним 03/07/17 Пнд 21:15:15 40985499
Ни у кого нет желания в команде на лов2д попилить изометрический шутан с элементами путешествования?
Аноним 04/07/17 Втр 04:51:43 409880100
>>409854
Каркас двигла замутил?
Просто без этого, разработка затянется, ибо вместо наполнения контентом, будет разработка базовых инструментов. Хотя, конечно, можно взять GRID.

P.S. Сам не хочу слезать со своих проектов, надо закончить хоть что-то.
Аноним 04/07/17 Втр 10:52:43 409891101
>>409880
Свой убер-ECS фреймворк как раз писал для этого.
Не знаю, придется ли его еще допиливать, но простой прототип со своим физоном и простой ГУИ на кнопочках достаточно легко получилось сделать.
Аноним 04/07/17 Втр 18:14:02 409996102
Попробовал леху в сравнении с годотом. Заебато то, что все очень просто, даже с физоном не трахался, в отличие от годота (хотя там тоже, в принципе, ничего сложного нет, но с редактором можно словить нехилых идиотизмов).
Единственное, что не нравится, нет менеджеров сцен и полноценного (или хотя бы минимального) гуя из коробки, поэтому придется либо сторонние модули подключать либо писать велосипед (но они меня сильно подзаебали, так что уже хочется чего-то готового).
Пробовал нарколыжить в HaxeFlixel еще, но что-то он меня пиздец вымораживает со своими обновлениями хитбоксов и прочего при изменении свойств объектов.
Ну и с lua я, конечно, знатно поебался, потому что ООП реализован, по крайней мере, необычно для меня как в привычных С++, Java и других подобного семейства языковю
Аноним 04/07/17 Втр 21:15:51 410088103
>>409996
>Ну и с lua я, конечно, знатно поебался, потому что ООП реализован, по крайней мере, необычно для меня как в привычных С++, Java и других подобного семейства языковю
Там по сути от ООП вообще ничего нет, кроме двоеточия для передачи "self" в качестве первого параметра метода.
Но если раскуришь суть таблиц, метатаблиц, замыканий в lua, то, как мне кажется, становится даже интересненько.
В общем в луа много чего занятного можно найти.
Аноним 05/07/17 Срд 11:52:24 410176104
>>409996
Короче, залез в колхоз еще глубже.
Есть у меня сцена, в общем, на ней тайловая карта, даже не важно откуда. Так вот в чем дело, отрисовать саму карту, в принципе, сложности не составляет, даже регион, элементарно. Только вот что делать с объектами. Допустим, у меня тысячи их, естественно, отрисовывать объекты, находящиеся вне области видимости смысла нет, поэтому нужно использовать либо сетку размещения (или как это дерьмо называется) или квадрантные деревья.
Или это леха сам делает?
Аноним 05/07/17 Срд 15:20:36 410205105
>>410176
По-моему для отрисовки ничего такого не применяют. В буфер отрисовки записывается только видимая часть, и занимается этим OpenGL/DirectX, которые используются в SDL (Love2D вроде на нем основан).
Разбиение пространства обычно для расчет физона используется, ибо считать столкновения для 1000 объектов действительно проблематично.
А для ускорения отрисовки, особенно тайловой карты, используют батчинг (sprite batch), т.е. по сути составление одной большой картинки из тайлов, которая за один вызов функции сразу вся отрисовывается.
Аноним 05/07/17 Срд 15:50:19 410207106
>>410205
Про батчинг я знаю. Вот именно проблема в том, что именно отрисовывать, не буду же я перебирать 10000 объектов (в поисках тех, которые попадают в экран), скажем, если на экране в области видимости только 30 из них, например.
Или все же сделать простым перебором всех сущностей и отрисовывать только те, которые появляются на экране.
Аноним 05/07/17 Срд 15:56:00 410208107
>>410207
Попробуй сначала отрисовать вообще все и посмотреть хватает ли фпс. Потом уже оптимизировать.
Аноним 05/07/17 Срд 16:02:06 410212108
>>410208
Думаю так и сделаю. Спасибо.
Аноним 06/07/17 Чтв 03:30:17 410344109
>>410207
Разбей карту на кусочки NxM тайлов, рисуй только те чанки, которые влезают в камеру. Один батч на один чанк. Идеально - прорисовка четырёх-девяти чанков квадратом. Подгони размеры чанков под камеру, или, если есть зум, вычисляй область видимости. Да и в памяти обычно не нужно держать всю карту, выгружай ненужные куски. Ясен хрен что ближайшую область надо держат
ь, чтобы не тормозило га чтении Так даже легко мутить бесконечные карты как в майнкрафтике. Ничего сложного, просто арифметика.
Аноним 06/07/17 Чтв 03:38:02 410345110
>>410207
Дополнение:
Аналогично можно поступить с игровыми объектами, спавня их в нужном чанке. В чанк пихать список ссылок на нпс, а у нпс - хранить ссылку на чанк в котором он сидит. При перемещении, нпс самоудаляется из чанка в котором был, добавляется в чанк в котором оказался, и меняет свою ссылку на текущий чанк. И так - с любыми объектами.
Аноним 30/07/17 Вск 07:56:45 425534111
Снимок экрана20[...].png (31Кб, 376x96)
376x96
Почаны, а можно ли как-то сделать следующее:
- требуется обсчитать что-то ресурсоемкое, но его нужно обсчитать не ПРЯМО СИЙЧАС, а на низком приоритете и по готовности сгенерить евент. То есть не в текущем update, который должен длиться доли секунды, а вообще в принипе.
Можно ли добавить как-то фоновую задачу?
- предположим некропека не выдерживает эти ваши 60фпс или даже консольные смус 30фпс. Как мне дропать фреймы? Завести счетчик, который будет обновляться в update и в draw уже просчитывать когда скипнуть, а когда нет? нужно ли при этом делеить или задержка и так генериться между каждым update?
Аноним 30/07/17 Вск 08:05:09 425536112
>>425534
сам себе отвечу на второй вопрос - наверно проще как-то задать фпс, если он вообще задается?

зачем оно вообще нужно? ну например для пошаговой игрульки 60фпс НИНУЖНА, а скажем 5 хватит на анимацию.
Аноним 30/07/17 Вск 08:17:37 425542113
Аноним 30/07/17 Вск 08:32:07 425544114
Снимок экрана20[...].png (94Кб, 604x392)
604x392
и еще вопрос. есть у меня ПОДОЗРЕНИЕ, что вывод было бы неплохо буферизировать вместу тупого вызова draw на каждый фрейм. Попробую пояснить.

предположим есть у нас буфер в котором отражен слой из тайлов - задников. Ну чтобы совсем проще выразиться. Предположим у нас клон террарии и есть несколько буферов-слоев. Задник, тайлы с водичкой, землей и прочим песком и тайл с монстрами поверх них (тот же червь-пидор что атакует под землей). Не суть. Если делать все по-еблански то на каждый чих надо будет все рисовать заново, что подозреваю, будет крайне медленно.
Вместо этого генерим в буфер на область в 2-3 экрана с каждой стороны один раз тайлы и потом лишь меняем (копнули землицу, убрали тайл, перерисовали лишь эту небольшую область (ну и слои за ней) вместо генерации всего экрана. Или это сложно реализуемо/нереализуемо вообще?
Я наверняка изобретаю велосипед, но ведь лубовь 2д и есть один большой велосипед, разве что можно где-то спиздить готовое решение.

Кстати по-поводу пиздинга - как потом можно сныкать свой ШЕДЕВР? на ум приходит лишь обсфускация наподобие минимизаторов для яваскриптов. Где все преобразуется в трудновоспринимаемую мешанину из односимвольных переменных и функций.
Аноним 30/07/17 Вск 08:36:23 425547115
>>425544
Проще перерисовать.
В мобилках попадалась луа у пары игор, зашифрованы хз чем, ключ скорее всего в бинарнике.

Premature optimization is the root of all evil.
Аноним 30/07/17 Вск 08:40:17 425549116
kek.jpg (81Кб, 594x525)
594x525
>>425542
>coroutine.yield
у меня от этого PHPшный ИТЕРАТОР.
а что, если нельзя вот так вот разбить на части? может там будет вызов какой-то одной функции которая будет выполняться 5-10с? И не вижу установку приоритета, ведь будет одинаково тормозить и бороться за цпу наряду с главным циклом, что приведет к "лагам".
Аноним 30/07/17 Вск 08:54:40 425554117
>>425549
Если у тебя основная задача будет полностью выжирать цпу, то может и будут проблемы. Но скорее всего всё будет ок.
Аноним 30/07/17 Вск 08:54:48 425555118
886b647c11d958d[...].jpg (64Кб, 800x600)
800x600
о, кажется нашел что мне нужно:
No, love's threads are real operating system threads - concurrent, parallel, and preemptive (when the system is capable.) They aren't really like Lua's coroutines, which have other uses.

Аноним 30/07/17 Вск 09:01:01 425556119
Ну в общем остается вопрос как правильно делать КЛОН ТИРАРИИ. С трудом верю что тупо прорисовывать весь экран на каждый чих. Предположим для простоты это пошаговая игрулька, но с эфектами/анимацией. Зачем мне перерисовывать все, если достаточно перегенерить лишь слой с эффектами, который накладывается поверх всех? ну там искорки, огонек или еще какая пежня.
Аноним 30/07/17 Вск 09:47:08 425577120
94efc0031fdffeb[...].jpg (528Кб, 800x445)
800x445
>>410205
ох лол, так вот же что я искал. осталось понять как этот самый батчинг делать.

а по-поводу всей карты, интересно в Rimworld она вся в памяти? Или тоже подгружается по необходимости.
Аноним 30/07/17 Вск 09:51:24 425578121
45ef46a22dc967a[...].jpg (274Кб, 775x600)
775x600
>>410207
могу ошибаться, но в том же don't starve, там по-моему все реализованно именно тупым перебором сущностей с вычислением расстояния до игрока. Игрок всегда в центре, поэтому можно понять, попадает в кадр или нет.
30/07/17 Вск 21:40:40 425959122
>>425556
Ну смари кароч. В тёрке вообще нужно только набор канвасов на каждый чанк. Один раз отрисовал канвас с тайлами, и дальше его дорисовываешь (заменил тайл с A на B, или удалил, это более чем реально). Ну и теням свой канвас. А эффекты партиклов и так работают. Мобам - да, берём батч и рисуем однотипных мобов в нём. Можно автоматизировать, мол, если данный моб заспавнен но для него нет спрайтбатча - создать для него батч. С love v0.11 будет проще, ибо там это будет полуавтоматизировано.
Аноним 31/07/17 Пнд 03:04:12 426124123
>>425959
а загнать все в один батч, а потом копировать лишь то что видно низя? слишком большой расход памяти?

если чесна то нихуй не понил. чанк - группа тайлов из которой составляется текущий экран?

лучши ткни ссылкой где почитать терминологию с картинками если знаишь.
все же интересно как зделоли в римворлде, там размеры жестко ограничены и карта может выводиться полностью на экран. Неужели и там трахаются склеивая области вместо одной большой?
31/07/17 Пнд 03:36:13 426135124
image.png (150Кб, 1299x1007)
1299x1007
>>426124
У одного батча лимит на ~35к спрайтов (или вообще столько сколько влезают в память видяхи, не знаю точно). Маловато будет для тёрки.

Терминология - моя собственная и майнкрафто-тёрочная.


31/07/17 Пнд 03:36:51 426136125
>>426135
Тут есть пара опечаток и "неочевидностей", но как-нибудь разберёшься.
Аноним 31/07/17 Пнд 04:59:55 426155126
dobbykun.jpg (110Кб, 600x800)
600x800
>>426135
спасибо, Аноний, реально помогло.
метатаблицы тут используешь для эмуляции наследования "классов"?
или оно же необходимо для определения методов тоже, иначе при создании нового объекта Chunk пришлось бы создавать все методы заново, я правильно понимаю?



асло не сейджи, бро, итс хартс май филлингз
Аноним 31/07/17 Пнд 05:09:11 426157127
алсо я правильно понял что у тебя чанк - это 4 тайла в одном, типа квад в терминологии любви2д? т.е. по-сути лишних тайлов за камерой тут может быть лишь по одному по горизонтали и/или вертикали.

ух ебать разумисты все это придумали.
Аноним 31/07/17 Пнд 05:16:54 426158128
Если это так, то тут интереснее как ты эти чанки хранишь и видимо уничтожаешь. Ведь если игрок, скажем, будет постоянно двигаться влево, то рано или поздно надо будет мочить самый правый чанк, иначе пожно так всю память засрать ими.

Или похуй и все эти квады-хуяды занимают копейки памяти?
Аноним 31/07/17 Пнд 05:26:07 426163129
вообще я нихуя не понял зачем вообще эти квады нужны.
как я себе наивно представляю использование тайлов:
- грузим в память (видеопамять?) тайл, а то и атлас.
получаем некий дескриптор и потом используем его для вставки вместо загрузки каждый раз.

Все эти рогалики-хуялики используют не так много тайлов чтобы обосраться с памятью. Да бля, у меня в скуйриме наверно 4к труселя моей вагини с нормалью занимали больше чем все эти пиксельные обмылки.

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

я просто не пойму это навязчивую идею везде юзать квады.
чем блять 2х2тайла так прям лучше чем один.
31/07/17 Пнд 14:36:13 426274130
image.png (959Кб, 3080x1842)
3080x1842
>>426155
Метатаблица - да, чтобы дёргать методы Chunk'а не пересоздавая каждый раз кучу методов, ибо куча времени тратится/куча пространства жрётся. А чанков может быть МНОГО.

>>426157
Ничего не понял. Чанк, в "коде" - 128х128 тайлов.
Тайл - элемент атласа спрайтов. Без какого либо физона, просто отображение.
На каждый чанк выдаётся по батчу. Батч содержит полный атлас тайлов и двухмерный массив тайлов данного чанка (кстати, лучше бы его линеаризовать, типа, переделать из двухмерного в одномерный. Тогда вычисление элемента по координатам будет примерно такое: pos = (y - 1) * chunksize + x; chunk[pos] = N, и с полной картой сделать то же самое).

>>426158
>>426163
Чанки хранятся и уничтожаются, допустим, проверкой при переходе игрока из одного чанка в другой - сохраняем на хард разницу между сгенерированным и измененниями от игрока в чанке на хард, и удаляем из памяти. С другой стороны соответственно загрузили/сгенерировали. Это же просто!

Квад - это "трафарет", по которому из картинки вырезается прямоугольник. Ну тип у тебя атлас спрайтов (как на пике), и ты нарезаешь его на кучу мелких картинок, точнее - запихиваешь в спрайтбатч весь атлас, и при добавлении нового спрайта в батч - указываешь, каким трафаретом эту картинку обрезать (допустим, x/y/w/h: 64х64-128х64, вторая картинка). Это - стандартная тактика opengl.
Чанк - это наша абстракция определения на карте некоторой тайловой области.
Карта - совокупность чанков. Что не так?

31/07/17 Пнд 14:45:48 426279131
image.png (30Кб, 1485x657)
1485x657
31/07/17 Пнд 14:48:49 426281132
>>426163
Ещё дополню цитатой себя любимого:

Суть: когда у тебя много-много одинаковых спрайтов (или спрайтов, помещённых на одну картинку) - бесполезно рисовать их циклом, типа такого:

for i = 0, map.width - 1 do
  for j = 0, map.height - 1
    love.graphics.draw(image, imap.tilesize, j map.tilesize)
  end
end

Это реально полный трындец: каждый раз когда вызывается love.graphics.draw, новая копия картинки отправляется видеокарте, вместе с параметрами, где и как её рисовать.
spritebatch - это такая хитрая штука, которая выглядит как "одна картинка + много мест где её рисовать".
function love.load()
  — Мутим спрайтбатч, с картинкой игровой карты
  tilemap = love.graphics.newSpriteBath(img, map.width map.height, 'static')
  for i = 0, map.width - 1 do
    for j = 0, map.height - 1 do
      — добавляем в неё позиции спрайта игровой карты
      tilemap:add([quad,] i
map.tilesize, j * map.tilesize)
    end
  end
end

function love.draw()
  — Передаём видеокарте одну картинку в spritebatch,
  — и кучу мест, где её надо нарисовать
  love.graphics.draw(tilemap)
end

Таким образом получается в 100500 раз быстрее.
Квадами можно вырезать из картинки с тайлами, типа той что приведена внизу, отдельные квадратики, и тоже добавлять в spritebatch. Квад = трафарет, по которому мы вырезаем из картинки прямоугольный кусочек, и добавляем в список того, как рисовать весь атлас.
Аноним 31/07/17 Пнд 16:42:28 426346133
>>426281
>их циклом, типа такого:
>
>for i = 0, map.width - 1 do
>  for j = 0, map.height - 1
>    love.graphics.draw(image, imap.tilesize, j map.tilesize)
>  end
>end
глупость сморожу, но что если в цикле их загонять в канвас, а уже потом один раз рисовать канвас.

love.graphics.setCanvas(canvas)
цикл
love.graphics.setCanvas()

в draw:
love.graphics.setColor(255, 255, 255, 255)
love.graphics.setBlendMode("alpha", "premultiplied")
love.graphics.draw(canvas)

или все равно сосну?

алсо ты сказал про опенжеэль, а как оно раньше работало (вроде с 0.9 стали требовать SDL с OpenGL)? Все загоняли в фреймбуфер?

просто эта gl пежня ужасно тормозит на некропека, в то время как веснот работает как ошпаренный даже на машинах с vesa вместо нормальных драйверов.

подумал попробовать откатиться на старые версии. Потому как примеры что я смотрел на фуреме любви практически все тормозили безбожно, впрочем там местные кириллы вообще не парились ни с фпс ни с какой-либо буферизаций, тупо драв и все.
Аноним 31/07/17 Пнд 16:59:49 426357134
>Квад - это "трафарет"
ладно буду въезжать.
Но вообще странно зделоли.

Например в Don't starve позиция и размер тайла из атласа задается не в пикселях в относительных размерах.

Что позволяет не парится от размере текстуры атласа. (будет работать и для 256х256 и для 2048х2048. Т.е. можно переключаться между качественными текстурками или лоу для нищебродов.
31/07/17 Пнд 19:23:34 426481135
>>426346
Да, вместо батча можно использовать канвас.
Типа при загрузке чанка, мы создаём этому чанку канвас (12864 х 12864 = 8192x8192 пикселя, многовато будет, лучше несколько мелких канвасов чем один огромный, поэтому размерность чанкосетки уменьшишь).
При копании руды - перезатираешь этот квадратик чем-нибудь ещё: делаешь прозрачным при раскопке, рисуешь сверху другой тайл при строительстве и т.п. Но канвасы сложнее хендлить.

SDL - это куча кроссплатформенных либ, а ля opengl + openal + системные прерывания для клавомышигейпада и кучка оболочек (таймеры, события, всё говно). А love2d - оболочка над SDL, чтобы из lua можно было дёргать методы.

Большое количество кириллов с форума - не умеют в спрайтбатчи, полностью прогружают гигантские вещи и просто не умеют в оптимизацию. Лове может быть быстрым, но нужно уметь, это не юнька где за тебя всё уже оптимизировали "для сферической задачи".
31/07/17 Пнд 19:33:43 426492136
>>426357
За качеством текстурок - смотри mipmap, это есть в лове.
Ничто не мешает тебе брать относительные координаты. Допустим, вычисляем квад для атласа:
function getRelativeSizedQuad(img, x, y, w, h)
  local px, py = img:getDimensions()
  return love.graphics.newQuad(px x, py y, pw ( w, ph * h, px, py)
end

Кстати, не понимаю как это может упрощать текстурки, за исключением уровня мипмепа.
31/07/17 Пнд 19:38:09 426497137
>>426492
Хм, символы умножения просираются. Тут можно в code?
[code]

function getRelativeSizedQuad(img, x, y, w, h)
  local px, py = img:getDimensions()
  return love.graphics.newQuad(px ✶ x, py ✶ y, px ✶ w, py ✶ h, px, py)
end

q = getRelativeSizedQuad(image, 0, 0, 0.2, 0.3)
[/code]
Аноним 31/07/17 Пнд 19:43:47 426508138
>>426481
>SDL - это куча кроссплатформенных либ
это понятно, вот например что требует wesnoth:
wesnoth-1.12.6_4,1:
pango-1.40.6
fontconfig-2.12.1,1
sdl_net-1.2.8_3
python27-2.7.13_6
sdl_ttf-2.0.11_7
sdl_image-1.2.12_10
png-1.6.29
sdl-1.2.15_10,2
glib-2.50.2_4,1
gettext-runtime-0.19.8.1_1
dbus-1.10.16_1
boost-libs-1.64.0
fribidi-0.19.7
sdl_mixer-1.2.12_12
libvorbis-1.3.5_1,3

при этом sdl можно собрать без поддержки opengl и все будет работать.

любовь же работает со вторым SDL и там в требованиях наличие поддержки opengl
love-0.10.2_2:
freetype2-2.8
libtheora-1.1.1_7
shared-mime-info-1.8
luajit-2.0.5
mesa-libs-17.1.5
libGLU-9.0.0_3
sdl2-2.0.5_2
physfs-2.0.3
desktop-file-utils-0.23
openal-soft-1.17.2_2
mpg123-1.25.4
libvorbis-1.3.5_1,3
libogg-1.3.2_2,4
libmodplug-0.8.9.0

что автоматом шлет нахуй vesa драйвер.
печально, непоиграть на 1u ксеонах :((

однако требование наличия opengl придумали лишь с определенной версии. Я даже одно время думал обойтись без любви и юзать luasdl напрямую. Но там все как-то все печально и умерло. И слишком много велосипедить чтобы выйти на уровень любви.

Такие pierogi. Ладно сегодня наконец попробую потестить скорость с тайлами. Да я помню какую-то любовь-демку с кучей анимированных объектов. У меня тогда челюсть отвисла, ведь даже некропк справлялся.
Аноним 31/07/17 Пнд 19:46:41 426513139
>>426492
эм в том-то и дело что не надо ничего писать и вычислять.
тым было на уровне
image = asset('atlas.tex',0.12323,0.1234,0.02323,0.022323)

А дальше саму текстуру можно было уменьшить или вообще один раз задать другой путь для всех ассетов, где валялись уменьшенные текстуры.

Оче удобно. Не нужны никакие магические константы с размерами тайлов. Вообще.
31/07/17 Пнд 19:54:20 426525140
>>426513
Если мир - тайловый, то нужны, потому что от этого идёт перенос координат с мировых в тайловые, например. Ну, или плодить каждый тайл отдельной сущностью, с параметрами x/y/w/h, что совсем не круто, ибо жрётся бешеное пространство. Зато в тайловом мире так можно спавнить сущности (кусты/игровые объекты/выброшенные предметы и т.п.) Но их в идеале должно быть сравнительно немного. Если ты заметил, даже в террарии однотипное говно объединяется в стаки при вываливании на землю, ибо жрёт немеряно места. Ну, выбросил ты 9000 кирпичиков земли. Их все надо бы физически обсчитать, или заморозить их физон, разморозить если что-то их касающееся изменилось, например кирпич под ними сломали (для этого нужна мелкая пространственная сетка и эвенты), но если выбросишь слишком много - привет, резкие просадки fps!
Но рисовать их всё равно надо всей кучей, и ту же коллизию калькулировать.
31/07/17 Пнд 19:55:45 426527141
>>426513
Ты вообще заметил, что тайловые миры оказываются значительно быстрее/экономичнее по памяти миров, основанных на векторных объектах (особенно с физоном для каждого)?
31/07/17 Пнд 20:00:38 426530142
>>426508
Демка - вот эта? https://love2d.org/forums/viewtopic.php?t=82562
Это потому что каждая зверюшка - элемент батча. Просто этот товарищ умеет в спрайтбатчи, и даже суть демки - показать автоматический батч.
Эту штуку впихнут в следующую версию love2d, тогда можно будет рисовать циклом кучу говна, и оно будет полуоптимально рендерится. Это относится к картинкам и векторным примитивам (не к тексту, увы).
Аноним 31/07/17 Пнд 20:01:09 426531143
>>426525
в террарии, что-то просрали в последних версиях, там есть ощутимый лаг в одних и техже местах карты (видимо как раз граница загруженных чанков-панков и делая шаг в сторону все это начинает подгружаться) реньше такого не было.
А проблему 9000 кирпичей они вроде решили куда проще - там вроде как есть лимит на количество отображаемых объектов. После которого новые тупо не отобразятся пока не подберешь старое. Ну и плюс они там не валяются вечно а со временем исчезают.

По-поводу отдельных тредов/потоков я спрашивал тоже с огдядкой на террарию. Например, там corruption/hollow постепенно расрастался по всей карте, независимо от положения игрока. Добавь сюда расчет перелива жидкостей и рост травки - ну ни как такое не обработать за один цикл update. Уверен что там это как-то просчитывается параллельно.
31/07/17 Пнд 20:07:38 426543144
>>426531
На тему corruption/hollow, смотри в чём прекол:
1. У нас есть некоторая функция, по которой генерируется/распространяется биом.
2. Каждый чанк имеет некоторое "время с начала мира".
3. Когда мы появляемся в чанке, сравниваем время от начала мира с текущим, и обновляем его в соответствии с изменениями, которые должны были в нём произойти.
Это читерный способ. То же самое можно с растениями: запоминаем время посадки и выгружаем чанк. Когда чанк загружается снова - рассчитываем разницу во времени между предыдущим состоянием и текущим, добавляем рандома и вот, наше растение выросло пока нас не было. Аналогичным образом работают всякие куки-кликеры, в которых печеньки копятся даже при закрытом браузере (но в webstorage есть время выхода!)
31/07/17 Пнд 20:14:20 426553145
>>426531
Пардон, дополню ещё раз.
Перелив жидкостей - это вообще отдельная тема. Жидкости динамические по сути своей.
Считай что жидкость считает последний загруженный чанк твёрдой границей, и не льётся дальше. Сам проверь, попыткой слить океан в ад. Когда ты в аду, вода сверху перестаёт течь потому что чанк с бесконечной водой выгружен, а те которые активны в данный момент - уже слили воду.

И да, держать в памяти стоит чуть больше чанков: условно, если рендерим мы девять штук, то в памяти, чтобы не было лагов, держим штук двадцать-тридцать, на всяк случ. И можно предугадывать загрузку при движении: игрок падает вниз -> предполагаем что он будет падать ещё некоторое время -> загружаем сразу пачку чанков снизу, но рисовать продолжаем только те, которые влезают в камеру.

Кстати, для исследования террарии советую собрать нищеноутбук с очень медленным хардом. При падении с высоты, можно заметить насколько далеко прогружаются и рендерятся чанки: видно как из пустоты возникает почва, когда прогружается. С ранними билдами старбаунда - та же фигня.
Аноним 31/07/17 Пнд 20:21:28 426562146
>>426530
да она, правда с дефолтным количество котов в 4000 некропека выдает 6фпс, но с "всего лишь" 1000ю уже 24. Для меня такое количество в любом случае оверкил, поэтому и впечатлило.
31/07/17 Пнд 20:25:40 426566147
>>426562
И это ещё не самый оптимальный способ применения батчей. Можно быстрее, правда, вокруг этого придётся мутить весь рендер.
а) батч, при добавлении спрайта, возвращает его ID. Это позволяет модифицировать то что мы рендерили без перезагрузки всех данных в видеокарту. Ну там, кадры менять, или двигать или и то и то.
б) Батчи имеют несколько режимов оптимизаций (static/dynamic/stream). Угадай, какой самый эффективный для тайловой карты.
в) Товарищ в своей либе, после каждого draw выдаёт batch:flush. Это сжирает приличное время.
Аноним 31/07/17 Пнд 20:29:09 426571148
>>426543
>Когда мы появляемся в чанке, сравниваем время от начала мира с текущим, и обновляем его в соответствии с изменениями, которые должны были в нём произойти.
В донтстарве так и делают, все, что за пределами текущего экрана и по 2-3 экрана с каждой стороны - спит. Потом когда подходишь к усыпленной сущности, то вызывается longupdate.
Аноним 31/07/17 Пнд 20:42:22 426578149
кстати, а использование png как-то отражается на рендере?
или там при загрузке тайла все преобразуется в какой-то свой распакованный формат и не занимаются херней?

в том же DS позволенно лишь использовать текстуру в определенном формате. Все эти пнг идут лесом.
31/07/17 Пнд 20:59:14 426588150
image.png (331Кб, 1601x1017)
1601x1017
>>426578
Свой формат, раньше можно было грузить джипеги, а сейчас нет (хз почему, мб лицензии).
Для канвасов - отдельный набор форматов:
https://love2d.org/wiki/CanvasFormat
Это сделано для оптимизаций размеров/занимаемой памяти.

Есть тип данных ImageData:
https://love2d.org/wiki/ImageData

Его суть в том, что из этой фигни можно генерить картинки, а ещё, писать свои упаковщики/распаковщики произвольного формата в данный:
функцией mapPixel можно грузить картинки, например, из rgba8. На пике пример.
Аноним 31/07/17 Пнд 21:26:28 426623151
Хе, и все это время я писал с сажей, не замечая этого. Восхитительно.
Аноним 31/07/17 Пнд 23:11:04 426696152
ох так он там еще с котами и тень рисовал для каждого. если убрать, то еще +10 фпс.

еще странно что он размер картинки кота зачем-то вычисляет внутри цикла
for y = 0, 3 do
for x = 0, 7 do
local w, h = catImage:getDimensions()
local q = love.graphics.newQuad(x w / 8, y h / 4, w / 8, h / 4, w, h)
table.insert(frames, q)
end
end
достаточно же лишь один раз определить и за пределами двух циклов.

но чувак реально рулит. Взял да и переопределил стандартный объект, а значит для кириллов достаточно лишь подключить файл.
Забавно, его почти никто не юзает....
Аноним 31/07/17 Пнд 23:12:23 426697153
>>426696
Ну, это же вызывается один раз, а не каждый кадр, так что всё пучком.
Аноним 01/08/17 Втр 00:05:41 426709154
4cede40341f9513[...].jpg (98Кб, 800x600)
800x600
у него там еще демка со звездами.
прикрутил туда ограничение на fps - просто песня. 1000 звезд вращается и перемещается, 15фпс (на удивление сносно выглядит без дерганий, 25-30 конечно лучше) , меньше 40% загрузки некропроца(900мгц) и он вырубает активное охлаждение. В результате тишина.

10/10

Осталось лишь запилить шедевр и грести зимбабвийские баксы лопатой.

Ну вообще-то любовь годна не только для игрушек. Оче просто сделать визуализацию чего-то полезного. Например наглядную историю изменений в git/svn и тп. Яваскрипт бы обосрался от 1000 звезд даже на i7.
И все кросплатформенно, бесплатно и шустро.
Аноним 01/08/17 Втр 00:19:29 426715155
>>426709
На i5/печ760 выдаёт 96 fps на котиках. Мне норм.
Аноним 01/08/17 Втр 00:20:42 426716156
>>426696
Это будет по дефолту в следующей ловке.
Аноним 01/08/17 Втр 05:46:16 426786157
>>426709
v8 с webgl не обосрутся от тысячи звёзд на i7 если есть видеокарта :3
Но да, ловка примерно в пять-десять раз быстрее, хотя бы за счёт отсутствия бешеного количества прослоек жаваскрипт/браузер/opengl. С лове похожая ситуация (lua/c-core/opengl), но оптимизация на месте, плюс luajit откровенно не даёт оверхеда на переключение между контекстами, это охренительная прибавка.
Аноним 01/08/17 Втр 06:58:17 426790158
83fa0648a86cdc6[...].jpg (153Кб, 500x500)
500x500
>>426786
вангую, что там будет еще нехилое различие по потребляемой памяти.
если еще учесть, что луа запустится даже на кофемолке с мегабайтом памяти (на самом деле вроде даже килобайтах), то хипстерское js-поделие уже в аутсайдерах.

так что любовь победит и тут.

Особенно если учитывать как в js на каждый чих создается объект и отсутствие integer в принципе.
итого дикий оверхед для простого массива.

У луа жи есть это ваше FFI, которое мне надо будет вкурить, но подозреваю что это чит, реализующий строгую типизацию и убирающий тот самый оверхед из-за нестрогой.
Аноним 01/08/17 Втр 07:19:42 426792159
>>426790
ffi = "пишем на луа на сишке", со всеми профитами, плюс подрубание произвольных сишных библиотек, с прописыванием хедера в cdef, с отсутствием оверхеда и прочей милотой.
Рекомендую.
Аноним 01/08/17 Втр 07:22:38 426794160
>>426790
Оу, кстати, у меня где-то валялась ffi-векторная либка. https://pastebin.com/i7qC1aKn
В качестве вектора используется сишная структура (x, y), к которой прицеплена метатаблица для перегрузки арифметики/методов. Мгновенно создаются и обсчитываются сотни и тысячи векторов, плюс сахарок.
Аноним 01/08/17 Втр 07:29:22 426796161
image.png (69Кб, 874x774)
874x774
race.gif (4231Кб, 598x422)
598x422
>>426794
Применение примерно такое.
Аноним 01/08/17 Втр 07:48:23 426799162
>>426796
Карочи, посоны, мне стало лень делать кучу всего, поэтому вот тут есть что-то похожее на движок. Как раз те самые танчики. Система сущностей, колбеки на столкновения и всё говно.
Заодно можно посмотреть как риальные поцоны делают проекты.
https://bitbucket.org/MainTomato/tank-o-box/src/67a4bc1def45708424f9facc09b8b04102c36433/?at=develop
Аноним 01/08/17 Втр 15:40:29 426924163
3b68bdb7fc800ac[...].jpg (111Кб, 693x600)
693x600
Ох щит, так у луа тоже целых нету.
На массив типа намбер 1000х1000 тратится 8000К
то есть по 8 байт на ячейку, еба. Значит ебашут флоат.

ну ебана, хотеть однобайтовый массив.

асло если пыриться в collectgarbage('count'), то каждую секунду проебывается по килобайту. Одно радует 'collect' мгновенно.
А вообще чому течет? уничтожение локальных переменных/функций внутри других функций выполняется отложенно? Я прост не понимаю откуда вообще взяться 'утечкам'.

Пошел пыриться в FFI. Ебал я в рот столько тратить на массив 1-2битовых значений.
Аноним 01/08/17 Втр 16:56:13 426985164
2a769b84def89d1[...].jpg (27Кб, 464x387)
464x387
заменил двумерный луа 1000х1000 массив на чит:

local mapWidth = 1000
local mapHeight = 1000
local buffersize = 1 # (mapHeight + 1)
local buffer = nil

function setupMap()

memstart = GetMemoryUsage()

map = {}
for x=1,mapWidth do
map[x] = ffi.new("uint8_t[?]", buffersize)
for y=1,mapHeight do
map[x][y] = love.math.random(0,3)
end
end

memarray = GetMemoryUsage()
end

вместо 8М стало потребляться 2М. Но чому 2 а не 1? Это ж 1 байт.
можно было конечно еще сделать один большой одномерный массив и ебаться с вычислением индекса, но я пока положил хуй.

И вообще так можно пользовать? lua же будет пытаться впихнуть свой number, который хуй пойми какого типа.
Или надо использовать сишные функции для присваивания/чтения значения из подобных массивов?
Аноним 01/08/17 Втр 17:28:54 426998165
Мгновенный репорт вниманиеблядка >>426985
Аноним 01/08/17 Втр 20:54:25 427127166
>>426985
>И вообще так можно пользовать? lua же будет пытаться впихнуть свой number, который хуй пойми какого типа.
http://luajit.org/ext_ffi_semantics.html

Кстати да, я особо ничего не имею против сусеки, но давай аккуратнее.
Аноним 01/08/17 Втр 23:13:26 427189167
>>427127
все равно нихрена не понял
Conversions from Lua objects to C types
number → double

то есть при присвоении ffi-массиву оно будет использовать double значение, а С потом приведет к uint8?

что произойдет если lua-значение превысит допустимый диапозон, скажем будет 256?

еще как можно юзать битовые маски? ведь интежер не завезли.

если для тру интежер будет сгенерен кода наподобие

and EAX, 0xFF

то с вещественными хуй пойми как он там оперирует и насколько это будет тормозить для эмуляции целого.

или все битовые операции лучше проводить силами того же FFI используя сишные операторы?

как же бесит, ну вот кому пришла замечательная идея избавиться от integer.

тут пишут что в 5.3 добавили
https://stackoverflow.com/questions/4484437/lua-integer-type
Но love использует luajit, который в свою очередь - 5.1. SOOOOOQAAA
Аноним 02/08/17 Срд 00:18:38 427220168
>>427189
Ну тип ты можешь сделать так:
buf = ffi.new('unsigned char[?]', 4)
for i = 0, 3 do buf = math.random(255) end
И это будет Тру char'ы.
Что сложного?
Аноним 02/08/17 Срд 00:21:15 427221169
>>427189
Да, конечно, числа будут приведены к соответствующему сишному типу. Тогда если ты прибавишь единичку к 255 char'а, оно примет значение 1.
Ты давай не выёбывайся и не бомби, а изучай и ебош.
Аноним 02/08/17 Срд 01:25:11 427252170
>>427220
я в си совершенно не бум бум, но равзе int8 - не восьмибитное целое?
char, так char, прост думал это строго символы, а не байты.

а с битами как работать?
допустим есть флаги
fUnpassable = 0
fWater = 0b00000001
fGround = 0b00000010
fWall = 0b00000100
fCorrupted = 0b00001000

в массиве заданны атрибуты ячейки аля buf[x][y]=fWall | fCorrupted

нужно проверить соответвует ли значение маске
if buf[x][y] & mask == mask then sooqa(); end

в луа 5.1 гроб кладбище пидр, целых не завезли.
может как-то замутить через ffi и поиметь ВЫИГРЫШ в производительности, т.к. ничего не требуется преобразовывать?
Аноним 02/08/17 Срд 01:33:30 427257171
>>427221
> ты прибавишь единичку к 255 char'а, оно примет значение 1.
ващет должно обнулиться, но продолжу ебошить.

а если бы понадобилось однобайтовое со знаком, то що? char уже не катит.
Аноним 02/08/17 Срд 02:06:35 427293172
>>427257
Да, в нуль скатится, меня подглюкивает.
Луашные float'ы нормально преобразуются в сишные типы при загонянии соответствующего значения.
А если тебе нужен со знаком - тогда просто char же.

Ну ёпт.
В char можно запихивать луашные флоаты -128-127,
в unsigned можно пихать те же флоаты в диапазоне 0-255, и т.п.
Тот факт что в луа все числа флоатами - напротив довольно неплохо: вычисления стоит проводить с максимальной точностью, когда хранить - с пониженной. Знаешь что такое накапливающиеся ошибки?

P.S. В сях - все значения это числа. Просто char часто используют в качестве строк, но это всё равно числа 0-255. И с ними можно производить арифметику. Там нет строк в классическом смысле, но при строковой интерпретации, массив байтов НЕОЖИДАННО оказывается строчкой. Главное - не забывать про терминатор.
Аноним 02/08/17 Срд 02:25:26 427312173
>вычисления стоит проводить с максимальной точностью
дык в том-то и дело, что точность - не конек float
одно дело 32bit int или 64bit int
и совсем другое дело когда часть этих 64бит уходит под мантиссу(внезапно и float и 64bit int юзают по восемь байт), а из-за преобразований в двоичный формат может все проебаться из-за дробей с бесконечным периодом.

поэтому у меня и нет восторга от отсутствия строго типизации, особенно там где она пиздец как нужна.

ну вот какой прок от этого вашего boolean, если на него по-прежнему потратиться 8 байт. 8 БАЙТ, КАРЛ.

В результате все эти изъебства с ffi. А главное непонятно нахуа оно нужно. В JS/Похапе это оправданно автоматическим преобразованием (приведением) к типу. Тут же один хуй тебе нужно tostring/tonumber. Так в чем была проблема ввести integer изначально? Чому лишь в 5.3 осилили.

Аноним 02/08/17 Срд 02:32:49 427318174
>>427312
Где у тебя в луа проблемы с точностью вылезают?
Аноним 02/08/17 Срд 02:39:21 427321175
image.png (97Кб, 870x838)
870x838
>>427318
У чувака проблемы с точностью и одновременно - проблемы с занимаемым пространством.

>>427312
Смотри и учись, ёпта.
Аноним 02/08/17 Срд 02:48:47 427326176
>>427312
Integer в lua 5.3 - 64-битные, занимает те же восемь байт. Так что можешь упороться.
boolean в луа - отдельный тип, он как раз (как ни странно) однобайтный, по моему, не знаю точно.

Ну а ты чо? Дали тебе ffi, рассказали что можно сделать нормальную оболочку над сишкой и дёргать её из луа.
Радовался бы, так нет, надо флудить и бомбить, как будто тебе десять лет.
Аноним 02/08/17 Срд 02:51:27 427329177
>>427321
С бесполезным дрочем на оптимизацию у него проблемы.
Аноним 02/08/17 Срд 02:59:41 427334178
>>427318
сравни большие числа, там где мантисса присутсвует.
не сможешь, ты сможешь лишь проверить, что их разница меньше некоторой заданной константы (точность) аля 0.00000001

>Смотри и учись, ёпта.
мантиса не занимает оставшиеся 32 бита, там 10 бит под мантиссу + знак
итого у 64бит int - диапазон без потерь : -2^63 .. 2^63-1
у double - 1 бит на знак самого числа а значит
-2^52 .. 2^52-1

с количеством бит под мантису мог забыть, но суть ты понел. Проблемы начнуться с 2^53 или 2^54

нет у меня проблем с точностью, проблемы в [возможных] бесполезных преобразованиях и занимаемой памятью.
Вместо простого присваивания будет тратиться время на проверку диапазона и преобразование.
Плюс непонятки с битовыми операциями. И все непонятно ради чего.

чому нельзя было ввести строгую типизацию, если она явно указанна?
local variable = (int) {}
все, еба. И память не расходуется и битики можно гонять и все довольны.
вместо деления/умножения на степерь двойки - битовый сдвиг и тп.
Аноним 02/08/17 Срд 03:03:27 427337179
>>427326
>Integer в lua 5.3 - 64-битные, занимает те же восемь байт. Так что можешь упороться.
даже если так - похуй. можно легко вытащить требуемый байт двумя арифметическими сдвигами, которые потребляют 1 или пару тактов проца.

>boolean в луа - отдельный тип, он как раз (как ни странно) однобайтный, по моему, не знаю точно.
хуй там плавал. Создаешь табличку и загоняешь туда одни лишь true. Результат - те же 8 байт на ячейку. Спецом замерял этим вашим гарбадж коллектором.
Аноним 02/08/17 Срд 03:04:43 427342180
>>427329
когда массив занимает в 8 раз больше чем требуется, то это не бесполезный дроч, особенно когда предполагается большая размерность и массив далеко не один.
Аноним 02/08/17 Срд 03:04:59 427344181
>>427329
15000х5000 тайлов в ванильной луа - генерится пять минут и занимает 9гб, когда как ffi - мгновенен и жрёт 150мб памяти.
Аноним 02/08/17 Срд 03:06:09 427348182
>>427337
Ну и катись отсюда, для тебя придумали сишку, асм и машинные коды.
Обмазывайся там своими байтоёбствами.
Аноним 02/08/17 Срд 03:07:11 427352183
>>427337
Тот факт что скриптовая луа имеет такие фичи - уже повод молиться на майка пола.
А ты иди нах )))
Аноним 02/08/17 Срд 03:14:26 427358184
>>427348
сишка - сложна :((((
Аноним 02/08/17 Срд 03:18:09 427361185
>>427342
Тебе три, блять, раза рассказали и даже показали как писать на сишке на луа, со всеми профитами сишных структур, переносимостью и скоростью исполнения. FFI ещё и включает в себя либу битовых операций, обмазывайся сколько влезет.

А в js/php инты - занимают столько же места сколько флоаты (64 бита), там аналогичная хуйня.

Так что или учись или съеби, мудила.
Аноним 02/08/17 Срд 03:29:25 427369186
>>427361
дык я и пытаюсь, знал бы ебучий С, не выябывавлся бы :)

js/php совершенно другая песня. первый вообще не создан был для больших объемов, второй живет доли секунды и итераторов/мемкешей/субд хватает.
Аноним 02/08/17 Срд 03:33:34 427372187
>>427369
Это то, что не надо "пытаться" сделать. Попытка подразумевает шанс провала.
Это нужно просто взять и сделать.
Взять книжку K&C, почитать, сделать мелкую хуёвину (типа крестиков-ноликов в консоли), понять как работают разные типы данных и всё тут, дальше можно продолжать.
И да, что непонятного в использовании ffi? Ты объявляешь переменную/массив так же как это было бы в луа или в сишке, и точно так же с ним работаешь.
Это не рокет-саенс, тут всё очень тупо даже для пхпшника который почитал про типы данных.

Чего расселся? Иди баловаться, бля.
Аноним 02/08/17 Срд 03:37:27 427375188
>>427369
> дык я и пытаюсь, знал бы ебучий С, не выябывавлся бы
Из данной фразы следует вывод, что незнание плодит выебоны.
Аноним 02/08/17 Срд 09:09:03 427418189
animation.gif (1538Кб, 1208x827)
1208x827
Пыщь-пыщь
game of lifu

Аноним 02/08/17 Срд 09:27:17 427421190
>>427418
А чего так упорото? Я тоже успел написать gol, но там были классические правила.
Аноним 02/08/17 Срд 09:48:06 427424191
Аноним 02/08/17 Срд 11:03:34 427441192
>>427424
це древний нетбук, так что норм
>>427421
да гифка не отражает последовательность кадров.
мне просто надо было посмотреть как оно будет ворочаться под "нагрузкой", вроде нормич.
Аноним 02/08/17 Срд 11:10:17 427444193
>>427441
С либой автобатча, или батчи+квады?
Аноним 02/08/17 Срд 17:11:34 427653194
>>427444
батчи-квады
если еще ту библиотечку подрубить, то пара фпс проебется somehow


теперь мой внутренний Кирилл говорит мне, что надо замутить очередь задач.
Тип есть несколько параметров, влияющих на производительность:
- собственно fps, тут все понятно. Лимитуем, появляется больше ресурсов для расчетиков в update()
- допустимое количество итераций update(), для генерации следующего состояния игры. Ну там мобье аналайзит свое окружение, агрится на вражин, расчет пасфиндинга и прочая пежня. На примере игры в жизть экспериментально получил от 5 до 15 тактов. Дальше уже как-то грустна.
- размер карты (массива), где это все обсчитывается. С игрой в жизть тут не читернешь с длинными апдейтами чанков за пределами камеры, нужно все обсчитывать.

Зойчем вообще это все нужна. Мой внутренний Кирилл глаголит - предположим что необходимо сгенерить новый эвент НОЧЬ ДЛИННЫХ НОЖЕЙ. А это значит надо подгрузить тайлы, музяку и еще какую пежню, которая может быть далеко не копеешной. Вместо того, чтобы загрузить все разом и пролагаться - предполагается все загрузить за X итераций, расчитать что необходимо и по готовности начать эвент.

Мой внутренний Кирилл - уебан?
Аноним 03/08/17 Чтв 07:46:51 428228195
Corona SDK кто-то пользовался? Как оно в сравнении с love2d?
Аноним 03/08/17 Чтв 22:04:52 428910196
>>428228
Меньше швабодки но есть встроенный admob, не надо пересобирать двигло с прописыванием бриджа от lua до java.
И многое упрощено. Если в лове - ничего нет, то в короне есть куча всякой лабуды. Мне предлагали работу в короне: там есть проект портирования её на luajit.
Аноним 09/08/17 Срд 20:55:39 434099197
Есть к этому чуду хоть минимально нерукожопая GUI библиотечка? Только не на уровне рисования квадратных чёрных кнопок, а что-нибудь посерьёзнее. Я заебался велосипеды педалить
Аноним 09/08/17 Срд 21:15:11 434104198
Аноним 09/08/17 Срд 21:23:33 434105199
>>425534
В отдельном треде. Очевидно же.
Аноним 09/08/17 Срд 21:25:59 434106200
>>434104
Хоть одну сам использовал? Большинство по виду какие то васяноподелия, да ещё и попахивающие
Аноним 09/08/17 Срд 21:29:49 434108201
Аноним 09/08/17 Срд 21:37:40 434110202
>>434106
Бери имгуй и не выебывайся. На оффициальном форуме целый трендж есть.
Аноним 11/08/17 Птн 07:22:02 436224203
>>434106
Хочешь оФФициальную? Пиши сам, продвигай чтобы использовали, собирай инфу на тему "что подправить чтобы было зашибись", поддерживай, обновляй до новых версий love2d и т.д.
Аноним 11/08/17 Птн 14:10:20 436267204
>>436224
Вот в этом и проблема LOVE как движка. Нихуя нет, кроме самой базы, всё работает на языке, в котором тоже нихуя нет кроме самой базы. Всё как в JS, только коммьюнити на порядки меньше, поэтому и либы все -
древнее говно.
Короче, не ебитесь с этим лавом, переезжайте на Godot, там грядёт эпик вин в виде 3.0 версии.
Я кончил.
Год ебался с LOVE-кун
Аноним 11/08/17 Птн 14:15:37 436268205
image.png (126Кб, 1686x552)
1686x552
>>436267
Движок?
Опачки, а где тут хоть одно слово "engine"? Ни одного не видно. Ой, а что это за незнакомое слово "framework"? Опачки, а это и не движок!
В этом и прелесть LOVE как фреймворка: ничего нет, ничто не привязывает тебя к конкретной структуре/архитектуре, хуярь как хочешь, ошибайся, делай новое только лучше, потом становишься мастером дзен и уходишь в программисты с зп >100к. Так и сделал.
Аноним 11/08/17 Птн 14:39:50 436273206
tom2.jpg (45Кб, 533x400)
533x400
>>436268
>ничего нет
>В этом и прелесть
Аноним 11/08/17 Птн 14:56:44 436282207
>>436273
Ну дык это и не движок, что ты хочешь
Аноним 11/08/17 Птн 16:26:15 436303208
>>436267
Ты просто мамкин неосилятор, который не умеет в архитектуру приложений сложнее чем helloworld. Простые вещи тут делать в три раза быстрее чем на годоте, а для чуть более сложных - нужно мутить движок. Движок - это как раз система связей между объектами, рендером, звучками и всем прочим.
> Ждва года ебался, понял что к чему, начал охуенно ебошить.
Аноним 11/08/17 Птн 18:31:32 436385209
>>436303
>вот картинку нарисовать на экране проще, чем в годоте!
>а вот для более сложных вещей нужно запилить свою плохую версию годота!
>ты просто не понимаешь всех преимуществ этого чудесного не движка
ты сам понимаешь, что ты несешь?
Аноним 11/08/17 Птн 18:40:13 436389210
Аноним 11/08/17 Птн 19:26:21 436396211
>>436268
>в программисты с зп >100к
а шо, есть вакансии с LUA-погромистами?
Аноним 11/08/17 Птн 19:32:23 436397212
>>436389
я не годотфанатик, но после этого высера
>Если домашние директории лежат на дисках, подмонтированных по NFS (одна абстракция)
читать не стал. Единсвенная причина так делать - бесдисковая станция, да и то там проще будет по rdp-like протоколу работать.
NFS жи - локалочка, DMZ между серверами, порою с резервированием каналов (X сетевушечек как одна для предотвращения проблем с илнками/портами/и тп)
Только полный даун будет использовать NFS прост для домашн директории ))). Так как работа с мелкими файлами там будет существенно медленней чем с неторопливым 5000rpm IDE
Аноним 11/08/17 Птн 19:49:39 436398213
Бля эти годот пидоры еще изобрели свой велосипедоскрипт, который еще согасно докам умудряется работать медленее с массивами одного типа аля ByteArray.

Уж лучше с FFI поебстись.
Аноним 11/08/17 Птн 20:11:39 436402214
murrigaexplain.jpg (60Кб, 540x960)
540x960
Лучше по топику задам вопросец:
как местные гуру генерят карты с тайлами? Хранят в массивах (json/xml)? В картинках, где цвет пикселя определяет тайл. Или еще как?
Аноним 11/08/17 Птн 20:15:55 436403215
https://www.youtube.com/watch?v=S6jqR7wmnw4
асло пример как человек ебется с тайлами в годоте.
а шо, если я захочу бесконечную карту с генерящимеся/подгружающимеся на ходу тайлами? в луа тебя ограничивает лишь твоя фантазия и лень.
В годоте - похоже невозможно в принципе.
Аноним 11/08/17 Птн 21:29:13 436415216
>>436403
Алё, дядь, ноды в годоте можно и из кода инстансить. Вешаешь на карту какой-нибудь MapGenerator, которому прописываешь инстансить новые локации в зависимости от положения игрока. Старые не забываешь удалять, если не 100 гигов оперативы.
>>436402
https://love2d.org/wiki/Tiled
Аноним 11/08/17 Птн 21:31:55 436417217
>>436398
В 3.0 можешь ебаться в уютненьком Godot'е с любым ЯП. Гугли GDNative.
И поясни, где ты нашел такую хуйню
>который еще согасно докам умудряется работать >медленее с массивами одного типа
Искренне твой, годот пидор
Аноним 11/08/17 Птн 22:01:52 436428218
>>436417
http://docs.godotengine.org/en/stable/learning/scripting/gdscript/gdscript_basics.html

GDScript arrays are allocated linearly in memory for speed. Very large arrays (more than tens of thousands of elements) may however cause memory fragmentation. If this is a concern special types of arrays are available. These only accept a single data type. They avoid memory fragmentation and also use less memory but are atomic and tend to run slower than generic arrays. They are therefore only recommended to use for very large data sets:

ByteArray: An array of bytes (integers from 0 to 255).
IntArray: An array of integers.
FloatArray: An array of floats.
StringArray: An array of strings.
Vector2Array: An array of Vector2 objects.
Vector3Array: An array of Vector3 objects.
ColorArray: An array of Color objects.

тутачки. я даж не знаю как можно было умудриться сделать slower.
Аноним 12/08/17 Суб 09:32:01 436509219
>>436396
Есть. Например, при разработке короны, или оборонки РФ.
Аноним 12/08/17 Суб 09:43:32 436510220
>>436397
Да ты, я смотрю, дебилушка, и не воспринимаешь аналогии.

Аноним 12/08/17 Суб 11:32:56 436535221
>>436428
>Написано же - пользуй только для больших массивов, чтобы избежать фрагментации. Медленнее они из-за оверхеда на проверку типа и избежания этой самой фрагментации.
Аноним 12/08/17 Суб 11:49:05 436538222
>>436535
ох лол, там написанно про падение производительности для массивом со статической типизацией. Какую ты проверку типов должен делать для них? они ебанутые?
Далее там в примере сказанно про десятки-сотни тысяч элементов.
На секундочку это в пределах одного-двух сегментов 64к для однобайтового-двубайтового массива. С такими даже DOS справлялся.
На секунодочку, для копирования, заполнения подобных массивов данными есть даже специальные команды аля movsb или stosw, которые работают на порядки быстрее простого перебора и заполнения по одному элементу как было бы в случае обычных ассоциативных с динамической типизацией.
Аноним 12/08/17 Суб 12:03:06 436541223
>>436538
Бля, ну ты тупой. Если ты из динамического ГДСкрипта напихиваешь в статически типизированный массив, кто должен проверять, че ты туда напихиваешь?
Аноним 12/08/17 Суб 13:19:08 436567224
>>436541
и что значит динамический гдскрипт? это какой-то новый уровень фантазий? скрипт сам себя пишет или что?

там где-то говориться о твоих фантазиях по перемещению данных из динамически типизированного массива в статически типизированный?

там просто говориться о медленной работе, там где она наоборот должна быть быстрой.
Аноним 13/08/17 Вск 11:22:55 437936225
>>436567
Схуяль типизированный массив должен быть быстрее, если он решает задачу фрагментации памяти?
Аноним 13/08/17 Вск 12:15:54 437938226
>>437936
> задачу фрагментации памяти
забавно, не знал что такие задачи существуют, но ладно

еще раз. там в примере сказанно от тысячах элементов. А это копейки. У тебя обоссаная текстура/меш займет как 5-10 таких массивов и никто не умрет.
Аноним 13/08/17 Вск 23:22:36 438065227
image.png (204Кб, 1658x1009)
1658x1009
state-stack.gif (965Кб, 598x421)
598x421
Заебошил систему состояний со стаком.
Табличка override, в состоянии, указывает, что "это состояние не даёт использовать функции update/draw указанные в override, у предыдущих элементов стака".
Аноним 13/08/17 Вск 23:26:27 438066228
>>411408 (OP)
>>438065
>override, в состоянии, указывает, что "это состояние не даёт использовать функции update/draw указанные в override, у предыдущих элементов стака"
а нахуя это надо?
Аноним 13/08/17 Вск 23:29:08 438068229
>>438066
Ну ты смотри. Игровая пауза продолжает рендерить игровое состояние, но запрещает ему получать нажатия на кнопки/обновляться.
love2d Anvin 13/09/17 Срд 14:04:59 442738230
В том году для девджема делал на Love2D простенькую игрушку с бесконечной на ходу генерируемой тайловой картой - очень даже интересный процесс.
Упёрся в скорость отрисовки, и только тут в треде вычитал какие там ещё возможности есть с хранением текстурок newSpriteBath в видеопамяти и быстрой отрисовкой, надо будет добраться и переделать, да и FFI тоже может пригодиться.
Аноним 15/09/17 Птн 19:21:31 443106231
1.png (29Кб, 917x492)
917x492
2.png (14Кб, 917x492)
917x492
>>442738
>Упёрся в скорость отрисовки
хуясе, а что с ней случилось? рисует же SDL2, если не ошибаюсь
обычо такая хуита начинается, когда в отрисовку логику пихают, или наоборот, лал
Anvin 19/09/17 Втр 11:16:52 443789232
да я тупо 100500 маленьких картинок выводил, потом сделал чтобы не всегда всё перерисовывать, а только изменения, но сделал криво - через сохранение текущей картинки в текстурку в каждом кадре (что не хило так кушало память, если её не чистить принудительно в каждом кадре, что как-то не очень хорошо).
Переделаю как руки дойдут на SpriteBatch ну и там в принципе можно убрать принудительное стирание старой картинки каждый кадр на уровне фреймворка, тогда даже мой исходный вариант будет шустрее, не говоря уже про раздельную прорисовку кусков карты.

но для прототипов love очень даже хорош, как для чего-то более законченного - пока не знаю :)
Аноним 19/09/17 Втр 17:22:05 443863233
>>443106
Рисует - opengl, конечно.
Скорость отрисовки в данном плане - скорость заливки данных в видеокарту, ибо куча говна дублируется.
Аноним 02/10/17 Пнд 14:31:49 446345234
Хочу вкатится в http://ggez.rs/
Какие подводные?
Аноним 02/10/17 Пнд 17:51:23 446358235
>>446345
Никто не поможет.
Аноним 02/10/17 Пнд 17:52:34 446359236
>>446358
Ну issue если что создать всегда можно. Не велика проблема. Меня больше инетересует что анон думает за сам love2d
Аноним 02/10/17 Пнд 17:59:33 446360237
>>446359
Сам по себе Love2D пиздат, но специфичен в целом.
Алсо, если это адаптация лова для раста, то возможно еще не все фичи реализованы, и выход новой версии будет задерживаться, хотя это менее критично.
Ну если чувствуешь в себе силы, то можешь какие-нибудь простые демки запиливать.
Аноним 02/10/17 Пнд 18:10:27 446361238
>>446360
Че бы такого запилить ради теста.
Аноним 02/10/17 Пнд 22:00:22 446407239
2017-10-02-2159[...].png (62Кб, 873x507)
873x507
Бля за що
Аноним 07/10/17 Суб 03:16:24 447115240
>>443863
>opengl
тащемта и вулкан и дирекс могут, но не суть, да
Аноним 01/11/17 Срд 15:10:11 454119241
Сделал Hello_button и задумался.
https://anotepad.com/notes/ti57jh
А если у меня будет несколько кнопок\объектов на экране, мне что каждый проверять на границы по очереди? Или есть какой-то неизъебский способ?
Аноним 01/11/17 Срд 15:50:24 454136242
>>454119
Суешь в массив. При маусмув/мауспрессд пробегаешься по всем.
Аноним 01/11/17 Срд 16:16:10 454140243
>>454136
А не удобнее будет заставить объекты следить за мышью, и реагировать, если она рядом?
Аноним 01/11/17 Срд 16:29:04 454142244
>>454140
По сути тож самое же, только в другом месте проверки.
Аноним 15/11/17 Срд 08:09:22 456559245
>>454140
Можешь натянуть на экран сетку пространственной индексации, заполнять её кнопками которые попадают в ячейки сетки, делить координаты мыши на шаг сетки в пикселях и пробегать только по кнопкам, которые касаются ячейки в которой есть мышь.
Это - быстрее всего для обработки, но чуть медленнее в загрузке.
Аноним 16/03/18 Птн 14:34:44 487570246
Посоны, немного тупой вопрос.
Я копаюсь под капотом у love2djam2018 и скачал например gift. Разархивировал love файл, а там main.lua, который моим сублимом открывается чисто как hex.
Но екзешником love2d съедается как миленький.
Может кто-нибудь предположить что это за метод сокрытия информации?
Decode в другую кодировку не помог.
File signature 1b4c 4a01 02 нигде не нахожу.
Аноним 16/03/18 Птн 14:40:45 487571247
Аноним 16/03/18 Птн 14:47:50 487573248
>>487571
>байткод
И шо, лове2д может с ним напрямую сработать? После интерпретации?
Аноним 23/03/18 Птн 19:07:17 490081249
>>487573
Луа-код можно компилить в байткод, это нормально.
И любая луа-машина (в т.ч. love2d) будет с ней работать.
Правда, у разных версий lua разный байткод, поэтому версии 5.1 и 5.3, например, несовместимы.

В love2d используется luajit, и байткод соответствующий.
Аноним 26/03/18 Пнд 08:49:38 491990250
>>490081
Спасибо большое за разъяснение.
Аноним 13/11/18 Втр 13:42:48 536774251
>>305497 (OP)
Народ вкатился в LOVE2D.

Посмотрел небольшую кучу примеров и игр, добрался до
Zerobrain Studio.

Что еще нужно для комфортного гейм дева и есть ли хорошие книги по LUA ? love2D ?
Аноним 13/11/18 Втр 14:09:15 536781252
Аноним 15/11/18 Чтв 11:27:52 537031253
>>536774
Зачем тебе книги по Луа? Там язык в полчаса изучения, достаточно одной табл урока на утубе, если не трогать метатаблицы и все с ними.
Аноним 15/11/18 Чтв 13:14:54 537039254
>>305497 (OP)
Почему создатели Love2d переписывали функции каждую подверсию???

зачем drawq превращатьв draw
screen в window

love.mousepressed( x, y, button ) в
где button ='l' или 'r'
а в 0.10.2
уже
love.mousepressed( x, y, button, istouch )
button = 1 или 2
!!!!
Аноним 15/11/18 Чтв 17:57:36 537070255
Аноним 12/12/18 Срд 13:51:29 540681256
bump
Аноним 13/12/18 Чтв 07:05:59 540776257
>>537039
Еще раз, я же.
Я новичок в Love2d.

То что игру реально написать это круто! Скачал кучу примеров, исходников.

Но вот то что автор программы наплодил версии не сильно совместимые между собой это МИНУС!

пусть сделает love 12 запускающий любой код от love 0.1.1 до love 11.2 .

И кстати никто не знает почему он в 11 версии ушел в установке цвета от 255, 255,255 к 1,1,1 (0.444, 0.111, 0,888)? В чем смысл?
Аноним 13/12/18 Чтв 12:26:11 540822258
image.png (412Кб, 640x480)
640x480
>>540776
>пусть сделает love 12 запускающий любой код от love 0.1.1 до love 11.2 .
Ты, похоже, новичок во всем? Ты еще Торвальдсу скажи сделой мне МакВиндовс, штобы все летало. Просто это нагло. Разработчики (если не ошибаюсь, л2д разрабатывает тоже не один человек) сознательно избавляются от глючно работающего кода, кода, вызывающего конфликты и прочее. Делать универсалку для развивающегося любительского движка, это значит нагружать исполняющий файл. Если какой-нибудь Автодеск может себе позволить (да и им это в кассу, ибо этим они отличаются от всяких конкурентов) и поддерживать одновременно дохуялиард версий.
Еще раз, почитай про обозначения версий. В большинстве систем версификации софта считается, что 11.1.2 и 11.1.1 имеют между собой общего 99 процентов кода и естественно они будут почти соместимы, а версия лоадера скажем 12.1 и программы 9.1.2 могут иметь (и имеют право иметь) кардинальные различия, вплоть до полностью переписанного с нуля кода. Совместимость двух дохуялиарда версий стоит дохуялиард денег, времени и кода. Ты готов оплатить их труд? Нет?
>И кстати никто не знает почему он в 11 версии ушел в установке цвета от 255, 255,255
Подозреваю, решил упростить математическое преобразование в гамме для платформы в целом. Чтобы работа пользовательских шейдеров была быстрее.
Аноним 14/12/18 Птн 08:23:54 540918259
>>540822
>сознательно избавляются от глючно работающего кода
Глючно работающий код?
Да ты теоретик!

Там просто функция window внезапно меняется на screen
drawq - сделали в следующей версии ее уже нет, но вы можете просто убрать букву q и все заработает!

Нахрена???
Сокращение кода, оптимизация бла бла бла.
Сделайте так что внутри черной коробки drawq была равна draw, раз ввели в предыдущих версиях.
Аноним 14/12/18 Птн 08:25:06 540919260
>>540822
> что 11.1.2 и 11.1.1 имеют между собой общего 99 процентов кода и естественно они будут почти соместимы, а версия лоадера скажем 12.1 и программы 9.1.2 могут иметь
еще раз ты теоретик!

Почему тогда он с 0.10.2 версии скакнул до 11.0 ?
Это вообще охуенные изменения?
Аноним 14/12/18 Птн 11:50:30 540930261
>>540919
>Почему тогда он с 0.10.2 версии скакнул до 11.0 ?
вот тут хуй знает, я за л2д не слежу, если честно. Просто луашник и мимокрокодил.
Аноним 14/12/18 Птн 12:08:20 540933262
>>540918
Между draw и drawq чуть больше изменений, чем просто буква.
Нахера тащить легаси код, если так захотел какой-то васян? Проект можно допилить и на старой версии, если сильно надо, просто через какие-то костыли будет.
Синтаксис уточняется, унифицируется, становится более красивым, а старое и некрасивое нет смысла тащить.
Если сильно приспичит, можешь в мейн.луа написать function love.graphics.drawq(...) love.graphics.draw(...) end и все будет работать как прежде.
Аноним 14/12/18 Птн 13:25:50 540943263
>>540933
>можешь в мейн.луа написать function love.graphics.drawq(...) love.graphics.draw(...) end и все будет работать как прежде.
Да именно это я и сделал, а тысячи новичков забили на это и пошли пилить свои игры в другие платформы.
Почему рубится сук на котором сидят?
Из за изменения с цветом не совместимы игры написанные <0.10 и >11.0
Этож сплошное отпугивание новичков, я взял прример и у меня ничего не работает.
Аноним 14/12/18 Птн 14:37:58 540948264
>>540943
Когда-то все равно придется исправлять ошибки прошлого. Сначала посчитали, что удобно будет 0..255 использовать, и это в принципе привычно. Но потом, видимо, стали чаще использовать фичи опенгла и шейдеров, а там удобнее 0,0..1,0. Относительно недавно еще какие-то фичи для более легкого 3д подвезли.
То что туторы на официальном сайте не апдейтят, это плохо, хотя документация там топовая. Да и уроки посвежее и более полные есть от юзеров, на хабре или еще где-то можно найти.
Аноним 21/12/18 Птн 07:35:41 541561265
1222.png (266Кб, 838x470)
838x470
Аноним 25/12/18 Втр 19:58:03 542187266
Отдельного треда по box2d я как-то не нашел. Поэтому спрошу прямо здесь: Я с физикой как-то никогда не работал, поэтому на box2d смотрю как на черта в табакерке.
Сейчас появилось желание сделать вернее идиотская привычка проводить новогодние вечера делая никому ненужную херню для себя небольшую игру, с физикой: А именно лабиринт по которому нужно будет катать шарик. То есть шарик должен отскакивать от стенок, катиться по инерции, расталкивать препятствия и прочие Но ещё на стадии прикидки в голове и чтения мануалов я понял одну вещь: У меня будет довольно большой и сложный лабиринт, и все его части должны быть физическими препятствиями. Логично сделать каждый "тайл" отдельным прямоугольным физическим объектом - но очевидно что их будет дохуя. И собственно вопрос - как можно сделать в box2d объект сложным по структуре но при этом считающим одним объектом при расчётах?
Аноним 25/12/18 Втр 20:21:12 542190267
>>542187
Сотню статических боксов он должен легко сожрать, тем более что динамический будет только один объект.
То что ты объединишь множество боксов в один полигон выигрыша не даст. Сложный объект сложнее проверять на столкновение.
Аноним 26/12/18 Срд 16:42:17 542299268
>>542190
Будут еще динамические препядствия но не много. Даже если сотню сожрёт без проблем, я сам перфекционист и не люблю пустой траты ресурсов. Пока придумал что на этапе генерации лабиринта собирать соседние "клетки" в более большие прямоугольники и создавать физические обьекты только для них уже. Но сделать алгоритм нормальным не получаеться.
Аноним 26/12/18 Срд 16:50:55 542305269
Вопрос уроня - идиот:
Сам фресворк поддерживает оптимизацию отрисовки того что не попадает в текущий кадр. Или при прорисовки объекта нужно сначала самому проверять его фактическую видимость?
Аноним 26/12/18 Срд 23:11:26 542472270
>>542305
Самому нужно пилить, насколько я знаю.
Аноним 27/12/18 Чтв 08:04:21 542510271
>>540930
Потому что в обновке много изменений и сильная несовместимость с предыдущей версией. Первая цифра означает мажорный релиз, вторая - багфиксы.
10.0 => 11.0 => 11.1 => 11.2.
Оно не сразу скакало, очевидно были промежуточные.
Аноним 27/12/18 Чтв 08:06:52 542513272
>>540943
Есть polyamory (https://github.com/megagrump/polyamory)
Типа лончер для запуска приложений в произвольной версии love2d (соответственно, у тебя должны быть поставлены все необходимые версии). Не бойся, 10гб места они не сожрут.
Аноним 27/12/18 Чтв 08:13:43 542514273
update.gif (9679Кб, 598x424)
598x424
>>542305
Сам запилишь.
По мне, эффективной методикой является использование чего-то вроде регулярной сетки, в которой располагаются объектики.
На гифке, например, я использовал библиотеку hardon collider для коллизии, и оттуда же - регулярную сетку. Из неё вырезается некоторая область (список объектов по AABB), и рендерится. Соответственно, объектов может быть сколько угодно, не попавшие в экран мы даже не проверяем.

Если у тебя ну прям до жопы одинаковых объектов, то уже эффективнее пихать в батчи и рисовать сразу всё через батч (например, вытаскивать объекты из большой области и пихать в батч). Развлекалова много, в общем.
Аноним 27/12/18 Чтв 14:50:44 542610274
>>542513
> polyamory ланчер для love2d
Ахаха, кое-кто знает толк в игре слов.
Аноним 28/12/18 Птн 07:22:10 542706275
>>542513
>Есть polyamory (https://github.com/megagrump/polyamory)
>Типа лончер для запуска приложений в произвольной версии love2d (соответственно, у тебя должны быть поставлены все необходимые версии). Не бойся, 10гб места они не сожрут.

Есть, не боюсь.
Но вот вопрос, если сторонние умельцы делают ланчер для запуска всего множества версий, то это востребовано?

Так почему бы создателям, не сделать единый экзешник для всего подмножества версий 0.0.1 - 0.10.2 и так уж и быть если прям нереально еще один 11.0-15.0. (а лучше love2d.exe вообще для всех)? Версию сами просили в conf.lua записывать, какие команды на что меняли тоже знают.
Аноним 08/01/19 Втр 16:11:53 544376276
>>542706
Ты предлагаешь им запаковать все версии love в одну? Ты бы ещё предложил запихнуть все версии какого-нибудь дистра линукса в один дистр, или все-все версии питона в один питон.
Аноним 08/01/19 Втр 16:13:38 544377277
>>542706
За время развития love2d, менялись версии динамических библиотек (хотя бы версии SDL), ты плохо понимаешь цену того что хочешь.
Аноним 09/01/19 Срд 07:35:37 544503278
>>544376
Гы?
Че там запоковывать то?
Там всего то надо принимать команды в двух - трех форматах, запоковать внутренние приравнивания что screen = windows если что, drawq = draw и так далее. +1000-30000 байт смотря сколько раз они команды меняли безосновательно.
Аноним 09/01/19 Срд 16:31:36 544550279
>>544377
Игнорируйте его, такие люди должны стучаться в службу поддержки Микрософт с просьбой портировать легаси-код из win 3.1.
Аноним 10/01/19 Чтв 08:03:40 544704280
>>544550
что love2d версий 0.8. -0.10 не был покрыт тестами? ;-)
Аноним 11/01/19 Птн 20:17:26 545128281
>>544704
Сколько ты готов заплатить разработчикам за такой мердж?
Аноним 13/01/19 Вск 19:27:48 545615282
>>537039
>button = 1 или 2
было хуево, стало пиздато. С интежерами поди по-проще будет, чем бесполезные где button ='l' или 'r'
кстати а mousewheel нажатие там обрабатывается?

и вообще чего доебался. Найди хоть один более-менее популярный продукт, где бы не менялся API.

>>490081
этот самый байт код можно "дизассемблировать" до удобочитаемого и понятного lua, т.е. реально использовать для соркытия СУПИРСИКРЕТНАГО кода игры?
Вообще что юзают перед тем как выкладывать в тот же стим, какие-нибудь обфускация кода с добавлением кучи воды и бесполезных функция с переменными, чтобы запутать? Или всем просто похуй?
Аноним 14/01/19 Пнд 07:00:20 545714283
>>545615
я смотрел, популярные офусцируют.
А вот на ресурсе где дайте 2$ или просто скачайте, и где переодическит и с кодом выкладывают, не обфусцируют.
Аноним 30/01/19 Срд 01:16:02 551430284
Лованы, а под ондроед кто-то что-то мастерил?

я попробовал свой тестовый гейм оф лайф запустить на мобилочке, результат как бы немного разочировал, все эти банчи-хуянчи оно обрабатывало медленее чем на древнем сабноуте.
Но, если все в пределах экрана, то 60 фпс на изичах.

Правда чому-то офицальной любви 11.2 даже нет в планах, 11.1 приходится ставить руками без маркета. Чувстую придется свою собирать и ебаться с манифестами и плейсторе.

Может кто уже пытался?
Аноним 30/01/19 Срд 09:06:26 551452285
screenshot.png (373Кб, 1280x1024)
1280x1024
>>551430
>приходится ставить руками без маркета
так это не только в ондроеде

>60 фпс на изичах
сейм шит, бро
Аноним 30/01/19 Срд 09:08:56 551454286
Screencast30.01[...].webm (8882Кб, 1280x1024, 00:01:15)
1280x1024
>>551452
>фпс
шебм отклеилсо
Аноним 30/01/19 Срд 09:54:58 551469287
>>305497 (OP)
Где список успешных игр на love2d?
Аноним 30/01/19 Срд 10:27:44 551473288
Аноним 30/01/19 Срд 12:45:36 551501289
>>551452
зойчем ты мне показал скрин с кудахтера, писечка именно в сборке под ондроед. А make install я и на фришечке осилил.
>>551469
в стиме как минимум пара релизнутых, но там все совсем простые.

я же хотеть делать рпгешечки/хиросы под ондроед без донатов и банеов. Бесплатная демка и платная фулл за бакс.

Алсо обратил внимание как в плейсторе донатопораша пытается пролезть в топ. Делают донатопорашу и ставят ей минимальную цену, потом делают скидку в 100% и вуаля - ты в топах премиум игр по скидке.
Аноним 30/01/19 Срд 14:09:57 551549290
>>551501
>зойчем
ну вот тоже руками ПОД СЕБЯ, а не из бинарного пакета, это же лёвы тред. а под ондроед .apk небось проще сбилдить даже из линупса и фришки, тока сдк/ндк доставить
Аноним 30/01/19 Срд 14:25:28 551557291
>>551549
ну опять же имеет смысл только при распространении линупс/макос версии. Для шинды достаточно прикрепить лов файл в конец стандартного екзешника.

А вот с дроедом чувствую та еще ебля.
Аноним 30/01/19 Срд 14:59:26 551574292
>>551557
https://love2d.org/wiki/Game_Distribution#Android
вот с нуля арк из под макоси и линупса билдят же вроде

а через АРК тулс как раз и есть ебля с манифестами
https://love2d.org/wiki/Game_Distribution/APKTool

к этому можно еще запилить мультик на вебсокетах вебморду логин/пасс + база юзеров, их ачивок, статистика онлаен и т.п. типа свой стим, лал
>Publishing as a HTML5 or JavaScript game is possible

ну и дев с битбакета вещает про легаси сборку, пакадж и деплой с адмобом, версия 0.10.x
https://bitbucket.org/MartinFelis/love-android-sdl2/wiki/Home
Аноним 30/01/19 Срд 15:08:33 551582293
>>551574
читай внимательно

FIXME: This method is obsolete and shouldn't be used! New guide is needed if you plan distributing your game to Play Store. Google announces that all apps in Play Store must be compatible with API level 26, which can't be satisfied because LOVE APK limitation at the moment.

> версия 0.10.x
не хотеть
>адмоб
ну кириллу будет мягко говоря трудно конкурировать с остальными донато и баннеропарашами. Наоборот, поделок без баннеров и доната можно по пальцам пересчитать, этим и надо брать, имхо. Например, ровно ОДНУ вменяемую рпгешечку - Exiled kingdoms. А ведь если ПОДУМОТЬ, то там нет ничего особенного. Прередеренный псевдо 3д, довольно простые квесты и локации. ЛЕВИЛДИЗИГН уровня кирилла. Разве что стори неплохая и текст самих квестов.
Аноним 30/01/19 Срд 15:26:04 551594294
>>551582
>читай
я не читал пока, увидел легаси и решил посмотреть позже, все равно при ~200kbps эти сдк/ндк тянуть неохота
и свежих доков нет вроде, внизу там висит линк на типа апдейт, но я и его не читал
а вот рпгешки помню прикольные на j2me под нокию были, причем брендовые, мож даже от близзардов. там нужно было в локациях выполнять квесты, гулять по глобалу и пиздить нпц. экономику вот только вроде не завозили туда. а жаль. единственно именно экономическим был клон серии Anno или Port Royale, но тоже поверхностно и тема была не раскрыта и вообще не рпг, а тайкун кокойто
Аноним 30/01/19 Срд 15:39:26 551596295
>>551594
откуда ты друг с такой скоростью?
качай лучше небольшие игрухи запускай их и правь код.
Аноним 30/01/19 Срд 16:00:32 551603296
screenshot.png (13Кб, 400x131)
400x131
>>551596
из тайги капчую. ну почти: паблик вайфай хотспот с плавающим сигналом, который иногда вообще теряется.

игрухи то да, код смотреть не запрещают же, ну или не все, но вот захочется например шейдоры задрочить, а в новой версии двигла у них например синтаксис сломан. я штото переписывал шейдорное с 8 на 9ку вроде, так после этого ни с кем неделю не разговаривал. причем и в документации никуя об этом не было
Аноним 31/01/19 Чтв 02:52:59 551838297
bumptest.gif (988Кб, 442x347)
442x347
Тестю bump. Очень крутая штука, если хорошо организовать проект.
Никаких лишних коллизий, объекты ровно без реакции пролезают в дырки, размером ровно с эти объекты, очень круто. Ну, и все объекты являются "пулями", при попытке перемещения, быстродвижущиеся снаряды не пролетают.
Аноним 07/02/19 Чтв 02:41:54 554572298
>>305497 (OP)
Думаю, куда бы перекатиться с геймейкера. Устал в первую очередь от его ебучего языка gml, в котором нельзя даже создать свою структуру данных. Ну и в целом хочется выйти на более ненубский уровень, чтобы движок не определял за меня архитектуру игры. Так вот, как говорят в годот треде, почему я должен выбрать love2d? Если love2d обертка над sdl, то может сразу выбирать sdl, ну или аналогичные sfml, allegro или libgdx на худой конец?
Аноним 07/02/19 Чтв 11:38:57 554621299
>>554572

love2d - это, если быть точным, обертка над sdl+opengl.

sdl и прочие - это низкоуровневые графические библиотеки, единственной высокоуровневой фичей которых является абстракция платформо-OS-зависимых API.

инструменты и сущности высокого порядка тебе придется велосипедить самому.

Если ты не демосценер/любитель подрочить байты ради собственного удовлетворения или просто хочешь научится в низкоуровневое дрочерство/не программист крупной игровой студии, а хочешь просто делать игори - то выбираемое тобой направление сомнительно - ты 90% всего времени потратишь на велосипединг кривых велосипедов и их отладку. Тебе придется придумывать и реализовывать самому редактор уровней, иерархию игровые сущностей, мапить их на уровень GAPI, колхозить/прикручивать собственный скриптовый двигун. И только после этого ты сможешь заниматься непосредственно игрой, в ходе чего тебе будет постоянно пригорать пердак от внезапного отсутствия той или иной фичи и ты раз за разом будешь срываться с написания геймплейной логики в написание фич двигуна, а твоему мозгу будет все сложнее и сложнее держать всё это в голове одновременно и работать в таком ритме.

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

Тебе же придется всё это делать в жало.

Аноним 07/02/19 Чтв 13:00:28 554635300
>>554572
> почему я должен выбрать love2d? Если love2d обертка над sdl, то может сразу выбирать sdl, ну или аналогичные sfml, allegro или libgdx на худой конец?
У всех свои особенности. love2d - он на lua, и в этом его прикол. sdl - на чистом си, а sfml - на c++, и он объекто-ориентирован. Allegro, ClanLib, HGE и подобные - на с++, и как я понимаю, и них более богатый функционал, т.е. больше полезных фич для геймдева из коробки можно найти.
Какой язык ближе - такой и выбирай. Дополнительный функционал, на самом деле, не обязательно самому писать, можно найти другие сторонние библиотеки, их куча в опенсорсе.

>>554621
>Тебе придется придумывать и реализовывать самому редактор уровней, иерархию игровые сущностей, мапить их на уровень GAPI, колхозить/прикручивать собственный скриптовый двигун.
По моему скромному опыту могу несколько вещей добавить.
Во-первых, какие-то сложные вещи можно найти в инете. Если тайловая игра, можно присобачить Tiled. Хотя для не-тайловых хз, есть ли подобное.
Во-вторых, не обязательно вообще сложно писать. Можно максимально упрощать, делать только необходимое - это ключ к успеху. Только при надобности - делать более абстрактно, расширяя функционал и рефакторя код.
В-третьих, первый проект да, можно дохуя всего с нуля написать. Но если будешь более-менее аккуратно писать, то наберется парочка полезных собственных либ, которые можно потом переиспользовать.

Это все очень интересно и дает много опыта. Но с практической точки зрения - я хз как на это будут смотреть потенциальные работодатели, которые 90% используют юнити под мобилки. Адекватные наверное оценят опыт, но хорошее знание нужного им инструмента это не заменит полностью.
Аноним 07/02/19 Чтв 13:03:23 554636301
>>554621
>инструменты и сущности высокого порядка тебе придется велосипедить самому.

Ты так говоришь как что-то плохое.
В любом случае придется тратить время либо на велосипеды, либо на изучение юнити-хуюнити. Но вот с последним ты можешь упереться в непреодолимую стену ограничений. А так тебе полная свобода сделать свое говно. Я так это вижу.

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

>в ходе чего тебе будет постоянно пригорать пердак от внезапного отсутствия той или иной фичи
В моем случае пердак уже давно подготовлен, я не питаю иллюзий и просто сделаю максимально просто.
Тут есть другой момент, в отличие от юнитей, мне не надо изучать инструмент, тот же реадктор что ты упомянул, по-сути можно сразу ваять свой ААА ШИДЕВР. А самое главное есть отличные примеры на чем можно поучиться, а то и откровенно спиздить - Don't starve, ToME4 и тп.
Кстати, читая исходнки DS я ПОНИЛ как именно там реализуется анимация, со всеми этими стейтграфами, как реализован AI, как вообще все правильно ЗДЕЛОТЬ. С префабами и поэтэссами.
Аноним 07/02/19 Чтв 13:29:28 554648302
>>554636
Вот это манямир.
Юнити больше 10 лет в разработке.
Конечно же, это только плюс, что нужно все самому делать, ведь у тебя есть 10+ лет чтобы сделать движок
Аноним 07/02/19 Чтв 13:45:58 554652303
>>554621
>Тебе придется придумывать и реализовывать самому редактор уровней, иерархию игровые сущностей
Проблема то в том, что со временем понимаешь, что стандартные фичи гамака не очень нужны (а их кстати не так уж и много). Физику сам рассчитываю, столкновения сам считаю, поиск пути свой писать приходится, даже спрайты для некоторых нужд приходится в ручном режиме анимировать, а не в стандартном автоматическом, редактор уровней неудобный. В итоге от гамака нужна только возможность рисовать спрайты на экране. А вот при попытке что-то навелосипедить натыкаешься на внутренние ограничения движка.
Аноним 07/02/19 Чтв 13:50:16 554656304
>>554648
Чтобы сделать игру, не нужно 10 лет тратить на движок.
За пол года, если без сильных выебонов, можно сделать норм игрушку практически с нуля.
Люди за сутки или за неделю без юнитей пилят годные прототипы игр на джемах. Остальное время уходит на допиливание, контент и прочее.
Аноним 07/02/19 Чтв 13:52:33 554658305
>>554635
>Какой язык ближе - такой и выбирай.
Мне никакой из этих языков не ближе. Важнее, чтобы движок не был заброшен и стабильно работал. Я так понимаю sdl тут лидирует.
Аноним 07/02/19 Чтв 14:03:00 554663306
>>554648
Простой вопрос - чому Klei такие идиоты и не зделоли все на юнити?

Асло, юнити для меня - синоним тормозов, быстрой растраты батарейки на мобиле. А вот внезапно нечто на самописном движке работает бодрячком (рпгшечка).
Аноним 07/02/19 Чтв 14:21:57 554672307
>>554658
Все, которые на слуху, так или иначе разрабатываются и достаточно стабильно работают. Попробуй посмотреть туториалы по каждому, как запиливается какая-нибудь простая игра, глянь код, выбери более приемлемый для тебя вариант по синтаксису/апи.
Аноним 07/02/19 Чтв 14:28:24 554677308
>>554663
А ты что, klei?

Время разработки складывается из времени написания движка, времени создания редакторов и время создания контента.

Ты можешь, например, взять кривой tiled, и времени на создание в нем контента ты убьешь в разы больше, чем если ты будешь делать тайловые карты в юнити.
Тебе будет нехватать возможностей tiled, и ты будешь писать костыли, и еще больше затягивать разработку.
Аноним 07/02/19 Чтв 14:29:15 554679309
>>554663
>Klei
>2013 неголодайка на крестах и луа
>2014 Invisible на чужом фреймворке с крестами и луа
>2018 HOT Lava на UE4 с крестами. В процессе движок апгрейдится до Юнити
>2017 Oxygen Not Included на юнити. Без крестов и луа.

Пргресс, ёптаблядь.
Аноним 07/02/19 Чтв 15:23:00 554695310
>>554679
Учатся на своих ошибках парни
Аноним 07/02/19 Чтв 16:25:56 554737311
>>554679
Заметь, что кроме DS - все шлак и вроде как без модов.
А именно на них держится его популярность.
Как там с модами под юнити, бтв?

Алсо DS и DST - это своего рода TES у беседки или ФИФА у ЕА, которую доить можно еще долго. DLC выпускают каждые два года и их всегда раскупают. У меня большие сомнения, что юнити поделия обладают такой же кустомабельностью. Под DS вон даже DnD запилили. Там вообще по-сути конструктор, ваяй что хочешь.
Аноним 07/02/19 Чтв 17:21:29 554761312
>>554737
Хуй знает, объективно оксиген лучшее, что было у клей.
>НЕДАВНИЕ ОБЗОРЫ: Очень положительные (359)
>ВСЕ ОБЗОРЫ: Очень положительные (15,946)

>Там вообще по-сути конструктор, ваяй что хочешь.
https://forums.kleientertainment.com/forums/topic/88186-mods05-oni-modloader/
Кек. У оксигена модкит есть и глобальные моды.

>DLC выпускают каждые два года
На оксиген раз в месяц выходит обнова, которая расширяет геймплей, добавляет новые фичи и ресурсы.
Аноним 07/02/19 Чтв 18:31:42 554771313
Снимок экрана20[...].png (26Кб, 311x120)
311x120
Снимок экрана20[...].png (65Кб, 320x188)
320x188
>>554761
ну ок, сравнимо
хотя еще далеко

> It allows to load mods contained in independent dll files
лол
превед конпеляция и лишь под венду
спасибо,я этого овна уже под римворлд поел
Аноним 07/02/19 Чтв 19:33:54 554819314
>>554771
>хотя еще далеко
Так неголодайка и вышла пораньше. Ну и покупается лучше, всё-таки 40 рублей это не 250.
>превед конпеляция и лишь под венду
Ну во-первых, платформа-то одна. На линупсах в эти ваши игры не играют. А во-вторых, игровой код в открытом виде, ilSpy в руки и погнал пилить под себя. Да и нахуя Клей давать тебе модкит уровня беседковского такой же глючный, но дающий дофига контроля если они сами по себе пилят "моды" ради подъёма продаж. Но мы уже уходим в строну, что хотел я уже сказал.
Аноним 07/02/19 Чтв 20:04:13 554838315
>>554621
>love2d - это, если быть точным, обертка над sdl+opengl.
Объясни подробнее, разве sdl в свою очередь не обертка над opengl и directx, чтобы самому в эти апи не лезть? Зачем love2d в opengl лезет?
Аноним 09/02/19 Суб 04:50:02 555247316
>>554838
Шейдеры, например, в любом случае пишутся на glsl. Плюс кусочек оптимизаций вывода графена. SDL - не всеобъемлющая обёртка над графикой, хотя там и много всего полустандартного.
Аноним 05/04/19 Птн 10:29:12 571466317
>>551452
Ты зачем из-под рута сидишь, дурик?
Аноним 05/04/19 Птн 10:44:23 571468318
Сейчас есть возможность 11.2 запустить под android и ios?
Аноним 05/04/19 Птн 11:02:58 571476319
>>554677
Просвети, чем именно крив Tiled и чего в нём тебе не хватает?
Аноним 15/04/19 Пнд 13:22:32 573719320
Zyq0LFc.gif (26521Кб, 768x483)
768x483
бампуски

Аноним 15/04/19 Пнд 13:27:15 573720321
>>571468
а насколько там важные отличия?
порта на ведроид скорее всего не будет в ближайшем будущем вот и думал чтоб все на одной 11.1 базе делать свои ААА прожекты.
Аноним 15/04/19 Пнд 13:28:28 573721322
>>573720
На юнити все есть
Аноним 15/04/19 Пнд 13:39:42 573722323
>>573721
Юнити потребует бабло за комерч. исп. На юнити особо не повелосипедишь, юзай что дают и не выебывайся. А на луа я могу хоть по сети передать все - от текстурки до полного префаба очередного монстрика со своими стайтграфами, мозгами и прочим.

В общем не мешай тут кирилить, пили очередной раннер, платформир и прочее тормозное говно для мобил.
Аноним 15/04/19 Пнд 13:42:40 573723324
>>573722
>ыыы юнитя для шкальникав, ыыыы, пили платформиры, пока я тут гташку заебашу на говне, ыыы
Ну удачи тебе
Аноним 15/04/19 Пнд 13:46:35 573724325
>>573723
Тредик не про говноюнити. Иди метйся говном с уе4 и годотами. Там тебе рады.

А тут суровые дивилопиры. Это все равно как сидиезник сунулся бы к ассемблеровщикам.
Аноним 15/04/19 Пнд 13:53:27 573725326
>>573724
Да вы только на словах львы толстые, а на деле хуи велосипедные. Пока очередной костыль пилите весь ваш настрой улетучивается. На ваших говнодвижках вообще игр нету, балаболки пиздливые.
Аноним 15/04/19 Пнд 14:11:57 573731327
>>573725
>вообще игр нету
как минимум две в стиме, с положительным рейнтингом.
так что ИЗВИНИСЬ.

ДА и вообще можно подумОть тут хоть один успешный дивилопир на этом твоем лагунити.
Аноним 15/04/19 Пнд 19:13:08 573762328
>>573720
а на 11.1 есть? мне основные введения 11 части надо, 10 не подходит
Аноним 23/04/19 Втр 21:22:50 576126329
Аноним 24/04/19 Срд 08:29:51 576151330
>>576126
ПОСОНЫ НИКОЧЯЙТЕ ТАМ ВИРУС ПИШУ С ТЕЛЕФОНА
Аноним 24/04/19 Срд 09:37:07 576154331
>>576126
а сами пробовали эти инструкции, все нормально работало, если делать по ним?
Аноним 25/04/19 Чтв 20:32:05 576484332
Аноним 18/05/19 Суб 01:32:08 581847333
Любваны, отписываемся о прогрессе.
Аноним 18/05/19 Суб 01:44:43 581848334
>>581847
Диплом пишу, пока прогресса нет.
Аноним 09/08/19 Птн 14:10:00 599824335
>>305497 (OP)
Имеет ли смысл писать все велосипеды и прочее на C/SDL или сразу переходить на LOVE? Сильно ли последний сжирает лишних ресурсов? Единственная ссылка по теме ведёт на давно закрытый форум
Аноним 09/08/19 Птн 14:30:20 599826336
>>599824
>Сильно ли последний сжирает лишних ресурсов?
сильно. на love2d сейчас смысла писать нет. нет поддержки платформ
Аноним 09/08/19 Птн 14:53:52 599828337
>>599824
Если собираешься пилить 2д, то хватит за глаза. Да и 3д есть возможность сделать, и скорее всего успешно, если пилить по уму.
Луа на самом деле не такой уж жирный (не зря ж его во встраиваемых системаю юзают и как скриптовый язык часто). А какие-то критичные части можно перевести на плюсы (FFI).
С кроссплатформенностью да, не все так гладко, но вообще люди и под линуксом, и на андроид пилят, и на мак/иос. Были порты и для веба, сейчас хз как с ними.
Короче лёв скорее для энтузиастов. Если нравится луа+лёв и есть желание повозиться, то не вижу проблем.

Пара списков игр на лёве:
https://store.steampowered.com/curator/32659238-L%C3%96VE-Games/
https://itch.io/games/platform-android/tag-love2d
Аноним 09/08/19 Птн 15:55:34 599831338
>>599828
>Луа на самом деле не такой уж жирный
проблема луа в отсутствии низкоуровневых типов данных.
любой мало-мальски сложный алгоритм будет нещадно тормозить из-за таблиц.
Аноним 09/08/19 Птн 15:57:16 599832339
>>599828
>С кроссплатформенностью да, не все так гладко, но вообще люди и под линуксом, и на андроид пилят, и на мак/иос. Были порты и для веба, сейчас хз как с ними.
Любительские поделки, которые не обновлялись годами. Я бы на это серьезно не рассчитывал при создании игры, так как будет не очень приятно в конце разработки обнаружить какую-нибудь ошибку при использовании порта
Аноним 09/08/19 Птн 16:52:41 599833340
>>599831
Таблицы в целом довольно оптимизированы, даже если будут дырки в массиве. Для числовой индексации там обычный массив используется, для доступа по ключу - хэш-таблица, там особо нечему тормозить если совсем жирно не растрачиваться на использование памяти. Есть некоторые фишки, которые стоит учитывать для оптимального кода
https://www.lua.org/gems/sample.pdf
http://lua-users.org/wiki/OptimisationCodingTips
Можно подрубить FFI и на Сях запилить какую тебе угодно plain old data структуру.
>>599832
Тут да, гарантий никаких. Если хочешь беззаботно покорять мир своей поделкой на всех возможных устройствах, то скорее надо смотреть в сторону чего-то более весомого.
Аноним 14/08/19 Срд 16:21:58 601407341
>>599824
С/С++ и SDL2 - это уже почти стандарт в гейдеве, та что все равно пригодиться
использовать ли Love - это уже зависит от проекта: 2d игры на компы и андроиды, несложные графические навороты.. если похоже на требуемое, то можно брать
сам lua мало тормозить работоспособность проекта, все же самый быстрый скриптовый язык, поэтому его и используют в большинстве игр в том или ином виде
Аноним 14/08/19 Срд 16:34:58 601411342
>>601407
Вот только используют его для простого скриптинга поведения объектов, а не для программирования геймплея.
Аноним 14/08/19 Срд 16:48:48 601415343
>>601411
Поведение объектов и геймплей - это не одно и то же?
Аноним 14/08/19 Срд 17:53:26 601430344
>>601415
Не совсем. К геймплею относятся общие компоненты и алгоритмы. Контроллер персонажа, инвентарь, логика скиллов, заклинаний, поиск пути и т.д.

А скрипты это скорее конкретные сценарии поведения для разных объектов. Активировать дверь при нажатии кнопнки с определенным ID, показать диалог с конкретными NPC. Задать NPC какое-то поведения для определенного квеста. Такие мелкие поведения очень удобно писать в скриптах, и очень неудобно писать в нормально геймплейном C++ коде.
Аноним 14/08/19 Срд 18:01:53 601433345
>>601430
То есть скрипт это как правило небольшой, одноразовый кусок кода, который используется только в одном месте игры и больше не используется нигде.
Поэтому так легко писать такой код на высокоуровневых скриптах: просто когда тебе нужно новое поведение, то создаешь новый скрипт и все.
В С++ либо хардкодить это все нужно, либо пытаться параметризировать все в какой-то общий для всех объектов компонент.
Аноним 14/08/19 Срд 21:16:07 601590346
>>601430
Инвентарь, поиск пути и прочее - это не геймплей, а скорее движковые фичи. Их да, имеет смысл на языке самого движка делать. Все остальное - нормально реализуется в скриптах.
Проблема скриптов на с++ не в том, что неудобно писать, а в том, что надо перекомпилировать код при любых изменениях, и это довольно затяжное дело в больших проектах.
Аноним 14/08/19 Срд 21:27:35 601595347
>>601590
>что надо перекомпилировать код при любых изменениях
Сразу видно человека, никогда не писавшего на плюсах. Перекомпилируется только отдельный измененный объектный файл, т.е. если у тебя 100 cpp файлов и ты меняешь один, компилируется только один измененный, и это проходит быстро.
Вот если ты меняешь заголовок, который подключен в 100 файлах, тогда будет печаль, но на практике такое редко бывает, т.к. один заголовочник в 100 файлах это признак говнокода.
Аноним 14/08/19 Срд 21:56:29 601610348
>>601595
Это очевидно. Но плюсы все равно не так быстро компилятся, зависит же еще от самого кода в файле.
Я к тому, что подхватить на лету скриптовый файлик проще, особенно если это нужно делать не программеру.
Аноним 15/08/19 Чтв 04:46:42 601668349
>>601411
И для того и для того, не только как конфигурационные файлы, но и более крупные куски геймплея: minetest, dst.. тысячи их.
>>601430
Ну приблизительно так, только игра не всегда проектируется как монолитный проект, поэтому в скрипты еще уходит та логика, которая может быть модифицирована игроками и мододелами.
>>601590
Нет, так поступают по другим причинам. Данные выкидывают в скрипты в проектам, потому что часто ядром геймплейной логики, которая пишется на плюсах, занимается одни кодеры, а сам контент с его тонким поведением описывают другие кодеры или вообще те, кто далековат от программирования.
Аноним 18/08/19 Вск 10:52:12 602650350
1.jpg (35Кб, 573x892)
573x892
Настройки X
Ответить в тред X
15000 [S]
Макс объем: 40Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
Стикеры X
Избранное / Топ тредов