错误索引全局“自我”?

时间:2015-10-14 15:24:32

标签: c++ lua love2d

我收到一个错误代码,告诉我它“无法索引本地”自我“ - 数字值”。每当我通过LOVE启动游戏时。我无法找到生命中的错误。它正在阻止我的游戏进度,这真的很烦人。它是用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 个答案:

答案 0 :(得分:3)

问题在于if ent.update(dt) then功能中的ents:update来电。

你的意思是if ent:update(dt) then

:函数调用语法只是语法糖,因此ent:update(dt)只是ent.update(ent, dt)的糖(明显不同于ent.update(dt)并解释了你得到的错误)

请参阅Lua手册中的Function Calls

  

调用v:name(args)是v.name(v,args)的语法糖,除了v只计算一次。

答案 1 :(得分:3)

  

“无法索引本地”自我“ - 数字值。”

你这样定义了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

换句话说,它要求你将self作为第一个参数传递。

然后你可以这样打电话给ent.update

if ent.update(dt) then
  ent:update(dt)
end

第2行是正确的。第1行不是。你为自己传递了一个号码。当它试图对其进行索引时,你会得到“无法索引本地'自我' - 数字值”。