Love2d:从不同的文件创建多个相同的对象
Love2d: Creating multiple of the same object from a different file
我想知道是否可以创建多个写入单独文件的相同对象。
我有两个文件: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
的 new 个实例的函数来解决此问题,而不是修改单例对象。
-- 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, which covers Object-Oriented Programming 的第 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
我想知道是否可以创建多个写入单独文件的相同对象。 我有两个文件: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
的 new 个实例的函数来解决此问题,而不是修改单例对象。
-- 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, which covers Object-Oriented Programming 的第 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