2015-02-11 83 views
0

我正在尝试在Lua中执行OOP,但它不会让我在checkInput {}方法中更改vel_y值。任何想法如何我可以得到这个工作?顺便说一下,我使用Love2D来处理这些输入内容。Lua OOP找不到变量

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 
+0

我假设“不让我改变checkInput {}方法中的vel_y值”,你的意思是你在这个点上得到一个关于'self'的错误是'nil'?这不是你的'Player'的方法,它没有任何隐含的'self'参数,并且你没有将该对象传递给函数,你期望它运行在什么地方? – 2015-02-11 03:47:48

+0

@EtanReisner当我按'w'vel_y在upfate()中没有变化() – Joe 2015-02-11 04:09:11

回答

0

我假设你的系统调用player:update()冷杉?如果是这样,你应该通过selfdtcheckInput

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) 
... 

,如果你(Player:update之前当然)定义checkInputlocal这可能是类似于私有方法。

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 
+0

谢谢,早上对我来说完美的时机。我需要在lua上得到一本教科书。 – Joe 2015-02-11 11:59:51