кота
Интересное у вас тут наследование
Snusmumriken
С глобальными полями классов разобрался?
Snusmumriken
Если ты задашь это же поле какому-нибудь объекту, он начнёт хранить собственное уникальное значение, но у остальных экземпляров оно будет доходить до дефолтного классового поля.
Snusmumriken
+
кота
Да
Snusmumriken
Красаучик
кота
кота
Спасибо тебе за статейки
кота
Очень помогли
Snusmumriken
Snusmumriken
Im doing it right?
О, нашёл у тебя косяк
Snusmumriken
Так как ты хотел бы, оно бы выглядело как: function player:new(...) local Object = {} Object.w, Object.h = 50, 50 Object.mode = "fill" Object.x = x or 100 Object.y = y or 100 self.__index = self return setmetatable(Object, self) end Мы же заполняем объект. В self сюда пришла таблица player, соответственно менять её нет смысла кроме self.__index = self, который можно было бы задать один раз вне этой функции.
кота
Сейчас поправлю
Snusmumriken
Я просто осознанно заполнял поля класса вместо экземпляра :D Да ето тупо
А выглядело как неосознанное применение self'а ))
кота
Хех Пойду попрактикуюсь чутка Если что — сюда принесу
Snusmumriken
Сделяль
fgntfg
Snusmumriken
Leon174
Всегда считал, что с этим цпп что-то не так. Вот и доказательства подвезли.
кота
fgntfg
fgntfg
кота
Ммммм манул..
кота
Проще один раз выставить local player = {} player.__index = player Чем каждый раз при создании нового объекта перезадавать это поле. А потом: function player:new(x, y) -- переопределяем self с "класса" -- на новосозданный "объект" self = setmetatable({}, self) self.x = x or 10 self.y = y or 20 self:callFunction() -- сразу можем дёргать методы return self end
это вызывает некое недопонимание, но вроде разобрался часть про «переопределяем self с "класса" на новосозданный "объект"» Таким способом можно клепать сколько угодно экземпляров? Потому что в каждый раз мы создаем таблицу конструктором {} в setmetatable({}, self) и возвращаем ссылку в self, так? Просто сначала мне казалось что мы переопределяем таблицу player полностью, как будто происходит переопределение одной таблицы (лол) Но внутри функции player:new хранится только ссылка на новую таблицу (экземпляр класса), которой указана как управляющая player, которая потом выплюнется в переменную-объект которой мы присвоим вывод функции, я прав? (Через час опять посмотрел сюда, все еще не очень понятно. С отдельной таблицей все более наглядно и логично) Я тут конечно словесный понос ебанул, надеюсь я понятно выразился. Просто хочу ясность привнести
fgntfg
Где прототип
кота
Дома
fgntfg
Надеюсь там ебошит андеграунд
кота
Забейте ебать
кота
Но я всё равно не могу определить где его использовать, кроме как для убирания этих подергиваний
кота
Кстати я когда-то где-то видел что как-то останавливали игровой цикл update-draw когда окно перетаскивалось/не в фокусе
кота
Знает кто?
кота
А, еще, как залочить фпс, типо всинк?
Snusmumriken
это вызывает некое недопонимание, но вроде разобрался часть про «переопределяем self с "класса" на новосозданный "объект"» Таким способом можно клепать сколько угодно экземпляров? Потому что в каждый раз мы создаем таблицу конструктором {} в setmetatable({}, self) и возвращаем ссылку в self, так? Просто сначала мне казалось что мы переопределяем таблицу player полностью, как будто происходит переопределение одной таблицы (лол) Но внутри функции player:new хранится только ссылка на новую таблицу (экземпляр класса), которой указана как управляющая player, которая потом выплюнется в переменную-объект которой мы присвоим вывод функции, я прав? (Через час опять посмотрел сюда, все еще не очень понятно. С отдельной таблицей все более наглядно и логично) Я тут конечно словесный понос ебанул, надеюсь я понятно выразился. Просто хочу ясность привнести
function player.new(self, x, y) self = setmetatable({}, self) return self end local pl = player.new(player, 10, 20) self — это просто один из аргументов функции, точнее ЛОКАЛЬНАЯ ПЕРЕМЕННАЯ несущая в данном случае таблицу player. Мы переопределяем ЛОКАЛЬНУЮ ПЕРЕМЕННУЮ с таблицы player, на новосозданную табличку у которой player в качестве метатаблицы.
кота
Вот, спасибо тебе большое
кота
Теперь все ясно
Snusmumriken
И делаем мы это только затем, чтобы у нас везде, во всех методах, self относится только к объектам а не к табличке-классу, чтобы всё было равномерно без каких-то особых "function Class:new()", где self это не то что во всех остальных местах ))
кота
Seems logic
кота
Кстати, в том посте с астероидс у нас вся движуха в одном файле В начале файла мы объявляем там всякие Field Bullet и прочие Как распихать классы по модулям? В начале каждого модуля объявить необходимые пустые переменные, а потом в мейн файле все магическим образом заработает когда мы подключим все модули? Сейчас возможности попробовать нет, я высказываю свои предположения
кота
Не пиздите палками за то что я не думаю перед тем как писать)
Snusmumriken
Не, пакуешь всё в табличку, в конце модуля — ретурн этой таблички.
Snusmumriken
После реквайра — используешь дёргая методы
кота
Не, пакуешь всё в табличку, в конце модуля — ретурн этой таблички.
Ога, а как мне в модуле игрока использовать модуль оружия, например?
кота
Или это хуевая идея и так делать не надо
Snusmumriken
две таблички )) но лучше так не делать, да
кота
Поняв
Snusmumriken
Хотя если класс вспомогательный — вполне норм тема.
Snusmumriken
Вот тут вот — вспомогательный класс client, вполне себе норм чувствует рядом с классом server. Возвращаем server. https://pastebin.com/sJQCK5PJ
Snusmumriken
Если у тебя игрок отвечает за взаимодействие с оружием, можешь наплодить классов-пушек с классами-пульками там же где и игрок, но лучше положи рядом и реквайрни игроком.
fgntfg
fgntfg
fgntfg
fgntfg
fgntfg
кота
А реально, зачем праймер если есть галоша
Leon174
Краску фасадную надо брать.
Nikolai
Слышал, они там еще и волосы ламинируют за 2к. Я как-то пропуск в общагу ламинировал, в 5 рублей обошлось, так там еще и края огромные были
Snusmumriken
Ничего не забыли? Ноготочки подровнять?
Nikolai
Антицеллюлитный массаж
Domka
Можно вопрос сюда задать, я думаю можно поэтому задам
Domka
Есть такая удобная функция в lua да я думаю почти во всех языках есть
Domka
Если надо посмотреть размер содержимого массива
Domka
Просто можно указать #массив
Domka
И получить допустим 2
Domka
Потому что в массиве 2 элемента
Domka
Но что делать если массив двойной
Domka
И надо просмотреть еще и содержимое одномерных массивов
Domka
Мне нужно просмотреть сколько элементов в одномерном массиве, который находится в двумерном массиве
fgntfg
Сделай рекурсивную функцию, которая это будет считать.
Domka
А нет метода попроще
Domka
Или именно функцию
fgntfg
Не страдать фигней и хранить данные в векторе, а не в матрице
Domka
У меня двумерный массив
Domka
Нужен для отрисовки карты
Domka
Тайловой
fgntfg
Не нужен, ты просто не понимаешь