Love2d:从不同的文件创建多个相同的对象

时间:2016-10-24 23:26:23

标签: lua love2d

我想知道是否可以创建多个写在单独文件中的相同对象。 我有两个文件:main.lua和player.lua。 这是player.lua:

    local player = { }
function player:create (x, y, sp)
    self.img = love.graphics.newImage ('images/player.png')
    self.x = x
    self.y = y
    self.speed = sp
end

return player

我想在main.lua中包含此文件。我知道我无法使用require "player",因为require只允许加载一次文件,但它不需要我指定文件路径。我尝试使用dofile()实际完成了我想要它做的事情,但是,它确实需要我指定一个我不想做的完整文件路径。 所以这是main.lua的一部分:

local Player = require "player"
local Player2 = require "player"
-- local Player = dofile("/long/path/to/game/player.lua")

如果我不能使用require,有没有办法获取当前文件目录并像这样使用它:

local Player = dofile(filepath .. "player.lua")

2 个答案:

答案 0 :(得分:1)

您应该通过将create更改为实际创建 Player实例的函数来解决此问题,而不是修改单例对象。

-- Player.lua
local Player = {}

function Player:create (x, y, sp)
    self.__index = self

    return setmetatable({
        img = love.graphics.newImage('images/player.png'),
        x = x,
        y = y,
        speed = sp
    }, self)
end

return Player

现在您可以使用Player:create创建多个实例。

-- main.lua
local Player = require 'Player'

local player1 = Player:create(10, 10, 5)
local player2 = Player:create(40, 40, 2)

请阅读Programming in Lua的第16章,其中涵盖Object-Oriented Programming

答案 1 :(得分:0)

加载图像几次...你不能只加载一次图像,然后像以后那样在一个可变量中调用该图像:

-- Player.lua
local Player = {}
local img1 = love.graphics.newImage('images/player.png') <-- loaded one time

function Player:create (x, y, sp)
    self.__index = self

    return setmetatable({
        img = img1,    
        x = x,
        y = y,
        speed = sp
    }, self)
end

return Player