Ошибка индексации глобальной «собственной личности»?

Я получаю код ошибки, который говорит мне, что он «не может индексировать локальное» 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

2

Решение

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 нет. Вы передаете номер для себя. Когда он пытается проиндексировать это, вы получаете «не могу индексировать локальное« я »- числовое значение».

3

Другие решения

Проблема ваша 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 оценивается только один раз.

3

По вопросам рекламы [email protected]