love2d教程-第六章:if语句

Dahuang published on
7 min, 1258 words

Categories: 游戏开发

Tags: LOVE2D

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

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

if语句的语法是这样的:

if condition then
    -- code
end

condition就是那个“条件”,condition必须是真,或是假。

举个例子:5 > 9

>就是“大于”的意思,所以这里“条件”就是“5大于9”,显然,这为假。

我们把增加x的值的代码放进if语句里:

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

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

再来一个例子:

function love.update(dt)
    if x < 600 then
        x = x + 100 * dt
    end
end

我们通过把x < 600作为条件,令矩形最多运动到x=600处,然后就停下。

还记得我曾经强调=是赋值符号,不是等号吗?那么如果我们希望判断两个值是否相等,怎么办?我们用==,两个连在一起的赋值符号表示等号。

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

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

 9 <= 10 --真,9<10
10 <= 10 --真,10==10
15 >= 4  --真,15>4

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

4 ~= 5 --真
5 ~= 5 --假

布尔值

变量除了可以是数值、字符串和函数,还可以是布尔值——true(真)和false(假)。我们用布尔值表示真和假。

我们新建一个变量move,并且为其赋值true,然后在if语句中检查move是否为真。

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这样的写法实在是啰嗦。我们可以这么写:

if move then
    x = x + 100 * dt
end

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

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

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

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

方向键

下面我们将会令矩形的移动跟随方向键的指示。我们将会使用一个新的函数:love.keyboard.isDown。顾名思义,这个函数检查键盘上的某个按键是否被按下。查阅wiki,确实如此。

注意Down的D是大写。这是一种叫做“驼峰命名法”的命名风格。第一个单词的首字母用小写,接下来所有单词的首字母用大写。这不是强制的,但这是一个好习惯,因为这么做可以增加程序的可读性。(当然你也可以选择其他的办法,比如下划线)这也是本教程使用的命名风格。

我们将字符串“right”作为参数来检查右方向键是否被按下。

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

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

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

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

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

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连接的多个表达式必须都为真,整体才为真,否则为假。

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

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

if 20 < 9 or 14 > 7 or 5 == 10 then
    print("One of these statements is true")
end

多说一句

在lua中,除了falsenil也会被判定为假。除了falsenil,其他的所有值,即使不是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语句,我们可以让代码段仅在满足条件时才执行。变量可以为truefalse。这种类型的变量就是布尔值。当语句为假时,我们可以还使用else告诉游戏要执行什么,或者也可以可以使用elseif进行其他检查。