2

我不知道如何在 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
4

2 回答 2

2

这是给你的演示代码

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

于 2013-12-13T10:57:19.530 回答
0

:语法导致隐式self可用作本地,指的是对象实例。但是您在班级级别分配给 b 。使用self.b =代替,asteroid.b =以便分配特定于实例。

于 2013-12-13T13:48:59.213 回答