Approach - GMS中常用腳本介紹(1/5)
這兩天Shaun Spaldiing做了個視頻介紹一些常用並且實用性比較強的腳本,覺得還蠻有用的,所以就也用文字詳細說明一下,一共5個腳本,今天先介紹第一個:)
Approach
PS. Shaun Splading做的視頻里右下角的致謝名單的方法名好像寫錯了,Wave()是後一個腳本名了
這個腳本其實不算複雜,如果有些代碼基礎大概就能看明白,但這是一個設定讓某個數值向一個目標值增加/減少的方法。
在腳本中我們設定了三個參數:
- "a" :需要修改的初始值
- "b" :需要修改的最終結果值
- "amount" :修改的單位
在代碼注釋部分舉了一些常見的例子
// Speed = Approach (speed , max_speed , acceleration) ;// hp = Approach(hp , 0 , damage_amount) ;// hp = Approach(hp , max_hp , heal_amount) ;// x = Approach(x , target_x , move_speed) ;// y = Approach(y , target_y , move_speed) ;
用偽代碼表示大概如下:
速度 = Approach(速度 , 最大速度 , 加速度)//當前速度以加速度為單位不停增加直到達到最大速度為止血量 = Approach(血量 , 0 , 傷害值)//當前血量以傷害值為單位不停減少直到為0血量 = Approach(血量 , 最大血量 , 治療量)//當前血量以治療量為單位不停增加直到滿血為止x坐標 = Approach(當前x坐標 , 目標x坐標 , 移動速度)//當前x坐標以移動速度為單位不停移動至目標x坐標位置y坐標 = Approach(當前y坐標 , 目標y坐標 , 移動速度)//當前y坐標以移動速度為單位不停移動至目標y坐標位置
由上這幾個例子我們大概就能了解這個方法的常用場景,就是當你某個值需要以特定的單位修改成另一個值,並且不能超出那個值的範圍時可以使用該方法,比如血量降低到0,絕對不能出現血量變成負數的情況。
下面我們就來看一下具體的方法:
if (argument0 < argument1){ argument0 += argument2 ; if (argument0 > argument1) return argument1 ;}else{ argument0 -= argument2 ; if (argument0 < argument1) return argument1 ;}return argument0 ;
最上面是聲明方法名稱、參數的,我們會在文末進行介紹,首先我們要清楚一個概念,當GMS2中自定義腳本需要傳入參數時,默認是使用"argument0"、"argument1"這樣的格式,最後一位數字序號從0開始分別代表傳入的第一個數以此類推,因此在代碼中我們看見"argument"這樣的格式內容就都是我們傳遞進這個方法的參數,在上文我們說過這個方法我們將傳入三個參數,因此從0-2三個參數請大家自己對應一下。
然後這個方法中使用了一個if/else的條件判斷:首先在開頭if的條件判斷的是參數1是否小於參數2(即初始值是否小於目標值)
如果滿足該條件則進入if後的代碼,參數1以參數3為單位遞增然後這個if方法中還有一個if判斷,這次判斷的條件是參數1是否大於參數2(即經過遞增操作初始值是否大於目標值)
如果滿足則直接把參數2作為最終結果返回
後一個判斷就是為了保證初始值經過遞增修改,返回的結果也絕對不能超出目標值的範圍,因此直接將目標值作為結果返回。
else中的代碼基本類似,只是將遞增的操作改為了遞減。另外在最後還有一行"return argument0 ",其實是無論如何都不會被觸發的,但是出於語法的完整性這裡還是需要這樣一行內容。參數及方法名聲明
在腳本文件的最上面我們會看到一些用三個斜杠「///」開頭的內容,這些不是注釋,而是聲明腳本方法的屬性,只有經過了這樣的聲明,最後我們在其他代碼中調用該方法時才能獲得GMS2的自動代碼補齊和高亮提示(如下圖),這樣可以方便我們在寫代碼時更容易回憶起某些腳本的使用方法。
腳本完整代碼
/// Approach(a, b,amount)///@description Approach (a,b,amount)///@param a///@param b///@param amount//Moves "a" towards "b" by "amount" and returns the result//Nice because it will not overshoot "b" ,and works in both directions//Examples:// Speed = Approach (speed , max_speed , acceleration) ;// hp = Approach(hp , 0 , damage_amount) ;// hp = Approach(hp , max_hp , heal_amount) ;// x = Approach(x , target_x , move_speed) ;// y = Approach(y , target_y , move_speed) ;if (argument0 < argument1){ argument0 += argument2 ; if (argument0 > argument1) return argument1 ;}else{ argument0 -= argument2 ; if (argument0 < argument1) return argument1 ;}return argument0 ;
推薦閱讀:
※魯德——Python開發性能測試腳本
※短視頻小團隊賺錢必須具備這種人才!市場稀缺!
※免費:3dmax不基於UV遮罩插件腳本
TAG:GameMakerStudio | 腳本 | 遊戲開發 |