love2d-chapter4-LÖVE

love2d-chapter4-LÖVE

十月 09, 2020

第四章-LÖVE

LÖVE是什么?

LÖVE是一个框架。简单地说,LÖVE让编写游戏变得更容易。
LÖVE是用C++和OpenGL写成的,这两者都非常难以上手。LÖVE的源代码很复杂,但正是这些复杂的源码才让我们的工作变得简单。
举个例子,在LÖVE中,我们用love.graphics.ellipse()这样一个简单的函数来绘制一个椭圆。而这一切的背后是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void Graphics::ellipse(DrawMode mode, float x, float y, float a, float b, int points)
{
float two_pi = static_cast<float>(LOVE_M_PI * 2);
if (points <= 0) points = 1;
float angle_shift = (two_pi / points);
float phi = .0f;

float *coords = new float[2 * (points + 1)];
for (int i = 0; i < points; ++i, phi += angle_shift)
{
coords[2*i+0] = x + a * cosf(phi);
coords[2*i+1] = y + b * sinf(phi);
}

coords[2*points+0] = coords[0];
coords[2*points+1] = coords[1];

polygon(mode, coords, (points + 1) * 2);

delete[] coords;
}

你或许完全看不懂上面的代码,所以我们才会用LÖVE。LÖVE负责了游戏的大部分编程,把有趣的部分留给了我们。

Lua

Lua是编写LÖVE游戏时使用的编程语言。Lua是一个独立的语言,而不是为了LÖVE而存在。只是LÖVE的开发者选择了lua罢了。
所以我们写下的代码中,那些是LÖVE特别提供的,那些是Lua共有的?答案很简单,所有由LÖVE提供的都会以love.开头,其他的都是一般的lua。
这些是由LÖVE框架提供的函数:

1
2
love.graphics.circle("fill", 10, 10, 100, 25)
love.graphics.rectangle("line", 200, 30, 120, 100)

而这些是lua本身提供的:

1
2
3
4
5
function test(a, b)
return a + b
end
print(test(10, 20))
--Output: 30

如果你没有明白这是什么意思,没关系。目前这些东西不重要。

LÖVE是如何工作的?


从现在起你必须安装了LÖVE,如果你还没有,回到第一章


LÖVE会调用三个函数。首先它会调用love.load(),我们通常在这里创建变量。
然后LÖVE会调用love.update()love.draw(),并且不断重复。
所以,love.load() -> love.update() -> love.draw() -> love.update() -> love.draw() -> love.update()
在幕后,LÖVE调用了这些函数,然后我们创建它们并用代码填充它们。这就是我们所说的回调
LÖVE由多个模块组成——love.graphicslove.audiolove.filesystem…一共有15个模块,一个模块专注于一件事情。你绘制的任何东西都由love.graphics来绘制,任何和声音有关的工作都由love.audio完成。
我们先来看看love.graphics
LÖVE有一个Wiki,详细介绍了所有的函数。现在我想要画一个矩形。在wiki上我们找到love.graphics并且查找矩形。于是我们找到了love.graphics.rectangle()

这个页面详细描述了这个函数的作用以及它所需要的参数。第一个参数是mode,而且它的必须是DrawMode(绘制模式)。我们可以点击DrawMode来进一步了解这个类型。

于是我们知道,DrawMode是一个字符串,它可以是fill或是line,它控制了形状是如何被绘制的。
接下来的所有参数都是数字。
所以如果你想要绘制一个内部填充的矩形,你可以:

1
2
3
function love.draw()
love.graphics.rectangle("fill", 100, 200, 50, 80)
end

运行游戏,你将会看到:

我们把love提供的函数叫做API(Application Programming Interface,应用程序接口)。我们只要明白API就是指love提供的那些函数就好。

总结

love是一个工具,它让编写游戏变得更加容易。love使用的编程语言是lua。所有用love.开头的都是love框架的一部分。love官方提供的wiki是一个学习love的好去处。