在尝试调用不同的Lua文件中的函数时出现错误(该函数是nil值)。

当我尝试调用一个盒碰撞器对象中的函数时,我会得到以下错误:

错误信息:

main.lua:26: attempt to call field 'Update' (a nil value)

追踪记录:

main.lua:26: in function 'update' [C]: in function 'xpcall'

代码如下:

main.lua

require("BoxCollider")

local s1 = {}
s1.x = 10
s1.y = 10
s1.w = 10
s1.h = 10
s1.collider = BoxCollider.new(s1.x,s1.y,s1.w,s1.h)

test = BoxCollider.new(40, 7,15,15)

function love.load()

end

function love.update(dt)

if love.keyboard.isDown("d") then s1.x = s1.x + 100 * dt end
---[[
s1.collider:Update(s1.x,s1.y)

if s1.collider:CheckCollisions(test) then
    s1.x = 10
end
--]]
end

function love.draw()

love.graphics.rectangle("fill", s1.x, s1.y, s1.w, s1.h)
love.graphics.rectangle("fill", 40, 7, 15,15)

end

BoxCollider.lua

BoxCollider = {}
BoxCollider._index = BoxCollider

--x是碰撞器的x点,如果盒子是用于对象,则应等于对象的x点
--y是碰撞器的y点,如果盒子是用于对象,则应等于对象的y点
--w是盒子的宽度
--h是盒子的高度

function BoxCollider.new(x,y,w,h)
return setmetatable({x = x or 0, y = y or 0, w = w or 0, h = h or 0},BoxCollider)
end

function BoxCollider:CheckCollisions( v )

return self.x < (v.x + v.h) and  v.x < (self.x + self.w) and self.y  < (v.y+v.h) and v.y < (self.y+self.h)

end

function BoxCollider:reSize(nw,nh)
self.w = nw
self.h = nh

end

function BoxCollider:Update(nx,ny)
self.x = nx
self.y = ny
end
点赞
用户1783976
用户1783976

我认为您在 BoxCollider.__index 中只忘了一个下划线。 只有一个下划线时,当调用:Update时不会搜索 BoxCollider 方法,因此会找不到它。

2014-03-12 07:20:37