Lua OOP没有找到变量

时间:2015-02-11 03:43:52

标签: oop lua

我试图在Lua中做OOP,但它不允许我更改checkInput {}方法中的vel_y值。任何想法我怎么能让这个工作?顺便说一下,我使用Love2D来输入这些东西。

Player = {x = 100, y = 20, vel_x = 0, vel_y = 0}
function Player:new(o, x, y, vel_x, vel_y)
    o = o or {}   -- create object if user does not provide one
    setmetatable(o, self)
    self.__index = self
    length = 0
    return o
end

function Player:getX()
    return self.x
end

function Player:getY()
    return self.y
end

function Player:update( dt )
    --update velocity
    self.x = self.x + self.vel_x
    self.y = self.y + self.vel_y
    checkInput()

end

function checkInput( dt )

    if love.keyboard.isDown("w") and length < 5 then --press the right arrow key to push the ball to the right
        length = length + 1
        self.vel_y = 5
        print("bruhddddddddddddddddddddddd")
    elseif love.keyboard.isDown("a") then

    elseif love.keyboard.isDown("s") then

    elseif love.keyboard.isDown("d") then

  end
end

1 个答案:

答案 0 :(得分:0)

我假设您的系统调用播放器:update()冷杉?如果是这样,您应该将selfdt传递给checkInput

function Player:update( dt )
    --update velocity
    self.x = self.x + self.vel_x
    self.y = self.y + self.vel_y
    checkInput(self, dt) --<--
end
...

function checkInput( self, dt )
...

如果您将checkInput定义为local(当然在Player:update之前),这可能与私有方法类似。

Player = {x = 100, y = 20, vel_x = 0, vel_y = 0} do
Player.__index = self -- we can do this only once

function Player:new(o, x, y, vel_x, vel_y)
  o = setmetatable(o or {}, self) -- create object if user does not provide one
  -- init o here
  return o
end

function Player:getX() end

function Player:getY() end

-- Private method
local function checkInput(self, dt) end

function Player:update( dt )
  ...
  checkInput(self, dt) -- call private method
end

end -- end clsss defenitioin