кота
Интересное у вас тут наследование
Snusmumriken
С глобальными полями классов разобрался?
Snusmumriken
Если ты задашь это же поле какому-нибудь объекту, он начнёт хранить собственное уникальное значение, но у остальных экземпляров оно будет доходить до дефолтного классового поля.
кота
Snusmumriken
+
кота
Да
Snusmumriken
Красаучик
кота
кота
Спасибо тебе за статейки
кота
Очень помогли
Snusmumriken
Snusmumriken
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
кота
кота
Сейчас поправлю
Snusmumriken
кота
Хех
Пойду попрактикуюсь чутка
Если что — сюда принесу
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
Но что делать если массив двойной
fgntfg
Domka
И надо просмотреть еще и содержимое одномерных массивов
Domka
Мне нужно просмотреть сколько элементов в одномерном массиве, который находится в двумерном массиве
fgntfg
Сделай рекурсивную функцию, которая это будет считать.
Domka
А нет метода попроще
Domka
Или именно функцию
fgntfg
Не страдать фигней и хранить данные в векторе, а не в матрице
Domka
У меня двумерный массив
Domka
Нужен для отрисовки карты
Domka
Тайловой
fgntfg
Не нужен, ты просто не понимаешь