Jass基础教程Word文档格式.docx
《Jass基础教程Word文档格式.docx》由会员分享,可在线阅读,更多相关《Jass基础教程Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
2.变量的声明
在变量使用前,必须在代码中进行声明,即创建该变量.
在GUI中,我们可以使用变量编辑器来声明新变量
在这里声明的变量,是全局变量,这也是唯一声明全局变量的方法(在仅使用WE的前提下).
所以我们这里暂时不讲全局变量的声明,只用知道声明全局变量就在变量编辑器中创建就可以了
注:
为了区分全局变量和局部变量的名字,GUI自动在所有变量编辑器设置的全局变量名的前面都加了udg_前缀,因此图中的变量名实际为udg_unitLife
局部变量的声明格式为local<
变量类型>
<
变量名>
变量类型是用来区分变量储存的数据类型,比如用于储存单位,就要使用单位unit
Jass中变量类型与WE中变量类型对照表见附录1
例:
localunittrigUnit
这样就声明了一个类型为单位的变量,变量名为trigUnit
另外变量的声明要求在所有其他动作的前面.例如:
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之间的动作
式为:
动作1>
else
动作2>
当条件表达式的值为true时,执行动作1,当为false时执行动作2
请看下图的例子:
此触发器在游戏中显示:
a小于或等于b
a的值增加了3
a大于b
要注意的是与”大于”相反的是”小于或等于”
2.if-elseif语句
在if语句中,允许使用elseif来进一步进行条件的判断,格式如下
条件表达式1>
elseif<
条件表达式2>
等同于
if<
endif
要注意的是每一个if都要对应一个endif,但是elseif不用
3.if的嵌套
在if语句中,允许嵌套使用if,但要保证每个if都要有endif来配对
而且一个if语句不能分割其他的if语句
例如:
if5>
3then
if3>
2then
elseif3<
5then
if2>
10then
这样是可以的
但是如果像下面这样,可能就会达不到想要的结果
if2<
3then
这样人都看不懂--!
虽然没有语法错误.总之最好不要这样写啦..
注:
每一个if要与endif配套使用
if和elseif连接的条件表达式的最后要加then
逻辑操作符
逻辑操作符是对条件表达式进行操作的..也就是只能对true或false进行计算
逻辑操作符有3个,他们是andor和not
操作符
左边
右边
结果
and
true
false
or
not
-
true
简单的归纳为and为所有条件成立,or为任意条件成立,not是取反
例如:
ifnot(3>
5or(2>
1and5>
4))then
循环语句需要考虑的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配对
请看下图例子:
3
4
9
循环的注意事项
循环需要注意的就是确保条件能够成立
loop
exitwhena>
endloop
在这个循环里,a>
10是不可能成立的,因为a的值始终是1,没有任何语句改变它.
四函数
将一段经常需要使用的代码封装起来,在需要使用时可以直接调用,这就是函数.
函数允许在调用时传递数据给函数体,然后可以返回一个数据给调用者.
我们平时用触发的时候,编辑各种触发动作,事实上也是在调用各个函数,GUI里的动作就是把经常用的一些功能封装起来,然后做成一条条的触发供我们使用
像触发单位,触发玩家等,这些动作,就是一些函数
localunitu=GetTriggerUnit()
所以我们无法在一个触发器动作里写函数(因为触发器动作本身就是一个函数)
编写函数的一般方法,是在地图的自定义脚本区或将触发器转为代码后编写(请温习前言部分Jass的基本使用方法).为了更直观,将在自定义脚本区编写Jass函数.
编写一个函数,要求得到两个整数的乘积
functionMtakesintegera,integerbreturnsinteger
returna*b
endfunction
因为整数与整数的乘积仍是整数,所以返回值为整数
return语句执行时,会先计算右边表达式的结果,然后返回该值
要注意的是区分return和returns,前者为返回(具体的值),后者为函数头中返回值类型
调用此函数来工作
首先将函数放到自定义代码区.
然后就可以在其他地方调用它了
需要注意的一点是,如果要调用函数,那么要保证该函数在调用者的前面
例如:
functionatakesnothingreturnsinteger
returnb()
过这些函数,我们可以对游戏进行操作.例如,创建单位,创建触发,设置单位生命,命令发布伤害等等.这些函数的大部分,已经被制作到了GUI中,我们可以使用动作,然后转换成代码来查看到这些函数的具体名字,当然最好的方法是下载Jass专用的编辑器.
使用CJ函数的方法与普通函数相同.例如
以上,就是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