love2d-chapter6-if-statements

love2d-chapter6-if-statements

十月 11, 2020

第六章-if语句


这一章节里我们将会继续使用上一章的代码


通过if语句,我们可以让一个代码片段只在满足特定条件时执行。
if语句的语法是这样的:

1
2
3
if condition then
-- code
end

condition就是那个“条件”,condition必须是真,或是假。
举个例子:5 > 9
>就是“大于”的意思,所以这里“条件”就是“5大于9”,显然,这为假。
我们把增加x的值的代码放进if语句里:

1
2
3
4
5
function love.update(dt)
if 5 > 9 then
x = x + 100 * dt
end
end

当你运行游戏,你会发现矩形根本不动,因为“5大于9”为假。如果我们把条件换成5 < 9,矩形就动起来来了,因为“5小于9”为真。
再来一个例子:

1
2
3
4
5
function love.update(dt)
if x < 600 then
x = x + 100 * dt
end
end

我们通过把x < 600作为条件,另矩形最多运动到x=600处,然后就停下。
还记得我曾经强调=是赋值符号,不是等号吗?那么如果我们希望判断两个值是否相等,怎么办?我们用==,两个连在一起的赋值符号表示等号。

1
2
x  = 10 --把10的值赋给x
x == 10 --比较x和10是否相等

我们还用>=<=来判断“大于或等于”和“小于或等于”。

1
2
3
 9 <= 10 --真,9<10
10 <= 10 --真,10==10
15 >= 4 --真,15>4

我们用~=来判断“不等于”。

1
2
4 ~= 5 --真
5 ~= 5 --假

布尔值

变量除了可以是数值、字符串,还可以是布尔值——true(真)和false(假)。我们用布尔值表示真和假。
我们新建一个变量move,并且为其赋值true,然后在if语句中检查move是否为真。

1
2
3
4
5
6
7
8
9
10
11
function love.load()
x = 100
move = true
end

function love.update(dt)
-- Remember, 2 equal signs!
if move == true then
x = x + 100 * dt
end
end

move为真,所以我们的矩形动了。但是move == true这样的写法实在是啰嗦。我们可以这么写:

1
2
3
if move then
x = x + 100 * dt
end

如果我们希望检查move是否为假,我们可以用not(非)。

1
2
3
if not move then  --非(not)真为假,非假为真
x = x + 100 * dt
end

如果我们在if语句内部改变了move的值,这将不会影响if语句的执行。

1
2
3
4
5
if move then
move = false
print("This will still be executed!")
x = x + 100 * dt
end

方向键

下面我们将会令矩形的移动跟随方向键的指示。我们将会使用一个新的函数:love.keyboard.isDown。顾名思义,这个函数检查键盘上的某个按键是否被按下。查阅wiki,确实如此。
注意Down的D是大写。这是一种叫做“驼峰命名法”的命名风格。第一个单词的首字母用小写,接下来所有单词的首字母用大写。这不是强制的,但这是一个好习惯,因为这么做可以增加程序的可读性。(当然你也可以选择其他的办法,比如下划线)这也是本教程使用的命名风格。
我们将字符串“right”作为参数来检查右方向键是否被按下。

1
2
3
if love.keyboard.isDown("right") then
x = x + 100 * dt
end

这样矩形就只会在我们按下右方向键时移动了。

我们还可以用else来告诉我们的游戏当条件为假是应该做什么。让我们令矩形在右方向键没有被按下时向左移动。

1
2
3
4
5
if love.keyboard.isDown("right") then
x = x + 100 * dt
else
x = x - 100 * dt --We decrease the value of x
end

在一个语句为false后,elseif可以用来检查另一个语句是否为真。下面我们将会检查右方向键是否被按下,如果不,再检查左方向键是否被按下。

1
2
3
4
5
if love.keyboard.isDown("right") then
x = x + 100 * dt
elseif love.keyboard.isDown("left") then
x = x - 100 * dt
end

试着自己实现让矩形上下移动的功能吧!

and与or

and,且,用and连接的多个表达式必须都为真,整体才为真,否则为假。

1
2
3
if 5 < 9 and 14 > 7 then
print("Both statements are true")
end

or,或,用or连接的多个表达式只要其中一个为真,整体就为真。

1
2
3
4
5
6
if 20 < 9 or 14 > 7 or 5 == 10 then
print("One of these statements is true")
end
```
## 多说一句
准确起见,在lua中,除了`false`,`nil`也会被判定为假。除了`false`和`nil`,其他的所有值,即使不是`true`,都会被判定为真。

if true then print(1) end
if false then print(2) end
if nil then print(3) end –nil会被判定为假
if 5 then print(4) end –既不是false也不是nil,所以为真
if “hello” then print(5) end –既不是false也不是nil,所以为真
–Output: 1, 4, 5

##总结
通过`if`语句,我们可以让代码段仅在满足条件时才执行。变量可以为`true`或`false`。这种类型的变量就是`布尔值`。当语句为假时,我们可以还使用else告诉游戏要执行什么,或者也可以可以使用`elseif`进行其他检查。