Approach - GMS中常用腳本介紹(1/5)

【GameMaker Studio 2生肉教程】-【GMS2實用技巧小課堂】-【作者Shaun Spalding】 https://www.bilibili.com/video/av12475113/#page=8

這兩天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 | 腳本 | 遊戲開發 |