變數(variable)

什麼是變數

照字面上的意思,“變數”即是:會變動的“數”,這個數即是“數據”、“資料”的意思。

變數代表一個指向電腦記憶體位置的預留空間。在這個空間中,你可以儲存一些在遊戲執行過程中會變動的資訊。

變數必須有名稱(用來引用該變數所包含的值)和資料型態(決定變數可以儲存的資料種類)。

變數的名稱

變數名稱必須以英文字母開頭。變數名中可以包括:大小寫英文字母A~Z, a~z、數字0~9、底線_,其他字元會被認為非法(請不要用中文命名變數)。

變數不得以關鍵字或已存在的名稱來命名。JASS的關鍵字有26個,和英文字母一樣多:

and array call constant else elseif endfunction endglobals endif endloop exitwhen extends 
function globals if local loop native not or return  returns set takes type then

變數的定義

在使用一個變數前,首先要告訴war3:「我要存放資料啦,畫一塊記憶體給我!」,這就是對變數的定義。

寫過程式的人應該都知道變數分為全域變數和區域變數。全域變數就像家裡的儲藏室一樣,每一個人(函數)都能自由地存取它;而區域變數則像家中成員私人的抽屜一樣,只有定義它的函數才能夠存取它。

定義全域變數

在we中對全域變數的定義,是在edit(編輯)功能表中點擊Variables(變數),或者直接點快顯功能表按鈕中的“X”按鈕,新增、刪除、定義資料類型。而實際在map檔中,這部分變數會放在JASS檔開頭的部分聲明,形式如下:

globals
 <變數類型> <變數名稱> = 初始值
 ...
endglobals
= 初始值可以不寫

此外,觸發中的Integer A、Integer B、以及所有Last Created開頭的函數(如Last Created Unit、Last Replaced Unit、Last Created Special Effect…),其實都是B社定的全域變數。

定義區域變數

區域變數的定義,必須放在一個函數的最前段,用local關鍵字開頭來聲明,全部區域變數的定義結束後,才是函數的實體部分。定義語法如下:

local <變數類型> <變數名稱> = 初始值
= 初始值可以不寫

設定變數的值

定義變數只是叫電腦劃空間給你而已,有了空間,再來就是把資料放進去。語法是:

set <變數名稱> = <值>

此外,大家應該有看到,在定義的時候也可以順便設定初始值。

取用變數的值

變數的值設定好以後,就可以隨意取用啦。把它當作一個數或一個物件來用即可。

字首

B社為了讓程式運作順暢,而且不讓製作者自製的變數名稱和War3內部的變數名稱混淆。因此WE會自動為玩家自訂的變數名稱加上字首。例如:

blizzard.j中定義的變數      ==> bj_

觸發編輯器定義的變數      ==> udg_

觸發器             ==> gg_trg_

WE繪出的區域          ==> gg_rct_

預置部隊            ==> gg_unit_

聲音編輯器建立的聲音      ==> gg_snd_

等等

最常見的情況是使用WE定義的變數,在寫JASS時,不要忘了加上udg_喔!

常數

顧名思義,就是用一串字來表示一個固定的值,如PI(π=3.141592653589793)。由於WE中無法手動新增常數,所以這裏只做一個簡單的介紹。

常數是唯讀的,可以把它想成是一個無法改變數值的變數。它的定義也是在JASS檔的開頭,例如blizzard.j中:

globals
    constant real    bj_PI                    = 3.14159
    constant real    bj_E                     = 2.71828
    constant integer bj_MAX_INVENTORY         = 6
    constant integer bj_PLAYER_NEUTRAL_VICTIM = 13
    constant integer bj_PLAYER_NEUTRAL_EXTRA  = 14
endglobals

其它的使用方法和變數大同小異。

命名方式

雖然變數的名稱可以自由命名,不過建立一個好的命名習慣,可以讓你迅速了解該變數的用途。 一般習慣上,常數全部大寫,並且使用底線區隔單字,例如:PLAYER_COLOR_RED、ATTACK_TYPE_NORMAL、UNIT_TYPE_HERO、……

變數則有全部小寫、小寫和底線、大小寫交錯等寫法,例如:bj_questdiscoveredsound、bj_quest_discovered_sound、bj_questDiscoveredSound、……

如果你喜歡用a b c dhfla tyy等等無意義的字母命名,也不會出現任何問題。但是筆者不建議這種命名方式,這樣在有錯誤的時候較不便於偵錯。

當然,如果覺得自己英文不大靈光的話,中文拼音也完全OK,總之,自己方便、日後易讀的方法,就是好方法。

相關內容

  • 變數(variable)或譯作變量。

  • 全域變數(global variable)也稱作全局變量。

  • 區域變數(local variable)也稱作局部變量。

  • 若需要範例,讀者可參考JASS語法範例

  • 對區域變數使用方式有興趣的,可參見全域vs區域變數教學。

JASS與GUI資料類型對照表

JASS變數名稱 GUI Trigger變數名稱 說明
boolean Boolean 布林
integer Integer 整數
real Real 實數
string String 字串
attacktype Attack Type 攻擊類型
button Dialog Button 對話框按鈕
camerasetup Camera Object 鏡頭物體
defeatcondition Defeat Condition 失敗條件
destructible Destructible 可破壞物件
dialog Dialog 對話
dialogevent Dialog Button 對話事件
effect Special Effect 特效
fogmodifier Visibility Modifier 可見度
force Player Group 玩者群組
gamecache Game Cache 遊戲暫存
gamespeed Game Speed 遊戲速度
group Unit Group 部隊群組
image Image 影像
item Item 物品
itemtype Item-class 物品分類
leaderboard Leaderboard 計分板
lightning Lightning 線狀特效
location Point
multiboard Multiboard 面板
player Player 玩者
playercolor Player Color 玩者顏色
quest Quest 任務
questitem Quest Requirement 任務要求
race Race 種族
rect Region 矩形區域
sound Sound 音效
soundtype Sound Type 聲音類型
terraindeformation Terrain Deformation 地形特效
texttag Floating Text 漂浮文字
timer Timer 計時器
timerdialog Timer Window 計時器窗口
trigger Trigger 觸發器
unit Unit 部隊
ubersplat Ubersplat 貼圖
weapontype Combat Sound 攻擊音效
weathereffect Weather Effect 天氣特效
綜合教學/jass入門教學/3.變數.txt · 上一次變更: 2007年11月11日 3:59 pm 來自 wasabi
www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0