iT邦幫忙

2025 iThome 鐵人賽

DAY 4
0
自我挑戰組

透過Roblox Studio學習Lua語言與基本程式邏輯系列 第 4

Day 4: 判斷邏輯與Color3內建函式用法

  • 分享至 

  • xImage
  •  

今天是非常非常簡單的判斷邏輯desu~


1. if-then判斷式

基本邏輯

基本上現今所有的程式語言都有判斷邏輯的寫法,而Lua可以說是把這項寫法做的最簡單的程式語言 (至少我學到現在是這麼認為的),而所謂的判斷邏輯就是 如果...,那就... 又或者 如果...,那就...,否則...
在Lua語言裡,判斷邏輯會長這個樣子:

if 什麼東西成立或不成立 then
    如果上述判斷為是則做一些事
end

而對於什麼東西成立或不成立判斷,寫法會像這樣:

local number = 0

if number == 0 then
    print("number的值是0")
end

在上面的例子中,我們可以看到,在第一行我們先定義了一項變數叫做number,並且將他的值設為0,接著我們透過一項判斷式來判斷number的變數值是否為0,如果判斷為是 (true),則使用print來輸出"number的值是0"這段字串。

你可能會好奇,為什麼在判斷number這個變數是否為0時,使用的是number == 0而不是number = 0呢? 如果你會這樣想代表你的數學還不錯,在數學的世界裡,我們知道 "=" 這個符號代表了此符號的左右兩邊的數值相等,但在程式語言中,= 所代表的意思為將左側變數的值設為右側變數的值,以上述例子而言,第一行的 local number = 0 代表的就是定義一個名稱為number的變數,並且將他的值設為0
所以此處的 = 的用意就代表將number的值"設為"0;而 == 所代表的意義就是左右兩邊的值是否相等,以上述例子而言,在第三行的 if number == 0 then 代表如果number的值是0,那執行以下指令,所以此處的 == 代表的就是 number與0的值是否相等

然後如果你要判斷的變數值是一個布林值,那可以像這樣寫:

--假設一個情境,現在正在下雨
local IsRaining = true

if IsRaining then
    print("欸幹下雨了不能出門打球")
end

你會發現,為什麼第三行的判斷裡的 "IsRaining" 沒有 == 來判斷,那是因為在判斷式裡,只要判斷式的值為是(true),則會持續往下執行,如果判斷式的值為否(false),則會跳過判斷成立的結果並繼續執行直到程式結束,因為 IsRaining 的值已經知道是 true 了,所以在判斷式裡我們會習慣直接省略掉判斷的結果,不論你在判斷式裡放的變數為何,只要他能成立,程式就會繼續往下執行,用以下的程式碼舉例可以更清楚的看出判斷式的邏輯:

local IsRaining = false

if IsRaining == false then
    print("好欸沒下雨打球囉") --此處是"當IsRaining這項變數值為否"時才會執行,所以在這邊的"IsRaining == false"的意思為"IsRaining的值是否為否"
end

也就是說,當 "IsRaining的值是否為否" 的值是 "是" (也就是IsRaining的值為否),則繼續往下執行。

基本的邏輯理解後,我們來看更進階一點的

否則

我們再用一次剛剛的例子,只是來稍微修改一下:

local IsRaining = true

if IsRaining then
    print("蛤又下雨喔煩欸")
else
    print("欸嘿沒下雨好爽喔")
end

可以看到,我們在判斷式裡多放了一個 "else" ,這就是所謂的 例外 ,意思就是如果上述判斷式成立,則執行成立的指令 (上述的例子就是 print("蛤又下雨喔煩欸") ),否則執行例外的指令 (上述的例子就是 print("欸嘿沒下雨好爽喔") )

直接翻譯就像:

local IsRaining = true

如果 IsRaining為是(上述省略) 那
    print("蛤又下雨喔煩欸")
否則(也就是IsRaining為否)
    print("欸嘿沒下雨好爽喔")
結束

而在更進階的用法就是在else後面再多一次的判斷,例如:

local IsRaining = "I don't know"

if IsRaining then
    print("蛤又下雨喔煩欸")
elseif IsRaining == "I don't know" then
    print("所以是有沒有下雨阿")
else
    print("欸嘿沒下雨好爽喔")
end

在上述程式碼中,我們先判斷了 IsRaining是否為是 ,接著再判斷 如果IsRaining不為是,但IsRaining的值為字串 "I don't know" ,最後再判斷 如果IsRaining不為是也不為字串 "I don't know",值得注意的是, elseif 一定要比 else 先判斷。

not

這是個很神奇的用法,它可以將我們所給予的值做反轉,例如:

local IsRaining = true
IsRaining = not IsRaining

有點難理解吧,我們逐個來看,首先定義這部分大家應該很熟悉了,那目前已知 IsRaining的值是true ,而我們使用了 not 這個指令,並且 將IsRaining的值設為not IsRaining ,那在前面有提到了, not可以將給予的值做反轉 ,所以這時 IsRaining的值會變為IsRaining的值的反轉 ,也就是說, IsRaining的值會變成true的反轉,也就是false

我最常拿not這個指令來當作開關,像這樣:

local Button = game.Player.LocalPlayer.PlayerGui.ScreenGui.Button
--先定義Button是玩家客戶端的UI中的一個UI按鈕

Button.MouseButton1Click:Connect(function()
--將Button的"當滑鼠左鍵點擊"的事件連接到一個函式 (這個昨天有講過喔~)

    Button.Visible = not Button.Visible
    --將Button的Visible屬性 (控制這個UI是否顯示) 的值設為它原始值的相反 (也就是把它給隱藏起來)
    
end)

這項程式的功能就是能夠在玩家按下這個按鈕的時候把按鈕給隱藏起來

其他的判斷與賦值方式

我們先來介紹一個在數學裡也會看到的一個判斷方式,也就是 不等於 ,在Lua語言裡,不等於的寫法是 ~= ,實際的應用就如同:

local IsRaining = true

if IsRaining ~= true then
    print("好欸沒有下雨")
end

像這樣,我們把要判斷的判斷式變成 如果IsRaining的值不為是 ,意思其實等同於 如果IsRaining的值是否

再來是其他很好用的賦值方式,在前面的改變變數值或賦予變數值的寫法中,我們基本上都只有用到 = ,但其實要賦予一個變數值的方法有非常多種,以下方程式碼舉例:

local number = 0

--一般的賦值方式
number = 1

--假如你要把這個變數值再加一,可以像這樣
number = number + 1
--當然,你也可以這樣子寫
number += 1
--這兩個寫法最後的結果是一樣的,而其他的運算因子也可以用一樣的方法

number -= 1
number *= 1
number /= 1

2. Color3的用法

終於可以來玩一點有趣的東西了,這項函式可以讓你把物件的顏色改掉,不同於BrickColor,它可以讓你自定義所有的值,以下方程式碼舉例:

local Part = script.Parent --這個腳本被放在一個Part物件裡面
Part.Color = Color3.new(1, 0, 0) --Part的顏色會被改成紅色

這項函式的用法有四種,分別為:
Color3.new: 從數值去改變紅、綠、藍的數值,每一項數值的最大值是1,最小值是0,可以是浮點數
Color3.fromRGB: 從RGB數值去改變紅、綠、藍的數值,每一項數值的最大值是255,最小值是0,可以是浮點數但會直接進位
Color3.fromHSV: 從HSV數值去改變色相、飽和度、明度的數值,每一項數值的最大值是1,最小值是0,可以是浮點數
Color3.fromHEX: 從HEX色彩代碼去改變紅、綠、藍的數值,透過字串的方式讀取RGB的值,前面的#可以省略

如果你本身有學過畫畫或有一些色彩學的基本知識,那上面的RGB,HSV,HEX這三個數值你應該就不陌生了,但如果你沒有學過這些相關的內容,我簡單講解一下, RGB就是Red、Green、Blue的簡稱,用fromRGB這個方法的時候,在()裡面填入紅色、綠色、藍色的值,每一項值的數值越高,他所佔的顏色比例就越多,而HSV則是透過色相、飽和度、明度這三個數值來調整,HEX則是直接用字串來表示各個色彩的值 ,通常除非有特殊的事件或其他特殊的寫法,不然基本上我都只會用fromRGB,因為屬性頁面也是用RGB來調整色彩。

而這項指令也可以用後續會提到的 math 用法互相搭配,到時我會另外講解怎麼做 隨機變換顏色 的程式。


明天會接著介紹迴圈的概念以及math用法

氣貫長虹


上一篇
Day 3: 函式與事件
下一篇
Day 5: 迴圈與各類數學函式
系列文
透過Roblox Studio學習Lua語言與基本程式邏輯21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言