iT邦幫忙

2023 iThome 鐵人賽

DAY 15
1
Modern Web

什麼!在網頁上也可以寫遊戲?系列 第 15

[Day 15] 事件表中的數學函數

  • 分享至 

  • xImage
  •  

今天讓我們回到事件表中,我曾經介紹過,在事件表中,幾乎所有可以填寫數字的欄位,都可以使用數學式,也就是在欄位中進行加減乘除之類的數學運算,但實際上可以使用的數學式可沒這麼簡單,還提供了一些 Math 函示庫裡面的數學函數,讓我們可以直接在事件表中使用,所以今天我就是要來跟各位介紹,如何在事件表中使用這些數學函數,以及有哪些比較常用的數學函數。

哪裡可以使用數學函數

首先,我們必須先能夠判斷什麼地方可以使用數學式,最簡單的判斷方法,就是當你打開任意動作、檢查、觸發時,該欄位的目的是希望你可以輸入一個數字,而且可以輸入除了數字以外的任何字元,而不限定你只能填寫 number,那就可以使用,舉個例子。

上圖是動作 儲存全域變數 的內容,其中 變數的值 就是要我們輸入一個數字,以便儲存到變數之中,並且可以輸入數字以外的字元,這時就可以使用數學函數,例如圖中就是其中一種,而像是 變數名稱 這種要讓我們輸入字串的欄位,就沒有辦法使用任何數學式,包括加減乘除。

至於要我們填寫數字,但又不能填寫數字以外的字元的欄位,讓我們繼續往下看。

上圖就是其中一個例子,當輸入了數字以外的東西之後,該欄位就會變紅並跳出警告,這時就不能儲存了,所以自然也就沒辦法使用數學式,大部分的事件表模組作者,應該都會盡量避免出現這種欄位,因為這樣會大幅降低這個功能的自由度,所以如果在製作的過程中有發現這種欄位,也許可以考慮回報給模組作者,也許下次更新時就可以輸入數學式了。

什麼是函數

在我們開始介紹那些數學函數之前,先讓我們來聊聊什麼是函數,老實說事件表裡面到處都是函數,其中與函數最像的就是動作,動作就是讓我們輸入一些數值,當動作被執行時,它就會根據我們輸入的那些資料,去執行被寫在動作裡面的程式碼,來達成某些效果,但我們不需要考慮裡面的程式碼怎麼寫,我們只要會用就好。

函數就跟動作一模一樣,同樣是可以輸入一些資料,同樣是根據我們輸入的資料去做某件事情,同樣會給我們一些回饋,這麼看起來函數對於已經了解動作的我們是不是簡單多了呢?

如何使用數學函數

這個部分其實很簡單,直接在欄位裡面輸入對應的函數名稱,再利用 () 帶入要計算的數字就好了,例如第一張圖的 num = min(10, 20),這個函數的意思就是取最小值,而 10 < 20,所以最終的結果就是 num = 10

另外在函數裡面仍然可以填寫其他數學式,也就是其他數學函數,例如 num2 = max(0, min({num}, 100)),看起來一下子複雜了不少,但沒關係,我們來一一解析,還記得我說過有多層括號的話,最裡面的括號要先看嗎?這個部分在數學式也是一樣,由於 num = 10,在使用 {} 帶入之後,裡面的 min 就會變成 min(10, 100),取最小值就是 10,接下來就是 max(0, 10),這個數學函數是用來取最大值的,所以最終結果就是 num2 = 10

上面那一串數學式雖然看起來有點長,但卻在很多地方都會用到,那個數學式的用途是為了將數字控制在一個範圍之內,例如上面那個例子就是控制到 0 ~ 100 之間,總之了解數學式,對於各位未來在製作某些功能時,一定會派上用場的。

接下來我就用表格來跟各位簡單說明,我個人測試在事件表中可以使用的數學函數。

函數名稱 函數用途
min(x, y) 取最小值,用於回傳 x, y 中較小的一方。
max(x, y) 取最大值,用於回傳 x, y 中較大的一方。
abs(x) 取絕對值,用於將 x 無條件設為正數。
ceil(x) 無條件進位,用於回傳一個大於等於 x 的最小整數。
floor(x) 無條件捨去,用於回傳一個小於等於 x 的最大整數。
round(x) 四捨五入,用於回傳一個離 x 最近的整數。
random() 取隨機數,用於回傳一個 0 ~ 1(不包含)的隨機數。
random(x, y) 取隨機數,用於回傳一個 x ~ y(不包含)的隨機數。
randomInt(x, y) 取隨機整數,用於回傳一個 x ~ y(不包含)的隨機整數。
pow(x, y) 指數運算,用於回傳 x 的 y 次方的值。
exp(x) 指數運算,用於回傳 e 的 x 次方的值。
log(x) 對數運算,用於回傳 x 的自然對數。
sqrt(x) 取根號,用於回傳 x 的根號。
pi 圓周率,等同於我們在數學中寫 π,讓我們更方便使用圓周率。
number(x deg, rad) 單位換算,用於將角度 x 換算成弧度。
number(x rad, deg) 單位換算,用於將弧度 x 換算成角度。
atan2(y, x) 計算弧度,用於計算從 (0,0) 到 (x,y) 的弧度。
sin(x) 三角函數,用於計算 x 弧度的正弦值。
cos(x) 三角函數,用於計算 x 弧度的餘弦值。
tan(x) 三角函數,用於計算 x 弧度的正切值。
asin(x) 三角函數,用於計算 x 弧度的反正弦值。
acos(x) 三角函數,用於計算 x 弧度的反餘弦值。
atan(x) 三角函數,用於計算 x 弧度的反正切值。

以上就是在事件表中可以使用的各種數學函數,大概除了 exp、log、sqrt 以外,我幾乎都有用過,只能說了解這些函數的用途,可以讓我們在遊戲中製作出更多更酷的東西,而且也不用了解它怎麼算的,只要知道怎麼用,以及用了的結果是什麼,就可以了。

總結

今天介紹了在事件表中,數學式除了加減乘除以外,還有數學函數可以使用,並且列出了一個列表,供各位可以參考,我自己最常使用的,大概是最小最大值,以及弧度角度的計算與轉換,因為在程式中,一般計算角度的單位都是以弧度為主,而事件表為了方便,幾乎都讓使用者直接輸入角度即可,但還是有某些變數的值讀取出來會是弧度,又或是 atan2 計算出來的值為弧度,就會常常需要進行單位的轉換。

總之表整理在這裡了,可能我們現階段用到數學函數的機會還很少,但萬一有一天需要用到時,想起酷可好像曾經提到過,就可以回來翻翻有哪些函數可以用拉~


上一篇
[Day 14] 每位勇者都需要一枚勳章
下一篇
[Day 16] 變數的實際應用-等級系統
系列文
什麼!在網頁上也可以寫遊戲?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

2
小哈片刻
iT邦研究生 4 級 ‧ 2023-09-30 23:13:16

這個表太詳細啦~~~

酷可 iT邦新手 4 級 ‧ 2023-09-30 23:18:16 檢舉

這樣子連我之後突然失憶也可以回來看了w

我要留言

立即登入留言