调用main.lua文件之外的其他.lua文件

时间:2019-07-23 20:58:37

标签: love2d

因此,我想通过将代码拆分为单独的文件来清理代码。但是由于某些原因,我无法通过main.lua调用要调用的脚本。

这是我的main.lua脚本:

function love.load()
  require "splash.lua"
  splash.load()
end

function love.update(dt)
  splash.update(dt)

end

function love.draw() print("Draw")
  splash.draw()
  love.graphics.print("FPS "..tostring(love.timer.getFPS( )), 5, 5) print("fps")
  love.graphics.setColor(255,0,0) --Red
  love.graphics.rectangle("fill", 3, 3, 60, 20)
end

这是我的splash.lua脚本,与main.lua文件分开:

function splash.load()
    timer = 0 print("fadein")
    alpha = 0
    fadein  = 2
    display = 4
    fadeout = 6
    splashScreen = love.graphics.newImage("/images/Splash1.png")
end

function splash.update(dt)
    timer = timer + dt
    if 0 < timer and timer < fadein then
        alpha = timer / fadein
    end
    if fadein < timer and timer < display then
        alpha = 1
    end
    if display < timer and timer < fadeout then
        alpha = 1 - ((timer - display) / (fadeout - display))
    end
end

function splash.draw()
    love.graphics.setColor(1, 1, 1, alpha)
    local sx = love.graphics.getWidth() / splashScreen:getWidth()
    local sy = love.graphics.getHeight() / splashScreen:getHeight()
    love.graphics.draw(splashScreen, 0, 0, 0, sx, sy)
end

我到处都在搜索该主题,而其他答案则非常模糊或过时。我要做的就是在启动Love时使splash.lua运行。

2 个答案:

答案 0 :(得分:1)

我注意到了两个问题,当我解决它们后,出现了问题(我不知道这是否是你想要的)。

问题1 在main.lua中,require "splash.lua"应该是require "splash"。如果您使用其他语言(例如python,java或javascript)进行编码,则可以认为require与import相似。

问题2 在splash.lua中,您所引用的对象(飞溅)不存在。为了使您的代码尽可能的相似,我在splash.lua的顶部插入了splash = {}行。创建对象splash之后,便可以为该对象创建函数(splash.load(),splash.update()和splash.draw())。在main.lua中这不是问题,因为love是在love2d游戏引擎启动时已经存在的对象。

main.lua

function love.load()
  require "splash"
  splash.load()
end

function love.update(dt)
  splash.update(dt)
end

function love.draw() print("Draw")
  splash.draw()
  love.graphics.print("FPS "..tostring(love.timer.getFPS( )), 5, 5) print("fps")
  love.graphics.setColor(255,0,0) --Red
  love.graphics.rectangle("fill", 3, 3, 60, 20)
end

splash.lua

splash = {}

function splash.load()
    timer = 0 print("fadein")
    alpha = 0
    fadein  = 2
    display = 4
    fadeout = 6
    splashScreen = love.graphics.newImage("/images/Splash1.png")
end

function splash.update(dt)
    timer = timer + dt
    if 0 < timer and timer < fadein then
        alpha = timer / fadein
    end
    if fadein < timer and timer < display then
        alpha = 1
    end
    if display < timer and timer < fadeout then
        alpha = 1 - ((timer - display) / (fadeout - display))
    end
end

function splash.draw()
    love.graphics.setColor(1, 1, 1, alpha)
    local sx = love.graphics.getWidth() / splashScreen:getWidth()
    local sy = love.graphics.getHeight() / splashScreen:getHeight()
    love.graphics.draw(splashScreen, 0, 0, 0, sx, sy)
end

作为一个附带说明,通过阅读代码,我不确定您是否完全了解加载,更新和绘制功能的工作方式。爱是love2d游戏引擎创建的对象。游戏开始时,引擎仅运行一次加载功能。然后,更新功能会不断检查游戏所处世界的变化,并根据love.update中的条件应用其中的代码。绘制函数不断地绘制一遍又一遍的内容。这些事情是自动发生的,因为它已经被编程到love2d游戏引擎中。 我认为您可能对此感到困惑的唯一原因是您创建了单独的splash.loadsplash.updatesplash.draw。从技术上讲,您可以命名要调用的任何函数,我只是觉得您可能认为这些加载,更新和绘制函数可能会自动调用,而实际上并不是。 Love2d仅自动为love对象调用加载,更新和绘制函数。

答案 1 :(得分:-2)

require命令更改为以下内容应该可以:

require("splash")

另外,在为该表创建函数之前,应该创建splash表。

splash = {}

splash.myFunction()
.
.
.