當前位置:成語大全網 - 書法字典 - 如何在WE編輯器中寫Jass?我是個新手。

如何在WE編輯器中寫Jass?我是個新手。

———————————————————————————————————————

聲明:有壹定T基礎的人,基本可以在10分鐘內掌握jass教程,夯實基礎後還要繼續深入。

學習和研究,請到高層論壇了解相關信息。摒棄傳統教學的特點,開門見山,深入淺出的講解,

即使是沒有程序基礎的人,也能在短時間內快速掌握。本教程不打算鏈接到其他語言。

不管什麽原因,基於讓人們快速掌握和理解語言的初衷,采用了最有效、最受歡迎的手。

方法來解釋語言。關於jass是什麽,為什麽要研究它,我就不贅述了。

——————————————————————————————————

首先,我第壹次見到jass

1,概述(5秒)

至於jass,妳只需要知道兩件事:變量和函數。

╔═══╦════════════════════════╗

║變量║存儲數據,並著重了解和掌握全局和局部變量║.

╠═══╬════════════════════════╣

║function║║║║║║║║║║║║║║║║║║║║║║║ιιιιιι9

╚═══╩════════════════════════╝

2.詳細解釋(2分20秒)

(1),變量和函數以下列格式聲明:

———————————————————————————

A.全局變量的聲明:

全局

變量類型變量名(=初始值)//括號表示不需要賦值,下同。

變量類型數組數組名//array不能直接賦值,需要在函數中逐個賦值。

結束全局

b .函數和局部變量的聲明:

函數函數名帶參數列表返回返回值類型

局部變量類型變量名(=初始值)

......

執行語句

......

返回返回值

結束函數

———————————————————————————

(2)、全局變量和局部變量的區別:

任何全局函數都可以使用,局部函數只作用於聲明的函數。不同函數的局部變量可以同名,最好不要命名為全局和。

參數名稱相同。全局內存占用大,執行速度快,全局內存占用則相反。在觸發器中,諸如觸發器單元、循環整數a、

最後創建的公司和新公司組是全局變量。同樣,變量編輯器(ctrl+B)中的變量也是全局變量。

(3)、功能,掌握以下要點:

(1)函數名是唯壹的;

(2)函數可以沒有參數和返回值,是空函數;

③參數表為參數類型1,參數名稱1,參數類型2,參數名稱2,...,參數類型n和參數名稱n..逗號分隔就夠了;

④返回值必須唯壹;

(5)、局部變量聲明必須在所有執行語句之前;

6.return必須寫在函數的末尾,也就是endfunction上的那壹行;

⑦如果沒有返回值函數,就不用寫return;

8.註意return和return的區別以及它們攜帶的數據。前者後面是變量類型,後者後面是具體數據;

⑨,數組不能做參數和返回值。

示例:

———————————————————————————

全局

Integer int = 3 //聲明壹個整數全局變量int,賦給3。

Real col //聲明壹個實全局變量col未賦值。

字符串數組str //聲明壹個字符串數組str。

布爾數組b = false //錯誤!數組不能直接賦值!

結束全局

局部整數索引= 19 //錯誤!局部變量聲明如何脫離函數?

函數A不取任何值,也不返回任何值

局部整數a = 1 //聲明壹個整數局部變量A,賦給1,下同。

局部整數b = 2

局部整數c = a + b

Call BJDebugMsg(I2S(c)) //顯示c的值,這句話(帶Call)就是執行語句。

結束函數

函數B取實數r,整數e不返回任何值

//接受實數參數r和整數參數e。

調用bjdebugmsg(r2s(r)+i2s(e))//顯示r的值

結束函數

函數C不取任何值,返回實數

//返回壹個實變量。

Return 2 * 3 * 15 //正確,必須有返回值。

結束函數

函數D不取任何值,返回實數,整數

//這個函數是錯的!壹個函數只能返回壹種數據類型!

返回...

結束函數

函數E取實數r返回實數

//這個函數是錯的!有返回值類型,但是函數末尾沒有具體的返回值!

結束函數

函數F取實數r返回實數

//正確,有返回值類型和具體返回值。

返回r * 33

結束函數

函數G不取任何值,不返回任何值

致電BJDebugMsg(I2S(h))

//錯誤!局部變量聲明必須在所有執行語句之前!

局部整數h = 5

結束函數

函數H接受整數數組num,不返回任何值

//錯誤!數組不能用作函數的參數!

結束函數

———————————————————————————

二、jass進階(1分30秒)

(1),函數定義

很多剛接觸jass的朋友都沒搞清楚這個問題。簡單來說,職能就是能夠獨立完成某項工作的機構。

以函數showtext為例。他能做什麽?或者他有什麽樣的功能?註意,函數中的所有內容

(function~endfunction)之間的部分就是這個函數的函數或函數。所以,這個函數的功能是

打印壹行信息“我在學jass”。

———————————————————————————

函數showtext不帶任何內容,不返回任何內容

調用BJDebugMsg("我在學jass") //顯示"我在學jass "

結束函數

———————————————————————————

(二)、生成和操作

函數是如何運行(調用)的?很簡單,調用函數的名字(參數表)就夠了,這裏的參數表的要求前面已經提到了。

我做到了。需要註意的是,call後面是某個函數,這個函數叫做被調用函數。被調用的函數必須在調用

函數,且傳遞狀態下的參數列表應與被調用函數的參數列表的類型、順序和數量壹致。

———————————————————————————

函數A接受整數I,不返回任何值

調用BJDebugMsg(i2s(I))//Display 31。

結束函數

函數B不取任何值,也不返回任何值

調用A(31) //正確,被調用的函數A在函數b的前面,函數b將整數31傳遞給函數A。

調用C(0.02) //錯誤!被調用的函數c在函數b後面!

結束函數

函數C不返回任何值

調用BJDebugMsg(R2S(r))

結束函數

———————————————————————————

可以讓壹個函數調用後面的函數嗎?是的。使用ExecuteFunc("函數名")的搜索函數,但要註意兩點:

①函數檢索距離不能太大,即兩個函數之間的字節碼有限;

②在檢索狀態下,被調用的函數不能有參數,但可以有返回值;

③在遵循②的前提下,被搜索的函數既可以在被搜索的函數之前,也可以在被搜索的函數之後。

———————————————————————————

函數A不取任何值,也不返回任何值

結束函數

函數B不取任何值,也不返回任何值

調用ExecuteFunc("A") //正確,檢索到的函數沒有參數,下同。

調用ExecuteFunc("C ")

調用ExecuteFunc("D") //錯誤!被檢索的函數d帶有參數!

結束函數

函數C不帶任何內容,返回整數

返回256

結束函數

函數D接受整數I,不返回任何值

致電BJDebugMsg(I2S(壹))

結束函數

———————————————————————————

三、語法(1分30秒)

(1),循環

——————————————————

exit when condition//滿足條件退出循環。

執行語句

末端回路

——————————————————

(2)條件控制

——————————————————————

壹、單層控制:

If條件then //如果滿足條件1,則執行該操作。...

執行語句

endif

b、雙重控制:

如果條件1,則//如果滿足條件1,則執行該操作。...

執行語句

否則,就去做。...

執行語句

endif

c、多層控制:

如果條件1,則//如果滿足條件1,則執行該操作。...

執行語句

else if condition 2 then//Do it if condition 2。...

執行語句

Elseif condition 3 then //如果滿足條件3,則執行它。...

執行語句

else if condition 4 then//Do it if condition 4。...

執行語句

.....//滿足條件n就做。...

endif

——————————————————————

(3)、邏輯關系:

只有三個,and(和),or(或),not(非)。

(4)、比較和運算符:

只有9,[](數組),[] =(數組賦值),=(賦值),

= =(等於),!=(不等於),>(大於),

& gt=(大於或等於),< =(小於或等於)

(5)、舉例。如果混合使用,請註意嵌套:先結束內層,再結束外層:

———————————————————————————

函數A接受整數I,整數j不返回任何值

If (i==3,j==5) then //如果滿足i=3,j=5,則顯示它們的和。

呼叫BJDebugMsg(I2S(i+j))

其他

調用BJDebugMsg(“條件不符!”)//否則不要給出“條件不符”的警告!

endif

結束函數

函數B不取任何值,也不返回任何值

局部整數i = 1

局部整數數組索引

exitwhen i & gt7 //當我& gt7點退出循環

設置索引= 25 * i

集合i = i + 1

末端回路

結束函數

函數C不帶任何內容,返回整數

局部整數i = 1

局部整數數組索引

exitwhen i & gt七

設置索引= 25 * i

如果(i==2或i==6)那麽

致電BJDebugMsg(I2S(壹))

Endif //endif嵌套在壹個循環內,所以應該先結束內層。

集合i = i + 1

Endloop //再次結束外層

結束函數

———————————————————————————

四、功能間的數據傳遞(4分)

(1),使用全局數組傳輸

這涉及到很多內容,暫時不做解釋。

(2)、1.20 Gamechche(遊戲緩存)+返回Bug(類型強制轉換)

眾所周知,為了實現多技能操作,可以使用全局數組。當然,可以使用局部變量,因為局部變量

它們互不幹擾、穩定且並行運行。當然,我們可以通過傳遞參數來傳遞局部變量的值。然而,

對於壹些不允許帶參數的函數,局部變量的數據不能在函數之間傳遞。我該怎麽辦?妳需要在這個時候使用它

到緩存。有哪些函數不允許這樣的參數?綜上所述:如下

1,jass定時器調用的函數;

2.隊列事件(單位組、玩家組、可破壞組等)的過濾(條件)功能。);

3.觸發器的條件函數。

Cache很好理解,只是壹個倉庫。這個倉庫可以想象成壹個有很多櫃子的大房子,每個櫃子

裏面有很多抽屜,但是,每個抽屜只能裝指定的五類東西,每個東西只能裝壹個。

這就是櫥櫃的原理,不需要抽象的技術術語。我想上面的解釋已經讓妳明白什麽是緩存了。

那麽,在實際的緩存中,房子可以算是壹個緩存。當然,既然是大房子,地圖和緩存就夠了。

櫃子可以看作是緩存的目錄,抽屜可以看作是緩存的標簽,因為緩存的目錄和標簽都是字符串的形式,因為

在這裏,我們不妨把壹個打火機1存放在房子X的櫃子A和抽屜K:房子X →櫃子A →抽屜K →打字。

打火機1同樣,我們必須在存儲後的指定路徑下找到這個打火機1。基於抽屜中存放物品的獨特性,“房間”

子X →櫃A →抽屜K”指的是存放的打火機1。因為抽屜壹次只能放壹樣東西,如果再放,

如果壹個打火機2進去,會覆蓋前面的打火機1。這時“房子X →櫃子A →抽屜K”指向命中。

打火機2。當然,如果妳把打火機2放在其他抽屜裏,比如抽屜L,完全不會影響打火機1的收納,因為有兩個不相幹的。

小路。

所以對於緩存來說,壹個標簽只能存儲五種類型的數據是壹個道理:整數、實數、布爾值、字符串、單位。每種數據

只能保存壹個,否則傳入的數據會覆蓋以前屬於該類別的數據。讓我們看看緩存是如何實現的。註意,緩存

它必須在使用前初始化。方法是set cache變量名= InitGameCache(“緩存名”),緩存名隨便妳。

Fetch:調用存儲數據類型(緩存、目錄名、標簽名、這類數據的某個值)。

Storage: GetStored數據類型(緩存、目錄名、標記名)

清除標簽:調用FlushStored數據類型(緩存、目錄名、標簽名)

清除目錄:調用FlushStoredMission(緩存,目錄名)

清空整個緩存:調用FlushGameCache。

檢測緩存數據是否存在:具有存儲的數據類型(緩存、目錄名、標記名)。

假設緩存名是udg _ GC(udg _是什麽?有t基礎的知道多少):

調用Store Integer (UDG _ GC," A "," B ",15)//將B標簽下的整數15存儲在緩存GC的A目錄下。

調用Store Real (UDG _ GC,“A”,“B”,0.2)//將B標簽下的實數0.2存儲在緩存GC的A目錄下。

調用Storei Boolran (udg _ GC," A "," B ",false)//將B標簽下的布爾值false保存在緩存GC的A目錄下。

調用StoreString (udg _ GC," A "," B "," TigerCN ")//將字符串Tiger CN保存在緩存GC的A目錄下的B標簽下。

因為每壹種數據都可以存放在同壹個路徑下,所以不會有沖突,但是如果此時這個數據下存放了壹個整數37,也就是說,

調用StoreInteger(udg_GC," A "," b ",37)

然後getstoreiminator(udg _ GC,“a”,“b”)指向後面存儲的37,但這並不影響該路徑下的其他類型數據。

除非他們想這樣改變。當然,為了保證整數15不被覆蓋,我們可以在標簽C下保存37,即:

調用StoreInteger(udg_GC," A "," c ",37)

使用循環+緩存,我們可以訪問局部數組變量。

這時候有的同學會問:只能訪問5種嗎?太少了!如果我想訪問壹個特殊效果呢?別擔心,返回bug已經出來了!我們能

為了用他把其他句柄類的數據轉換成整數,然後用StoreInteger來存儲。返回bug的原理很簡單,使用編譯器

自下而上的檢測,遇到第壹次退貨,如果被虛假結果蒙蔽,會自動跳過檢測。其形式如下:

———————————————————————————

函數H2I接受句柄hreturns整數

返回h //真正返回的值是h,是句柄指向的內存地址。

Return 0 //編譯器先檢查這裏,返回值為0,是正確的。跳過檢查。

結束函數

函數I2E采用整數ireturns效果

從句柄指向的內存地址讀取句柄。

Return null //編譯器先檢查這裏,返回值為null,這是正確的。跳過檢查。

結束函數

———————————————————————————

所以我們需要存儲單位、特效、點數、單位組、物品等變量。按照這種格式。

所以我們可以存儲壹個觸發單元:

———————————————————————————

函數H2I接受句柄hreturns整數

返回h

返回0

結束函數

函數I2U采用整數ireturns單元

返回I

返回null

結束函數

函數run不取任何值,不返回任何值

本地單元u = I2U(GetStoredInteger(udg_GC," unit "," Caster "))

//從緩存對應的路徑中讀取存儲單元的地址,通過I2U轉換成單元,然後賦給變量u。

調用RemoveUnit(udg_GC," Unit "," Caster ",H2I(u))

//刪除單位u

調用FlushStoredMisiion(udg_GC,“Unit”)

//清空單元目錄。請註意,刪除整個緩存將會刪除使用該緩存的其他數據。

set u = null

結束函數

函數測試不取任何值,返回整數

局部單元u = GetTriggerUnit() //聲明壹個單元類型的局部變量u,並將其賦為觸發單元。

本地定時器t = CreateTimer() //聲明壹個本地定時器t,並將其賦為新定時器。

調用StoreInteger(udg_GC," Unit "," Caster ",H2I(u))

//將U轉換成整數,存儲在Unit目錄中的Caster標簽下。

調用TimerStart(t,5,false,函數運行)

//啟動定時器T,壹次,持續5秒,函數運行。

設置t = null

//清除句柄變量

結束函數

———————————————————————————

(3)1.24的哈希表(哈希表)

很簡單。它只是把緩存的目錄和標簽字符串記錄的形式改成了整數,還修正了RB,可以直接存儲壹些。

句柄類的數據。

Fetch:調用保存數據類型(哈希表、目錄名、標簽名、這類數據的某個值)

存儲:加載數據類型(哈希表、目錄名、標記名)

清空目錄:調用FlushChildHashtable(哈希表,目錄名)

清除整個緩存:調用FlushParentHashtable(哈希表)

檢測緩存數據是否存在:已保存的數據類型(哈希表、目錄名、標記名)

動詞 (verb的縮寫)觸發器和功能(35秒)

壹般壹個觸發器由三個函數組成:事件函數(初始化函數)、條件函數、動作函數,所以不用懷疑,jass就完事了。

壹個技能或者系統也需要經歷這三個步驟。當然,許多自定義功能通常可以擴展。總體思路不變。打雷了,

我們就此打住吧!10分鐘讓妳基本掌握jass。如需了解更多信息,請前往高級論壇探索!如果有人問我關於我創造的最後壹個單位,殺戮

如何在jass中編寫單位和創建特效?我只能說,最直接最懶的辦法就是寫成T,然後轉換成j。