Tutorial:Callback Functions (简体中文)
LÖVE的 回调 函数通过 love.run 调用,可执行一系列不同任务,全部都为可选项。不过据经验谈,一个完成度高的游戏很可能会用到几乎全部功能,因此了解它们会是个明智选择。
对于程序新手或术语盲而言,回调(callback)在某种意思上就是个往回工作的函数。类似 love.graphics.draw 或 math.floor 这种常规函数,在你调用它时,LÖVE 或 Lua 则做些工作。换句话说,回调函数也就是写一段代码然后LÖVE 调用数次。这使得代码易于被组织优化。例如,love.load 函数仅会在游戏初次启动时被调用一次 (早于其他回调),因此游戏内容加载及其他准备工作的代码很适合放在这里。
Contents
love.load
function love.load()
image = love.graphics.newImage("cake.jpg")
local f = love.graphics.newFont(12)
love.graphics.setFont(f)
love.graphics.setColor(0,0,0,255)
love.graphics.setBackgroundColor(255,255,255)
end
此函数仅会在游戏开始时被调用一次,这里也常用于进行资源加载、变量初始化及特定设置。所有这些操作都可以在别处完成,而在此进行则意味着只需做一次,大大节省了系统开销。
love.update
function love.update(dt)
if love.keyboard.isDown("up") then
num = num + 100 * dt -- this would increment num by 100 per second
end
end
此函数被连续调用,可能是大部分数学运算完成的场所。 'dt' 代表 "delta time" ,是自函数上一次被调用的时间到当前时间所经过的秒数(通常等于类似0.025714这样的小值).
love.draw
function love.draw()
love.graphics.draw(image, imgx, imgy)
love.graphics.print("Click and drag the cake around or use the arrow keys", 10, 10)
end
love.draw
完成所有绘图操作(够直白吗),在此函数体外调用任何 love.graphics.draw
操作都将不会生效。此函数也是连续调用的,所以请留神,假如你在函数末尾更改字体/颜色/模式等等内容,它将会对函数开始处的内容产生影响。例如:
function love.load()
love.graphics.setColor(0,0,0)
end
function love.draw()
love.graphics.print("This text is not black because of the line below", 100, 100)
love.graphics.setColor(255,0,0)
love.graphics.print("This text is red", 100, 200)
end
love.mousepressed
function love.mousepressed(x, y, button)
if button == 'l' then
imgx = x -- move image to where mouse clicked
imgy = y
end
end
此函数在鼠标按键被点击时调用,接受被点击的按键和点击发生时的位置坐标作为参数。按键可以是任意 constants。此函数与 love.mousereleased
相性极佳。
love.mousereleased
function love.mousereleased(x, y, button)
if button == 'l' then
fireSlingshot(x,y) -- this totally awesome custom function is defined elsewhere
end
end
此函数在鼠标按键释放时被调用,接受被释放的按键和释放发生时的位置坐标作为参数。可以与 love.mousepressed
连用,也可单独使用,没有特定要求。
love.keypressed
function love.keypressed(key, unicode)
if key == 'b' then
text = "The B key was pressed."
elseif key == 'a' then
a_down = true
end
end
此函数在键盘按键被按下时调用,接受被按下的按键作为参数,按键可以是任意 constants 键值。此函数与 love.keyreleased
相性极佳。
love.keyreleased
function love.keyreleased(key, unicode)
if key == 'b' then
text = "The B key was released."
elseif key == 'a' then
a_down = false
end
end
此函数在键盘按键被释放时调用,接受被释放的按键作为参数。可以与 love.keypressed
连用,也可单独使用,没有特定要求。
love.focus
function love.focus(f)
if not f then
print("LOST FOCUS")
else
print("GAINED FOCUS")
end
end
此函数在 LÖVE 窗口聚焦和失焦时被调用。举例而言,假如用户在游戏中离开游戏窗口去点击浏览器窗口,游戏程序将会识别这个行为,并自动暂停游戏进程。
function love.focus(f) gameIsPaused = not f end
function love.update(dt)
if gameIsPaused then return end
-- The rest of your love.update code goes here
end
love.quit
function love.quit()
print("Thanks for playing! Come back soon!")
end
此函数在用户点击窗口关闭按钮(通常是个 X)时被调用。例如当用户想要结束游戏时,他们会点击关闭按钮,接着在关闭前,游戏状态得以保存。
以上就是回调函数及其基本用法。
其他语言
Dansk –
Deutsch –
English –
Español –
Français –
Indonesia –
Italiano –
Lietuviškai –
Magyar –
Nederlands –
Polski –
Português –
Română –
Slovenský –
Suomi –
Svenska –
Türkçe –
Česky –
Ελληνικά –
Български –
Русский –
Српски –
Українська –
עברית –
ไทย –
日本語 –
正體中文 –
简体中文 –
Tiếng Việt –
한국어
More info