Dadaskis
В моем коде ошибка или опять аномалии? ._.
Dadaskis
TextureManager = {
textures = {},
loadTexture = function(fileName, textureName, isOpaque)
print("loadTexture")
print(fileName .. " | " .. textureName .. " | " .. isOpaque)
local textureID = Engine.loadTexture(fileName, isOpaque)
textures[textureName] = textureID
print("loaded")
end,
getTexture = function(textureName)
return textures[textureName]
end
}
Почему textures[textureName] - ошибка? textureName = "Stone"
Dadaskis
Если его сделать local в файле то он исчезнет после исполнения файла?
Dadaskis
Всё, благодарю за починку.
Anonymous
область видимости это
scope
Чтобы проще было в гугле вбить
Dadaskis
Ок, перепишу позже.
Snusmumriken
чёт я и это не понимаю. Надо про кривые почитать.
Карочи, альтернатива:
Готовишь таблицу типа
dices = {
[1] = 3,
[2] = 1,
[6] = 2,
[3] = 2
}
Преобразуешь её в равномерную таблицу:
function normalize(dices)
local res = {}
for k, v in pairs(dices) do
for i = 1, v do
res[#res + 1] = k
end
end
return res
end
В результате, нормализованная таблица начинает выглядеть вот так:
foo = normalize(dices) ==>
foo = {1, 1, 1, 2, 6, 6, 3, 3}
Берёшь из неё случайное число.
Snusmumriken
Всё.
Snusmumriken
Ну там,
function roll(dices)
return dices[math.random(#dices)]
end
Particle Booster
спасибо!)
Sergey
значения внутри ванианта также не могу поулчить
Sergey
local r = assert(xmlreader.from_string(xml))
while (r:read()) do
local leadingws = (' '):rep(r:depth())
if (r:node_type() == "element") then
— io.write(("%s%s:"):format(leadingws, r:name()))
while (r:move_to_next_attribute()) do
— io.write((' %s=%q'):format(r:nme(), r:value()))
— print("text",r:read("variant"))
print("DATA",r:name(),r:value(),"text",r:read_string("variant"),r:read())
end
— io.write('\n')
end
end
Anonymous
Sergey Kletsov, [11.05.18 17:23]
local r = assert(xmlreader.from_string(xml))
while (r:read()) do
local leadingws = (' '):rep(r:depth())
if (r:node_type() == "element") then
— io.write(("%s%s:"):format(leadingws, r:name()))
while (r:move_to_next_attribute()) do
— io.write((' %s=%q'):format(r:nme(), r:value()))
— print("text",r:read("variant"))
print("DATA",r:name(),r:value(),"text",r:read_string("variant"),r:read())
end
— io.write('\n')
end
end
Anonymous
вот так пеши
Anonymous
всмысле в `
Anonymous
три бектика
Anonymous
может поможет кто
vvzvlad
Да, я вот это нашёл и оно вполне подходит!
Dadaskis
В Lua аналогов continue кроме goto нет?
Roman
в Lua есть goto??
Tverd
в 5.2 вроде появилась
Lucky
используй goto, ничего другого нет.
Lucky
работает в luajit и в Lua свежее 5.1
Dadaskis
У меня luaJIT
Dadaskis
Лучше goto чем костыли в таких случаях...
Dadaskis
Хотя goto иногда считают костылём...
Dadaskis
СЛАЖНААА
Lucky
да зануды они
Dadaskis
Угу
Dadaskis
Пошли они в nil
Lucky
если не планируешь собирать с 5.1 то пофигу.
Dadaskis
Зачем 5.1 если есть JIT?
Lucky
если планируешь - всегда этот кусок можно через while переписать.
Lucky
ну, не везде есть jit.
Dadaskis
Где его нет?
Lucky
его может не быть на конкретной машине.
Lucky
неа, я пробовал - всё классно.
Lucky
надо просто по инструкции всё делать.
Dadaskis
Да я мазохист по жизни
Lucky
потом мне всё на while переписали для совместимости с 5.1 - я чуть ум не вывихнул, пока разобрался что там как.
Lucky
а c goto всё аккуратно и понятно было.
Dadaskis
Lucky
https://github.com/luckyuk/instead-sturman
Lucky
local function forwerts()
Tverd
Вообще-то обычно можно обойтись обычным break, изменить условие )
Dadaskis
do break end?
Lucky
там не гоуту, там всё напрочь переписано было
Lucky
https://github.com/luckyuk/instead-sturman/blob/master/module_ru.lua
Lucky
вот смотри в функции game.timer
Lucky
while дёргает функцию forwerts
Lucky
а ещё там есть функция halt
Lucky
когда я писал через goto
Lucky
halt и forwerts были якорями.
ShadoWalkeR
Какая жесть - простыня на 1,5 к строк кода
Lucky
да нормально.
Lucky
там же всё структурировано.
Lucky
сначала функции, потом объекты, потом комнаты.
ShadoWalkeR
Все равно жесть. В lua есть возможности чтобы файл на несколько разбить. Работать с кодом становится намного удобней
Lucky
всё разбито
Lucky
отдельно вынесены карты, отдельно спрайты.
Dadaskis
А если там класс с кучей фич? (Не класс-бог)
Lucky
у меня там игра, не морочите мне голову своими тараканами.
Anonymous
Anonymous
ShadoWalkeR
Между плохим кодом и хорошей игрой нет прямой взаимосвязи
Anonymous
Вот именно)
ShadoWalkeR
Но хороший код отсеивает кучу ошибок на этапе написания. И позволят потом проще себя переделывать
Dadaskis
Главное что бы был понятен мне кажется, ну и ещё архитектура была норм, про Code Conventions не забываем.
ShadoWalkeR
Да и потом - навигация по файлу на 1,5 к строк и по 15 файлам по 100 строк - Второе просто тупо удобней
ShadoWalkeR
Я абстрактно поделил если что)
Anonymous
Да не
Прикол с кодом в играх в том, что он пишется один раз и никогда больше не меняется
Разумеется, это касается только инди игр относительно небольшого размера
Он может быть в принципе нечитаемым, кого это будет волновать после релиза?)
Dadaskis
Тебя, когда будешь поддерживать
Anonymous
Они не поддерживаются
Anonymous
Просто пишутся новые
Anonymous
Зачем поддерживать маленькую индюху
Anonymous
Она умрёт раньше
ShadoWalkeR
Советую почитать на хабре статьи про код Doom, Build3D (на котором сделан тот же DukeNukem3d)
ShadoWalkeR
И про 3х казаков😂