Я получаю код ошибки, который говорит мне, что он «не может индексировать локальное» self «- числовое значение». всякий раз, когда я запускаю игру через ЛЮБОВЬ. Я не могу найти ошибку для моей жизни. Это останавливает мой игровой прогресс, и это действительно раздражает. Он написан в формате LUA / Love, кто-нибудь может мне помочь?
local ent = ents.Derive("base")
function ent:load( x, y )
self:setPos( x, y)
self.w = 64
self.h = 64
end
function ent:setSize( w, h )
self.w = w
self.h = h
end
function ent:getSize()
return self.w, self.h;
end
function ent:update(dt)
self.y = self.y + 32*dt
end
function ent:draw()
local x, y = self:getPos()
local w, h = self:getSize()
love.graphics.setColor(0, 0, 0, 255)
love.graphics.rectangle("fill", x, y, w, h )
end
return ent;
Я вызываю функцию ent: update в некоторых других файлах. (Обратите внимание, что приведенный выше код хранится в другой папке, которая содержит все файлы .lua сущности)
function ents:update(dt)
for i, ent in pairs(ents.objects) do
if ent.update(dt) then
ent:update(dt)
end
end
end
а также
function love.update(dt)
xCloud = xCloud + 64*dt
if xCloud >= (800 + 256) then
xCloud = 0
end
yCloud = yCloud + 32*dt
if yCloud >= (800 + 256) then
yCloud = 0
end
zCloud = zCloud + 16*dt
if zCloud >= (800 + 256) then
zCloud = 0
end
ents:update(dt)
end
msgstr «не могу индексировать локальное» я «- числовое значение.»
Вы определили ent.update следующим образом:
function ent:update(dt)
self.y = self.y + 32*dt
end
Это синтаксис сахара для:
function ent.update(self, dt)
self.y = self.y + 32*dt
end
Другими словами, это требует, чтобы вы передали себя в качестве первого аргумента.
Вы тогда звоните ent.update
как это:
if ent.update(dt) then
ent:update(dt)
end
Строка 2 правильная. Строка 1 нет. Вы передаете номер для себя. Когда он пытается проиндексировать это, вы получаете «не могу индексировать локальное« я »- числовое значение».
Проблема ваша if ent.update(dt) then
позвонить в ents:update
функция.
Вы имели в виду if ent:update(dt) then
там вместо
:
Синтаксис вызова функции просто синтаксический сахар, так ent:update(dt)
это просто сахар для ent.update(ent, dt)
(что явно отличается ent.update(dt)
и объясняет ошибку, которую вы получаете).
Увидеть Вызовы функций в руководстве Lua для этого.
Вызов v: name (args) является синтаксическим сахаром для v.name (v, args), за исключением того, что v оценивается только один раз.