我怎样才能在lua love2d(OOP)中上课

时间:2013-12-13 10:52:15

标签: oop lua love2d

我不知道如何在lua中创建类,所以我使用了在论坛上推荐的代码。 但总是只有一个对象有效。第一个具有坐标x,y,另一个对象共享其坐标。你能解释一下我在这段代码中做错了什么。 谢谢你的建议。

我的代码:

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

:语法使隐式self可用作本地,引用对象实例。但是你在课堂上分配给b。使用self.b =代替asteroid.b =,以便分配特定于实例。

相关问题