2013-12-13 20 views
2

我不知道如何在lua中做類,所以我使用了在論壇上推薦的代碼。 但總是隻有一個對象工作。首先有座標x,y和另一個對象分享他的座標。你能解釋我在這段代碼中做錯了什麼嗎? 謝謝你的建議。我如何在lua love2d(OOP)中使用類l

我的代碼:

require("class") 

asteroid = class:new() 

function asteroid:init(x,y) 
     asteroid.b = love.physics.newBody(world, x ,y , "dynamic") 
     asteroid.s = love.physics.newCircleShape(35) 
     asteroid.f = love.physics.newFixture(asteroid.b, asteroid.s) 
end 

function love.load() 
world = love.physics.newWorld(0, 50, true) 

asteroid1= asteroid:new(100,100) 
asteroid2= asteroid:new(700,100) 
end 


function love.update(dt) 
world:update(dt) 
end 

function love.draw() 
love.graphics.circle("line", asteroid1.b:getX(),asteroid1.b:getY(), asteroid1.s:getRadius(), 35) 
love.graphics.circle("line", asteroid2.b:getX(),asteroid2.b:getY(), asteroid2.s:getRadius(), 35) 
end 

推薦碼:

__HAS_SECS_COMPATIBLE_CLASSES__ = true 

local class_mt = {} 

function class_mt:__index(key) 
    return self.__baseclass[key] 
end 

class = setmetatable({ __baseclass = {} }, class_mt) 

function class:new(...) 
    local c = {} 
    c.__baseclass = self 
    setmetatable(c, getmetatable(self)) 
    if c.init then 
     c:init(...) 
    end 
    return c 
end 

回答

1

這裏是你

local MyClass = {} 
MyClass.__index = MyClass 

setmetatable(MyClass, { 
    __call = function (cls, ...) 
    return cls.new(...) 
    end, 
}) 

function MyClass.new(init) 
    local self = setmetatable({}, MyClass) 
    self.value = init 
    return self 
end 

-- the : syntax here causes a "self" arg to be implicitly added before any other args 
function MyClass:set_value(newval) 
    self.value = newval 
end 

function MyClass:get_value() 
    return self.value 
end 

local instance = MyClass(5) 
-- do stuff with instance... 

我建議你遵循這些教程演示代碼

http://lua-users.org/wiki/ObjectOrientationTutorial

http://lua-users.org/wiki/TutorialDirectory

0

:語法會導致一個隱式self可用作爲本地,指的是對象實例。但是你在課堂上分配給b。使用self.b =而不是asteroid.b =,以便分配特定於實例。