Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua Love2d:从不同文件创建多个相同对象_Lua_Love2d - Fatal编程技术网

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

Lua Love2d:从不同文件创建多个相同对象,lua,love2d,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 pl

我想知道是否有可能创建多个写在单独文件中的同一对象。 我有两个文件: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")

您应该将
create
更改为实际创建
Player
新实例的函数,而不是修改singleton对象

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


请考虑阅读的第16章,其中包括。

多次加载图像。。。难道你不能只加载一次图像,然后在变量中调用该图像,如下所示:

-- 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
--Player.lua
本地玩家={}
local img1=love.graphics.newImage('images/player.png')