Jass基础教程.docx

上传人:b****6 文档编号:5864596 上传时间:2023-01-01 格式:DOCX 页数:18 大小:142.01KB
下载 相关 举报
Jass基础教程.docx_第1页
第1页 / 共18页
Jass基础教程.docx_第2页
第2页 / 共18页
Jass基础教程.docx_第3页
第3页 / 共18页
Jass基础教程.docx_第4页
第4页 / 共18页
Jass基础教程.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

Jass基础教程.docx

《Jass基础教程.docx》由会员分享,可在线阅读,更多相关《Jass基础教程.docx(18页珍藏版)》请在冰豆网上搜索。

Jass基础教程.docx

Jass基础教程

JASS基础教程

■作者:

天零萃梦

■转载请注明本文出处:

本文假定您拥有WE触发器最基础的知识以及熟悉Windows的基本操作

■文中所用UI版本:

夜天新手助推器汉化UI)

例如只对某玩家播放音效,或者让某些华丽的技能支持多人释放等.

Jass可以定义局部变量以及自定义函数,增加设计的方便性.熟练使用Jass可以很好的提高效率,往往Jass几个输入字符就能完成的事情,GUI需要点选动作无数次才能做完.

GUI虽然可以完成几乎所有的功能,但是对于内存释放能力太差,转化成的Jass代码会执行许多额外的动作.用Jass可以写出比GUI效率更高的代码,可以更灵活和更有效率地控制地图运行

Jass的基本使用方法

在地图制作时,Jass的基本使用方法有3种

1.自定义脚本区编辑Jass(位置在触发编辑器左侧,触发器树的最顶端,左键点击地图名字即可进入)

2.触发器转换为代码后编辑Jass(选定触发器后,选择菜单->编辑->转化为自定义文本,确定后可将触发器转换为Jass代码)

3.在触发器中直接编辑Jass(使用动作->自定义代码动作来输入Jass)

一变量篇

变量是指在运行过程中随时可以发生变化的量,与其相对的是常量,但是在地图中不允许自定义常量,所以我们这里只说变量.

变量是数据的临时存放场所.在代码中可以只使用一个变量,也可以使用多个变量,变量中可以存放文字,数值,单位以及玩家等.由于变量让你能够把程序中准备使用的每一段数据都赋给一个简短,易于记忆的名字,因此它们十分有用.

变量分为全局变量和局部变量,全局变量是指在任何地方(任意触发器,任意函数中)都可以使用的变量,例如我们在触发器中创建的变量.而局部变量,则是仅仅在触发器(或函数)当前运行时才存在的变量.

创建全局变量只能在变量编辑器中设置.

变量的创建和使用方法

1.变量的命名规则

要使用变量,必须给变量取一个名字,就好像每个人都有自己的名字一样.

在JASS中,变量的命名必须遵循一下规则

1.变量名必须以字母开头,名字中间只能以字母,下划线”_”或数字组成,最后一个字符只可使用字母或数字

2.在作用范围内不可使用相同名字的变量

3.变量名不能与任何函数名字相同

4.变量名不能是Jass中保留的关键字(关键字详见附录2)

例如strName1intMax_LengthintLessonstrNo3等是合法的变量名,而A&Bright_3M_Number是非法的变量名

需要注意的是变量名是区分大小写的,也就是说,Jass不会认为“a”和“A”是同一种东西.

定义和使用变量时,通常要把变量名定义为容易使用阅读和能够描述所含数据用处的名称,而不要使用一些难懂的缩写如A或B2等.这样会增加理解的难度.

例如,要记录的数值是一个单位的生命值,可以写为unitLife或者danWeiShengMingZhi,这样仅仅通过变量名就能知道我们记录的是什么,增加阅读难度的话如果出现了BUG,需要排错时是很困难的.

2.变量的声明

在变量使用前,必须在代码中进行声明,即创建该变量.

在GUI中,我们可以使用变量编辑器来声明新变量

在这里声明的变量,是全局变量,这也是唯一声明全局变量的方法(在仅使用WE的前提下).

所以我们这里暂时不讲全局变量的声明,只用知道声明全局变量就在变量编辑器中创建就可以了

注:

为了区分全局变量和局部变量的名字,GUI自动在所有变量编辑器设置的全局变量名的前面都加了udg_前缀,因此图中的变量名实际为udg_unitLife

局部变量的声明格式为local<变量类型><变量名>

变量类型是用来区分变量储存的数据类型,比如用于储存单位,就要使用单位unit

注:

Jass中变量类型与WE中变量类型对照表见附录1

例:

localunittrigUnit

这样就声明了一个类型为单位的变量,变量名为trigUnit

另外变量的声明要求在所有其他动作的前面.例如:

localunittrigUnit

localunitdmgUnit

<动作>localunittrigUnit

localunitdmgUnit

<动作>

localunittargetUnit表达式执行的结果与变量类型要相同

例如声明一个变量trigUnit为触发单位

localunittrigUnit=GetTriggerUnit()

例如声明一个变量playerId为触发玩家索引号,另一个变量I为174(整数:

integer)

localintegerplayerId=GetConvertedPlayerId(GetTriggerPlayer())

localintegerI=174

3.变量的使用

声明完变量后,接下来就是如何使用变量的问题了.

对于任意变量通用的赋值操作符是“=”

它用于将后面的表达式计算后把结果赋予变量.

表达式得到的结果要求与变量类型相同

另外Jass要求,除初始化之外,对变量进行赋值时必须使用set关键字

格式为set<变量名>=<表达式>

例如:

localunittrigUnit

settrigUnit=GetTriggerUnit()

对于整数,实数来说,可以使用普通的计算符号来进行计算操作.

其中+-*/分别对应着加减乘除(另外–还表示负号)

例如

localintegera=1

seta=a+1

量操作举例:

变量的值互换

localintegera=3声明方法为local<类型名>array<变量名>3为整数而”jass2”是字符串,这些实际上是一些常量

Jass中规定带小数点的为实数小数点前后如果为0则可以省略,例如下列是正确的小数写法

.1234170.

不能把一个实数直接赋予一个整数变量,例如下面的写法是错误的

localintegerid=123.是一个实数

setid=

例如整数可以转换为实数,实数转为字符串,等等.其函数名列举如下:

R2S

实数转字符串

localstrings=R2S

S2R

字符串转实数

localrealr=S2R(“1.200”)

I2S

整数转字符串

localstrings=I2S(123)

S2I

字符串转整数

localintegerI=S2I(“345”)

I2R

整数转实数

localintegerr=I2R(1234)

R2I

实数转整数

localintegerI=R2I

注:

整数转实数时.I2R可省略例:

localrealr=3(隐式转换)

注:

在实数转整数时,小数点后的内容将被忽略例:

localintegerI=R2I

I的值将被设置为1

☆在计算时

如果同时出现实数和整数,那么结果为实数

例:

localintegeri=3*

其中逻辑操作符可以对条件进行操作,用以判断全部条件成立或者任意条件成立等复合条件

分支语句

1.if语句

在Jass中判断条件的格式为

if<条件表达式>then

<动作>

endif

其中条件表达式是结果为true(真)或false(假)的表达式,例如3>5的结果为false(假),如果表达式的值为true,则做在if与endif之间的动作

式为:

if<条件表达式>then

<动作1>

else

<动作2>

endif

当条件表达式的值为true时,执行动作1,当为false时执行动作2

请看下图的例子:

此触发器在游戏中显示:

a小于或等于b

a的值增加了3

a大于b

要注意的是与”大于”相反的是”小于或等于”

2.if-elseif语句

在if语句中,允许使用elseif来进一步进行条件的判断,格式如下

if<条件表达式1>then

<动作1>

elseif<条件表达式2>then

<动作2>

endif

等同于

if<条件表达式1>then

else

if<条件表达式2>then

endif

endif

要注意的是每一个if都要对应一个endif,但是elseif不用

3.if的嵌套

在if语句中,允许嵌套使用if,但要保证每个if都要有endif来配对

而且一个if语句不能分割其他的if语句

例如:

if5>3then

if3>2then

elseif3<5then

endif

else

if2>10then

endif

endif

这样是可以的

但是如果像下面这样,可能就会达不到想要的结果

if5>3then

if2<3then

endif

endif

这样人都看不懂--!

虽然没有语法错误.总之最好不要这样写啦..

注:

每一个if要与endif配套使用

if和elseif连接的条件表达式的最后要加then

逻辑操作符

逻辑操作符是对条件表达式进行操作的..也就是只能对true或false进行计算

逻辑操作符有3个,他们是andor和not

操作符

左边

右边

结果

and

true

true

true

true

false

false

false

true

false

false

false

false

or

true

true

true

true

false

true

false

true

true

false

false

false

not

-

false

true

-

true

false

简单的归纳为and为所有条件成立,or为任意条件成立,not是取反

例如:

ifnot(3>5or(2>1and5>4))then

endif

循环语句需要考虑的2个因素:

要哪些内容执行循环以及到什么时候循环停止

如果循环没有停止循环的条件,那么就会成为死循环(也就是永远到不了头),但是可以放心的一点是Jass中有操作数限制来避免死循环,当一个循环中操作数太大时,会自动中断循环,并且令动作中断.以防止死循环的发生.但我们仍要避免死循环..因为这会使循环体后的所有动作失效

循环语句的使用

循环语句的格式为

loop

<动作>

exitwhen<退出条件表达式>

endloop

其中exitwhen可以在任何地方,允许不加exitwhen或有多个exitwhen

循环体为loop与endloop之间的代码

当<退出条件表达式>成立时,则退出循环,并继续执行endloop后的语句

请看下图例子:

此触发器将在游戏中显示

1

2

3

4

5

6

7

8

9

10

可以看到显示a的值被重复执行了10次,a的初始值为1,每次执行后都会加1,在a>10也就是a等于11的时候循环结束

例2:

显示1-n的阶乘,并把它们储存在数组中

此触发器在游戏中显示为

1

2

6

24

120

720

5040

40320

362880

3628800

此触发的功能是显示从1到a_max的阶乘并把它们储存在数组中,这里a_max设置为10

(阶乘运算:

非负整数,0的阶乘是1,n的阶乘是1*2*3*….*(n-1)*n)

循环的嵌套

循环语句允许像if语句那样嵌套,要注意的是loop与endloop配对

请看下图例子:

此触发器在游戏中显示为

1

2

3

2

4

6

3

6

9

循环的注意事项

循环需要注意的就是确保条件能够成立

例如

localintegera=1

loop

<动作>

exitwhena>10

endloop

在这个循环里,a>10是不可能成立的,因为a的值始终是1,没有任何语句改变它.

四函数

将一段经常需要使用的代码封装起来,在需要使用时可以直接调用,这就是函数.

函数允许在调用时传递数据给函数体,然后可以返回一个数据给调用者.

我们平时用触发的时候,编辑各种触发动作,事实上也是在调用各个函数,GUI里的动作就是把经常用的一些功能封装起来,然后做成一条条的触发供我们使用

像触发单位,触发玩家等,这些动作,就是一些函数

localunitu=GetTriggerUnit()

所以我们无法在一个触发器动作里写函数(因为触发器动作本身就是一个函数)

编写函数的一般方法,是在地图的自定义脚本区或将触发器转为代码后编写(请温习前言部分Jass的基本使用方法).为了更直观,将在自定义脚本区编写Jass函数.

编写一个函数,要求得到两个整数的乘积

functionMtakesintegera,integerbreturnsinteger

returna*b

endfunction

因为整数与整数的乘积仍是整数,所以返回值为整数

return语句执行时,会先计算右边表达式的结果,然后返回该值

要注意的是区分return和returns,前者为返回(具体的值),后者为函数头中返回值类型

调用此函数来工作

首先将函数放到自定义代码区.

然后就可以在其他地方调用它了

需要注意的一点是,如果要调用函数,那么要保证该函数在调用者的前面

例如:

functionatakesnothingreturnsinteger

returnb()

过这些函数,我们可以对游戏进行操作.例如,创建单位,创建触发,设置单位生命,命令发布伤害等等.这些函数的大部分,已经被制作到了GUI中,我们可以使用动作,然后转换成代码来查看到这些函数的具体名字,当然最好的方法是下载Jass专用的编辑器.

使用CJ函数的方法与普通函数相同.例如

localunitu=GetTriggerUnit()

以上,就是JASS基础教程,所有JASS的基本语法已经包括在内.

由于编写仓促不免有疏漏,请与作者联系Email

 

五附录

附录一.关键字

typenativeglobalsendglobalslocalendfunctionfunctiontakesreturnsreturnsetcallendifelseififthenelseendlooploopexitwhenandornotarray

integerbooleanrealstringcodehandlenothingnullfalsetrueagenteventplayerwidgetunitdestructableitemabilitybuffforcegrouptriggertriggerconditiontriggeractiontimerlocationregionrectboolexprsoundconditionfuncfilterfuncunitpoolitempoolracealliancetyperacepreferencegamestateigamestatefgamestateplayerstateplayerscoreplayergameresultunitstateaidifficultyeventidgameeventplayereventplayeruniteventuniteventlimitopwidgeteventdialogeventunittypegamespeedgamedifficultygametypemapflagmapvisibilitymapsettingmapdensitymapcontrolplayerslotstatevolumegroupcamerafieldcamerasetupplayercolorplacementstartlocprioraritycontrolblendmodetexmapflagseffecteffecttypeweathereffectterraindeformationfogstatefogmodifierdialogbuttonquestquestitemdefeatconditiontimerdialogleaderboardmultiboardmultiboarditemtrackablegamecacheversionitemtypetexttagattacktypedamagetypeweapontypesoundtypelightningpathingtypeimageubersplathashtableconstant

附录二.WE与JASS变量类型对照

JASS变量名称GUITrigger变量名称说明

ability integer技能

aidifficulty integer对战AI难度

alliancetype integer盟友类型

attacktypeAttackType攻击类型

blendmode integer合成模式

booleanBoolean布尔

boolexpr integer布尔表达式

buff integer强化法术

buttonDialogButton对话框按钮

camerafield integer镜头区域

camerasetupCameraObject镜头物体

code integer程序代码

conditionfunc integer条件函数

defeatconditionDefeatCondition失败条件

destructableDestructible可破坏的

dialogDialog对话

dialogeventDialogButton对话事件

effectSpecialEffect特效

effecttype integer特效类型

event integer事件

eventid integer事件代码

fgamestate integer游戏状态(f)

filterfunc integer过滤函数

fogmodifierVisibilityModifier可见度

fogstateinteger可见状态

forcePlayerGroup玩者群组

gamecacheGameCache游戏暂存

gamedifficultyinteger游戏难度

gameevent integer游戏事件

gamespeedGameSpeed游戏速度

gamestate integer游戏状态

gametype integerv游戏类型

groupUnitGroup单位群组

handle integer句柄

igamestate integer游戏状态(I)

integerInteger整数

itemItem物品

itempool integer物品池

itemtypeItem-Class物品分类

leaderboardLeaderboard计分板

lightningLigntning线状特效

limitop integer比较

locationPoint点

mapcontrol integer玩家控制者

mapdensity integer地图密度

mapflag integer地图标记

mapsetting integer地图设置

mapvisibility integer地图可见性

multiboardMultiboard面板

multiboarditem integer面板项目

placement integer起始位置分布

playerPlayer玩者

playercolorPlayerColor玩者颜色

playerevent integer玩者事件

playergameresult integer玩者游戏结果

playerscore integer玩者得分

playerslotstate integer玩者槽状态

playerstate integer玩者属性

playerunitevent integer玩者单位事件

questQuest任务

questitemQuestRequirement任务要求

raceRace种族

racepreference integer种族优选

raritycontrol integer动画珍品

realReal实数

rectRegion矩形区域

region integer区域

soundSound音效

soundtypeSoundType声音类型

startlocprio integer起始位置优先权

stringString字符串

terraindeformationTerrainDeformation地形特效

texmapflags integer地图涂层标志

texttagFloatingText漂浮文字

timerTimer定时器

timerdialogTimerWindow定时器窗口

trackable integer可点选物件

triggerTrigger触发器

triggeraction integer触发器动作

triggercondition integer触发器条件

unitUnit单位

unitevent integer单位事件

unitpool integer单位池

unitstate integer单位属性

unittype integer单位分类

version integer版本

volumegroup integer音量频道

weapontypeCombatSound

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1