㈠ 跪求JASS教程
只要你已經玩熟T,保證你學會JASS
首先JASS入門。 許多人對JASS望而生畏,看見一大堆的英文代碼,
心生膽怯。所以覺得JASS很難學會。
總結了一下產生這種情緒的原因有以下幾點:
1 . JASS可以說相當簡單(跟其他程序語言相比幾乎可以用小白來形容了);不過之前有個朋友要我比較下C++和JASS,他說JASS比C++還難,因為JASS的函數是那樣多。天,誰叫你去記那些函數,我倒~
筆者從來不去背函數,需要用函數時,常常把T轉換成J查看;或者使用JASS工具的查詢功能(說到這我想可能某些新人連JASSSHOP和JassCraft這樣的工具都沒有吧,沒有就趕快去下載)。其實JASS的函數名差不多已經告訴你它是幹嘛的了,去死記硬背完全是多此一舉。
還有一種辦法就是查UI 裡面的 一個叫 「TriggerStrings」的TXT文件 ( 不要告訴我你不知道UI在哪。)一打開你就能看懂了,裡面全是中英文對照的。
2 現在的教程做的都太高估初學者了。許多教程在最開始的時候把最基礎的東西講得太少了(可能是作者認為這些東西太簡單容易理解)導致初學者還沒把最基礎的掌握了(沒入門),就去看比較難的,當然會學的雲里霧里的,最後就會失去學JASS的信心。
(這是我的親身體會)
所以我首先給大家推薦來自GA 冰塊的教程(很遺憾他沒有寫完) 用來入門 因為他基礎寫的很細,而且易懂。
我在學JASS的時候,也是看遍了大江南北的JASS教程,沒一個看得懂 呵呵,但就是因為看了冰塊的這個JASS教程,讓我重新認識了JASS(我入門了),所以我覺得第一步 入門很重要。一旦你入門了,後面你只要認真看教程,不出一星期,你就能學會。
好了 ! 不多說了~~轉上教程
冰塊教你學JASS
本人第一次做教程,加上接觸JASS的時間也不長,所以如果教程有誤人子弟之嫌.還請論壇的大大們幫助修改.
首先希望大家可以通過我的教程能夠幫助大家快速的掌握JASS.在看教程前,大家也先耐下性子,其實學這個只要堅持一下,很快就能學會.畢竟是很簡單的腳本語言.一般在1-2天內能夠掌握基礎應用不成問題.JASS的重頭還是之後的自己在實踐中領悟,正所謂:"師傅領進門,修行靠自身么."好了話也不多說了...下面正式開始教程了..
第一章 JASS 變數篇 (這章是重點,要認真學哦)
變數就顧名思義就是指可以在程序運行過程中能夠改變的量。
首先我們了解下JASS為我們提供的變數類型:
WE中變數名 JASS中變數名 中文變數名
Boolean boolean 布爾型
Integer Integer 整數型
Real real 實數型
String string 字元串型
Timer timer 計時器
Timer Window timerdialog 計時器窗口
Unit unit 單位
Unit Group group 單位組
Point location 點
Player player 玩家
Player Group force 玩家組
Item item 物品
Special Effect effect 特效
Dialog dialog 對話
Dialog Button button 按鈕
Destructible destructable 可破壞物
這個表格里的變數類型不是很全面,本人比較懶。
當然在WE里還有一些變數類型,比如Order(命令)Ability(技能) Unit Type(單位類型)等,其實可以在全局變數聲明區發現這些變數都屬於integer(整數)變數。
上面的表格中,橙色標注的變數,是基礎變數,這些變數在函數使用過程中不需要手動進行清除。除此以外,其他的變數其實都屬於handle類型的子類型,這些變數在使用過程中需要對其進行清除。
下面說下變數的申明方法:
1.全局變數:全局變數申明必須在程序的最前端,使用globals,endglobls關鍵字對其進行申明。(但是在VJ中可以在任意區域申明,其實最後還是會把所有的申明調到最前面去)全局變數,聽這個名字就知道,全局變數的作用范圍是整個程序,你可以在任何時候調用。
申明方法如下
globals integer a=123456//此為有初始值的全局變數 real b //此為是沒有初始值的全局變數 real array c//此為數組全局變數的申明方式 endglobals
2. 局部變數:局部變數的申明,必須在函數的開始,使用local作為關鍵字。局部變數的作用范圍是函數內部,不同函數中定義的同名局部變數是不會互相影響的。
申明方法如下
local real a=123456//此為有初始值的局部變數
local real b //此為是沒有初始值的局部變數
local real array c//此為局部變數數組的申明方式
3.數組:數組其實是一組有序的相同類型的變數,通過數組索引,也就是[N]中的數字來確定指定某一個元素。在WE中數組的下限是從0開始的,也就是說數組中的元素數量是N+1個。
申明方法:在變數類型後加上array就可以申明一個數組變數了。
數組元素賦值方法:
function A takes nothing returns nothing
local integer array a
set a[0]=1//這樣是正確的
set a=0//這樣是錯誤的
set a[1]=a[2]//正確
endfunction
這一章就到此結束了。對於變數,其實只要了解一下就可以了,並不是JASS的難點,不用記住太多理論的東西,自己稍微練習一下就可以完全掌握了。
//====================危城強大的分割線==================================
</TD></TR>
w7272043872008-10-07 01:11 第二章 JASS 函數篇 (這章是重點,要認真學哦)
第一節.函數的定義與調用
WE中分CJ函數也就是common.j中提供的函數..
還有BJ函數(blizzard.j) ai函數(common.ai)
不過ai不涉及在本教程當中
還有就是用戶自己定義的函數..
CJ函數: 其實是提供了一些API(Application Programming Interface,應用程序編程介面),主要是完成一些不能由自定義函數完成的功能。
BJ函數:Trigger才用的函數..既然學了JASS..我認為就54這個吧...畢竟BJ函數寫的很渣..效率低下....
當然學JASS的目的就是寫自定義函數..
下面我們先學下 如何定義一個函數
這里用function,endfunction,takes,returns作為關鍵字..
基本格式是:
function 函數名字 takes 參數類型|參數名字 returns 返回值類型
endfunction
當然,參數和返回值並不是必須的。如果這個函數並不學要參數和返回值,可以寫nothing
下面舉個基本的函數例子,計算兩個數的相加,並返回一個值:
function ADD takes real a,real b returns real
return a+b
endfunction
這個函數中大家看到takes後面跟了2個參數..分別是real型a和b,returns後面跟的是一個變數類型.這里是real
這里return的作用是返回值...需要注意的是return跟的表達式的類型 必須和函數申明裡的一樣..
比如這里需要的返回值是real,你就不能返回一個unit.
return還有一個作用就是結束函數.函數運行到這里..將直接退出..所以return一般是要寫在函數的結束處..
然後既然函數寫好了...那麼我們以後就可以直接調用它了,不必每次這些東西了..這個就是函數的優點
就以這個為例子
調用這個函數的時候,你需要給它2個參數,他便會返回這兩個參數的和..
調用函數用call作為關鍵字...
格式如下:
call 函數名字(參數)
這里要注意的是 參數 的個數和類型必須和定義的時候匹配
例子:
call ADD(1,2)
這個就是基本的函數調用方式.... 當然這個函數會返回一個實數值....這里會返回3...
這個返回值會隨著參數給的不同而不同.
以上應該很好理解吧
接下我們就利用CJ函數寫一個簡單的函數吧
這里有一個技巧..
就是CJ函數 如果你不能很好的記住的話...(其實不用刻意的去記憶..慢慢熟練以後,自然會記住..BLZ的函數命名是有一定規則的)
你可以用T寫出來後,轉化為J....(具體操作為在觸發窗口下 選擇 編輯--轉化為自定義腳本)
不過T中大部分都是BJ函數...
不過你可以用一些JASS編輯軟體..查看此函數...如果是BJ函數...你基本可以在函數過程中找到同樣功能的CJ函數(用某人的話來說就是BJ是閹割後的CJ)..不過要注意參數...
所以不要以英文不好來..給自己找借口了...
以下是一個例子:我們來做一個計算2個數的和並顯示到屏幕的函數(這么又是計算2個數的和啊....不要不耐煩...基礎很重要)
function ADD2 takes real a,real b returns nothing
local real c = a+b
call DisplayTextToPlayer( Player(0), 0, 0, R2S(c))
endfunction
這個函數中DisplayTextToPlayer便是一個CJ函數... 功能就是向指定玩家,指定屏幕坐標,顯示一個字元串...
其實這個函數里還有定義了一個c...(其實不要也可以,目的是為了讓大家看清楚)順便溫習一下局部變數的定義....
發現了吧...其實JASS很簡單...不比T難多少....
本節就到這里了
下一節中將會介紹..函數中的基本語法....
//======================強大的威城分割線=======================
</TD></TR></TBODY></TABLE>
w7272043872008-10-07 01:12 第二章 JASS 函數篇
第二節.函數中的基本語法
這一節中,我們會了解...一下..JASS中的運算符和判斷語句..
首先是算數運算符...(其實就和數學里的差不多..)
分別有 + - * / 這個很好理解..
當然一些特殊的運算..比如mod啊..不過這些都是由函數完成...
這個就不需要多做解釋了...
然後是邏輯運算符
這些運算符是用來判斷的...會返回true或者false
常用的有
<(大於) , <=(大於等於) , ==(等於) ,>(小於) , >=(小於等於) ,!=(不等於)
not(否定判斷)比如 not(a<0) 的意思就是如果a不是小於0的話...就返回true,否則返回false
and 用於連接兩個布爾表達式,判斷是否同時成立 比如 a<0 and b<0 意思是如果a<0 同時 b<0 此時返回true否則返回false
or 性質和and差不多..不過是判斷有一方成立 就返回true..都不成立 才返回false
這里就涉及到 if 語句
這個語句在JASS中作用很大
接下來就看看如果使用 if 語句
格式如下:
if (布爾表達式)then
//A
elseif(布爾表達式)then 或者 else
//B
endif
這個的意思是...
如果 if中的表達式成立..
則運行A
否則如果else中的表達式成立
運行B
如果是直接用else的話
就是
否則直接運行B
中間關鍵字有 if ,endif ,else,elseif
接下來看個函數..
function takes real a ,real b returns real
if (a>=b)then
return a-b
else
return b-a
endif
endfunction
這個函數,的功能其實就是一個簡單的計算兩個數差的絕對值...
這個很簡單大家自己體會下,就可以明白了...
我也不多說什麼了.....
然後換種方式
function takes real a ,real b returns real
if (a>=b)then
return a-b
endif
return b-a
endfunction
寫這個函數的目的是,說明return會結束函數..這個其實之前就說過了...這里溫習一下
其實if語句就這么簡單..但是功能強大
這一節就到這里了..... 我們下一節是重點...
要說到的是.....循環語句....不過真正的是要初次了解...強大的timer...
//===================強大的威城分割線==============================</TD></TR></TBODY></TABLE>
w7272043872008-10-07 01:17 第二章 JASS 函數篇
第三節.loop語句和timerstart初探
本節要學習的是循環語句..也就是loop語句
還有一個就是timerstart 雖然這個不能算是循環語句 但是在JASS中timerstart的使用比loop要普遍的多...
timerstart的功能也強大的多.
教程開始..我先出個題目..
之前我們不是看到過一個CJ函數么...
DisplayTextToPlayer(玩家,X坐標,Y坐標,字元串) 如果忘記了 請回到第二章 第一節去....
不過這個只能對一個玩家顯示....如果我要想所有玩家顯示...的話....怎麼辦到呢....
難道是..有多少玩家就寫多少句DisplayTextToPlayer么...顯然這很麻煩
沒錯 循環語句的作用就是來代替你做這些繁瑣的事情....
好了...接下來我們做這個函數
之後我會解釋下原理....
function A takes string s returns nothing
local integer n
loop
set n=n+1
call DisplayTextToPlayer(Player(n-1),0,0,s)
exitwhen (n==12)
endloop
endfunction
這個函數的功能是 向所有玩家...輸出一段字元串到屏幕
這個就是一個很簡單的....loop循環了
這樣使繁瑣的事情一下子就簡單了不少....
首先參數是一個字元串型的參數...
然後再創建一個n
為何時退出循環的判斷提供條件
好了之後就是loop了
進入循環後 就設置n=n+1
然後向(n-1)玩家顯示(為什麼是n-1呢..Player()函數中 Player(0)代表玩家1)
當n==12的時候
退出loop
這樣這個簡單的功能就實現了
好了如果你看懂了以上函數的話...
我們再來了解loop的書寫格式吧(其實是你估計已經知道了)
loop
//一些語句
exitwhen()
endloop
其實loop並不是這一個固定格式...exitwhen可以在前也可以在後....在前的話就是先判斷在做...在後就是先做在判斷....這個看你的具體情況了......
好了loop語句就介紹到這里了.....
不過loop並不是一個十分常用的語句...
原因在於....loop循環是瞬間完成的......如果你做一個技能....要一個單位向一個方向移位的話....用loop就做不出來
因為你的單位會在一瞬間完成這個動作....你會看不到移位的效果.....
有人會說 加一個等待呢......
但是這里不得不說到等待這個函數...就是TriggerSleepAction()這個函數...
這個函數的效率..和精度都慘不忍睹.....(原因是據說是TriggerSleepAction()所在的線程和觸發並不是一個線程...而且因為要到堆棧里讀取數據..所以效率和同步性很差)
也就是說loop+等待並不能完成這個事情....
而且等待這個函數最好不要去用...簡直是渣
所以這里就有了TimerStart()這函數,這個函數可以說是JASS中用的最多的函數了.....
所以我准備單獨拿出來說....
這一節中先說下他的用法....用它的注意點和難點 放到下一節單獨說了
這個函數分4個參數...分別 是 TimerStart(timer(計時器),real(時間),boolean(是否循環),code(函數))
作用是可以按照時間循環或非循環的運行某個函數...
例子:
function B takes nothing returns nothing
endfunction
function A takes nothing returns nothing
local timer t = CreateTimer()
TimerStart(t,0.01,true,function B)
set t =null
endfunction
這個就是 每0.01秒 運行B函數...
那麼這一章就結束了
具體的使用...
將在第三章中花一章時間概述
第三章還包括偉大的Returnbug和游戲緩存的運用
所以第三章才是最重要的地方..
//=====================分割線===================================
</TD></TR></TBODY></TABLE>
</TD></TR></TBODY></TABLE>
w7272043872008-10-07 01:50
㈡ cg是什麼
CG = Computer Graphics,電腦圖形,現在常用中文名稱為「西橘」,核心意思為數碼圖形。隨著時代發展,CG西橘的含義有所拓展,但是依然沒有超出這個核心意思[1]。國內CG類知名網站有CGFinal,國外的代表網站是CGTalk。
CG = computer-generated,數碼工藝品,數位效果,矢量圖形或僅是存於電腦的手繪圖等工藝。
CG = Charge Gate,移動通信系統中,GPRS核心網路的計費網關設備。
CG = Code Geass,見《Code Geass 反叛的魯路修》。
CG = center of gravity,重力中心。
CG = Chappeet Gessalin,1950s-1974的一家法國汽車製造商。
CG = Character generator,字幕機,一種廣播圖形系統闡述。
CG = Coast guard,海岸守衛。
CG = Community Games,社區游戲。
CG = Complete game,完全游戲。
CG = Conceptual Graph,概念圖。
CG = Configuration Guide,配置指導文件,當安裝軟體時用來說明詳細環境,包括系統要求和屬性等。
CG = Democratic Republic of the Congo,剛果民主共和國。
CG = CROSS GATE,網路游戲魔力寶貝的原始英文名稱。
Cg = C for Graphics是為GPU編程設計的高級繪制語言,由NVIDIA公司開發。Cg極力保留C語言的大部分語義,並讓開發者從硬體細節中解脫出來,Cg同時也有一個高級語言的其他好處,如代碼的易重用性,可讀性得到提高,編譯器代碼優化。
CG = 橙弓,WOW魔獸世界太陽井副本最終BOSS掉落的橙色物品的簡稱