Jass基础教程
- 格式:doc
- 大小:776.55 KB
- 文档页数:46
jass eval函数Jass eval() 函数是在魔兽争霸地图制作中非常重要的函数之一,它可以让我们直接执行一段字符串代码,十分灵活、方便。
下面就详细介绍Jass eval() 函数的使用及其注意事项。
一、eval()的基本语法Jass eval() 函数语法结构如下:```eval(代码字符串)```代码字符串就是我们要执行的代码。
比如:```call BJDebugMsg("Hello, world.")eval("call BJDebugMsg(\"Hello, eval function.\")")```这两句等价,都会在游戏中输出 "Hello, world." 和 "Hello, eval function."。
二、eval()的使用eval() 函数可以执行任何Jass代码,只要它是合法的。
如果你想要在地图中保存一个整数变量,可以这样写:```globalsinteger myInt = 0endglobalscall BJDebugMsg("myInt is initially " + I2S(myInt))call BJDebugMsg("myInt is now " + I2S(myInt))```你也可以使用eval()函数直接操作其他变量、数组等等。
三、eval()的局限尽管eval()函数在魔兽地图制作中的应用非常广泛,但它也有一些限制。
eval()函数有时会不如直接调用函数快。
因为eval()函数需要在运行时编译代码,所以它的效率可能不如直接调用预编译好的函数。
所以,在处理大量数据时,最好只使用预编译好的函数。
eval()函数在某些情况下可能会是不安全的。
我们应该避免让玩家输入代码字符串,因为这可能会导致一些非预期的行为。
需要注意的是,只有对代码字符串进行严格的检查和过滤,才能安全地使用eval()函数。
jass中triggersleepaction()用法1. 引言1.1 概述本篇文章将会介绍Jass语言中的triggersleepaction()函数以及其用法。
triggersleepaction()是一个重要的函数,可以用来在Warcraft III地图制作中实现延时和睡眠效果。
在本文中,我们将详细探讨该函数的功能、参数说明、示例代码,并提供一些使用注意事项,以及应用实例分析。
1.2 文章结构本文共分为五个部分,每个部分都涵盖了不同的主题。
具体而言,第一部分是引言,对整篇文章进行概述和介绍。
第二部分将详细说明triggersleepaction()函数的功能和用法。
第三部分则会提供使用该函数时需要注意的事项和技巧。
第四部分将通过几个应用实例来展示如何灵活运用triggersleepaction()函数解决一些问题。
最后,在第五部分中,我们将对整篇文章进行总结,并展望一下未来可能的进一步研究方向。
1.3 目的撰写这篇文章的目的是帮助读者更好地理解和运用Jass语言中的triggersleepaction()函数。
通过深入讲解其功能、参数和示例代码,并指导如何避免滥用以及合理设置睡眠时间等注意事项,读者将能够更加高效地使用这个函数来实现延时和睡眠效果。
同时,通过应用实例的分析,读者也能够从不同的场景中寻找灵感和突破口,将这一函数应用到自己的地图制作中去。
希望本文能为广大Warcraft III地图制作者提供有价值的指导和帮助。
2. jass中triggersleepaction()用法:2.1 功能介绍:triggersleepaction()是JASS(Just Another Scripting Syntax)语言中的一个函数,它用于在Warcraft III地图编辑器中控制触发器延迟执行的时间。
通过使用该函数,我们可以实现一些需要经过一定时间后才能执行的操作,例如延时技能效果触发、单位行动间隔控制等。
A N S Y S 9.0基础教程与实例详解ANSYS 标准有限元分析过程分析任务分析目标No.1A N S Y S 9.0基础教程与实例详解§1 ANSYS 有限元求解的基本过程前处理器Preprocessor求解器Solution后处理器通用后处理器时间历程后处理器No.2A NS Y S 9.0基础教程与实例详解标准的ANSYS有限元分析过程一般包括以下四个步骤:1.ANSYS分析的开始准备工作2.建立模型3.施加载荷并求解4.查看分析结果No.3AN1.ANSYS分析的开始准备工作SYS9.0基础教程与实例详解No.4AN2.建立模型(前处理器:Preprocessor) SYS9.0基础教程与实例详解No.5A N S Y S 9.0基础教程与实例详解3.加载求解(求解器:Solution) 4.查看分析结果(后处理器)No.6No.7ANSYS9.0基础教程与实例详解一、清空数据库并开始一个新分析§2 执行ANSYS 分析的开始准备工作No.8ANSYS9.0基础教程与实例详解二、指定新的工作文件名(Jobname)ANSY工作文件名S9.0基础教程与实例详解No.9A N S Y S 9.0基础教程与实例详解三、指定新标题(Title)No.10A N S Y S 9.0基础教程与实例详解四、指定新的工作路径(工作目录)No.11A NS Y S 9.0基础教程与实例详解§3ANSYS 标准求解过程实例学习熟悉建立No.12A N S Y S 9.0基础程与实例详解No.13详解No.14A N S Y S 9.0基础教程与实例详解No.15A N S Y S Array 9.0基础教程与实例详解No.16A N S Y S 9.0解No.17A N S Y S 9.0基础教程与实例详解No.18A N S Y S 9.0础教程与实例详解No.19A N S Y S 9.0基础教程与实例详解No.20AN Array SYS9.0基础教程与实例详解No.21No.22A N S Y S 9.0基础教程与实例详解A N S Y S 9.0基础教程与实例详解No.23础教程与实例详解No.24A Array N S Y S 9.0基础教程与实例详解No.25A N S Y S 9.0基础教程与实例详解No.26A N S Y S 9.0基础教程与实例详解No.27A N S Y S 9.0基础教程与实例详解No.28A N S Y S 9.0基础教程与实例详解No.29A N S Y S 9.0基础教程与实例详解No.30解No.31A N S Y S 9.0基础教程与实例详解No.32A N S Y S 9.0基础教程与实例详解No.33A N S Y S Array 9.0基础教程与实例详解No.34A N S Y S 9.0基础教程与实例详解No.35A N S Y S 9.0基础教程与实例详解No.36A N S Y S 9.0基础教程与实例详解No.37A N S Y S 9.0基础教程与实例详解No.38A N S Y S 9.0基础教程与实例详解No.39A N S Y S 9.0基础教程与实例详解No.40A N S Y S 9.0基础教程与实例详解No.41A N S Y S 9.0基础教程与实例详解No.42A N S Y S 9.0基础教程与实例详解No.43No.44A N S Y S 9.0基础教程与实例详解No.45A N S Y S 9.0基础教程与实例详解A N S Y S 9.0基础教程与实例详解No.46A N S Y S 9.0基础教程与实例详解No.47A N S Y S 9.0基础教程与实例详解No.48A N S Y S 9.0基础教程与实例详解No.49A N S Y S 9.0基础教程与实例详解No.50。
魔兽争霸地图编辑器.AI制作AI脚本初级教程【什么是jass AI?】:jass AI是用纯jass编写的AI程序,可以用新建文本文档写或jass 工具编写.真三AI以及DOTA AI也是由AI脚本编写.【AI脚本使用方法】:①运行地图编辑器②打开你最爱的对战地图,将它以另外一个名字保存(最好放在另外一个文件夹里面)③按F12(或者点Modules(模块)菜单,然后选择Import manager(输入管理器))④在Import manager(输入管理器)中选择File ->Import file (文件 -> 输入文件)⑤选择刚刚建立好的**.ai.文件⑥鼠标右击已经导入的文件,选择Modify file properties(修改文件属性)⑦将文件的后缀名改为.ai◥【代码放置】:在文本文档中AI程序代码应如下放置+ Shingo Jass Highlighter 0.41globals// 这个放全局变量endglobalsfunction blabla takes blabla returns blabla// 自定义函数endfunctionfunction main takes nothing returns nothing//主程序在这Endfunction[教程] 用T编写简单的AI,让你的电脑变的强大起来 (菜鸟必看) 首先要知道一点,对于1般的RPG,对战的AI是没有用处的,如果加了对战AI,电脑就只会造房子出兵,显然这个是我们不需要的如果1个电脑单位没有任何AI,那么它就只拥有以下基本功能,对于旁边的敌人会主动的攻击,会自动放单体的杀伤魔法,(要说明的是,只会随便选择一个单位放技能,而没有针对性),敌人比较多的时候也会放群体的杀伤魔法,也会使用加血的技能和魔法,这些是不需要特殊的AI 的就可以办到的.电脑的没有AI的缺点有以下几点1,不会逃跑2,不会学习技能3.不会针对某个特别单位使用技能4,不会使用部分物品和特殊的技能^^^^^^我现在就把ORC3C电脑英雄的沉没的AI简单的给大家介绍一下基本的方法是这样一般的说,ORC的电脑的沉没对冽炎风暴,火焰雨,暴风雪等持续的魔法更有效基本的方法是这样:事件: 任意单位发动技能效果条件:满足任意的下面一个条件释放的技能是暴风雪释放的技能是火焰雨释放的技能是烈炎风暴释放的技能是 ^^^^^^^动作:选择触发单位为圆心范围800 满足条件(匹配的单位是英雄为 TRUE) (匹配单位控制者是电脑) (匹配单位是死亡为 FLASE) (匹配单位是是触发单位所有者的敌人为 TRUE) (匹配的单位所持有的沉没权仗是被持有的) 的单位做动作LOOP让选择的单位使用选择单位所持有的沉没权仗到触发单位的位置就可以实现AI的沉默效果,一定要加 (匹配单位控制者是电脑),否则玩家单位也会被强制使用物品下面偶在讲个DOTA的里面暗影萨满的多个技能连杀的T以暗影萨满11级的为例子枷锁 LV4 MP 185 闪电 LV4 MP 160 蛇棒LV2 350一个连招 3个魔法一共要消耗700点魔法假使撒满身上有风仗,魔法充足下面如下的写T触发1__________________________________________________________ 事件:任意单位被攻击条件:被攻击的单位是英雄为真被攻击的单位的生命值低于 70%被攻击的单位是攻击单位的敌人被攻击的单位是死亡为假动作: :设置变量 A= 被攻击的单位 //(为其他的T记录)选择触发单位为圆心范围800 满足条件 (匹配的单位的类型是暗影撒满为 TRUE) (匹配单位控制者是电脑) (匹配单位是死亡为 FLASE) (匹配单位是是触发单位所有者的敌人为 TRUE) (匹配的单位所持有的飓风权仗是被持有的) 的单位做动作LOOP让选择的单位使用选择单位所持有的飓风权仗到被攻击的单位设置变量 B= 选择的单位 //(为其他的T记录)命令 B 使用暗影猎手_毒蛇守卫到 A 所在的点开启触发器2开启触发器4触发2__________________________________________________________初始关闭事件:每0.2事件条件:动作:选择 A 为圆心范围200 满足条件(匹配的单位的类型是毒蛇守卫LV2 为 TRUE) (匹配单位控制者是电脑) (匹配单位是死亡为 FLASE) (匹配单位是是触发单位所有者的敌人为 TRUE) 的单位做动作LOOP命令选取的单位发布攻击到 A触发3__________________________________________________________ 事件:任意单位死亡条件:死亡的单位类型是毒蛇守卫LV2动作:关闭触发2触发4__________________________________________________________初始关闭事件:每0.2事件条件:动作:选择B 为圆心范围600 满足条件(匹配的单位的类型是暗影撒满为 TRUE) (匹配单位控制者是电脑) (匹配单位是死亡为 FLASE) (匹配单位是是触发单位所有者的敌人为 TRUE) 的单位做动作LOOP命令 B 发布人族龙鹰骑士_空中锁链到 A触发5__________________________________________________________ 事件:任意单位开始释放技能条件:释放的技能是枷锁动作:关闭触发4触发6__________________________________________________________ 事件:任意单位释放技能结束条件:释放的技能是枷锁动作:命令 B 发布中立那家海女巫_叉状闪电到 A命令 B 发布中立攻击到 A几个组合的T就可以让电脑使用出强大的组合技能,就就是基本T 做的AI下面的几页帖子在继续写其他的方面的AI 呵呵[教程] 如何创建一个魔兽RPG的AI系统(转)...从某地方挖出的如何创建一个魔兽RPG的AI系统作者:Blade.dk翻译:通魔作坊?onlyxuyang译文:这篇文章将帮助你制作一个简单但是十分酷的英雄对战地图的人工智能。
魔兽争霸3人工智能脚本(AI JASS)初级教程JASS与其他的面向流程性质的编程语言很类似,所以在阅读以下内容之前,首先应该对流程性质的编程以及TRIGGER JASS有着一定的了解。
了解JASS语言并有一定的基础之后,你将很快的了解AI JASS。
AI JASS的概念最主要的是理解AI线程(Threads)的概念。
线程是什么?线程就象TRIGGER的一个循环判断语句,线程会不停的判断在线程程序列表内所缺少的元素,并去按照线程的指令排放顺序去完成它。
就象碗中的饭,有即吃,有即吃,有即吃,Loop......为什么不用TRIGGER去完成电脑的人工智能呢?由于使用TRIGGER相比之下可能会消耗大量的内存,所以,最好用AI线程来完成电脑的人工智能。
注意:线程只针对单个玩家进行运作。
AI的类型(Melee AI 和Campaign AI )Melee AI 对战AI基本上完全可以利用WORLDEDITOR自带的AI编辑器(AI Edior)完成Campaign AI 战役AI(即“非对战AI”),可以详细了解以下内容即可制作一般常用的战役AI注:战役AI的用途十分广泛,完全可以利用其制作生存,3C,TD等类型的地图,并且免除了不停使用TRIGGER创造单位所带来的内存泄露。
线程(Threads)和触发器(Trigger)的区别AI脚本只能使用JASS函数库mon.j和mon.ai中的函数和量Trigger脚本只能使用mon.j和Blizzard.j中的函数和量线程只应用于AI脚本(AI JASS), 不能用于触发器脚本(Trigger Jass)触发器只应用用于触发器脚本(Trigger Jass),不能用于AI脚本(AI JASS)通常, 当AI脚本开始运行时只创建一个线程, 创建更多的线程可以用man.j的本地函数: native StartThread takes code func returns nothing运行方式的区别在于线程一旦开启即可自动运转,触发器必须调用或者借助事件的发生才可以运行。
声明:有一定T基础的人完全可以在10分钟之内基本掌握该jass教程,夯实基础后要继续深入学习和研究请去高级讨论区查阅有关资料。
摒弃传统教学的特点,直击重点、深入浅出,即使是毫无程序基础的人也能在很短的时间内迅速掌握。
本教程不打算与其他语言挂钩,不论原因为何,基于让人们迅速掌握和理解该语言的初衷,因此采用最有效最通俗的手法去阐述该语言。
关于jass是什么以及为什么要学习等内容,就不再赘述。
——————————————————————————————————一、初识jass1、概览(5秒)关于jass,只要知道2个内容即可:变量和函数。
╔═══╦════════════════════════╗║变量║存储数据,重点熟悉和掌握全局和局域变量║╠═══╬════════════════════════╣║函数║执行功能,了解函数的结构、生成和运行等║╚═══╩════════════════════════╝2、详解(2分20秒)(1)、变量和函数声明格式如下:———————————————————————————a、全局变量的声明:globals变量类型变量名( = 初始值) //括号表示不赋值亦可,下同变量类型array 数组名//数组不可直接赋值,需在函数内逐个赋值endglobalsb、函数和局域变量的声明:function 函数名takes 参数列表returns 返回值类型local 变量类型变量名( = 初始值)......执行语句......return 返回值endfunction———————————————————————————(2)、全局与局域变量的区别:全局任何函数皆可用,局域只作用于所声明的函数。
不同函数的局域变量命名可相同,最好不要与全局和参数名相同。
全局占用内存大,执行速率快,全局则反之。
触发中,属性变量诸如触发单位、循环整数A、最后创建的单位、新建的单位组等均是全局变量。
jass哈希(hash)表函数JASS(Just Another Scripting Syntax)是一种用于Warcraft III的脚本语言,它是用于开发自定义游戏和地图的一种工具。
在JASS 中,没有直接提供哈希表(hash table)的内置函数,但是可以通过使用数组和结构体的方式来模拟实现类似的功能。
下面是一个简单的示例代码,展示了如何使用结构体和数组来实现一个简单的哈希表:// 定义结构体来表示哈希表的键值对struct HashEntryinteger keyinteger valueendstruct// 定义一个数组来表示哈希表HashEntry hashtable[10]// 初始化哈希表function InitHashTable takes nothing returns nothing local integer i// 将哈希表的所有元素初始化为0set i = 0loopexitwhen i >= 10set hashtable[i].key = 0set hashtable[i].value = 0set i = i + 1endloopendfunction// 向哈希表中插入键值对function InsertIntoHashTable takes integer key, integer value returns nothing local integer hash// 计算哈希值set hash = key % 10// 如果该位置已经被占用,则线性探测找到下一个可用位置while hashtable[hash].key > 0set hash = (hash + 1) % 10endwhile// 插入键值对set hashtable[hash].key = keyset hashtable[hash].value = valueendfunction// 从哈希表中根据键查找对应的值function GetFromHashTable takes integer key returns integerlocal integer hash// 计算哈希值set hash = key % 10// 如果该位置的键不是目标键,则线性探测找到下一个位置while hashtable[hash].key != key// 如果该位置为空,则返回默认值0if hashtable[hash].key == 0 thenreturn 0endifset hash = (hash + 1) % 10endwhile// 返回对应键的值return hashtable[hash].valueendfunction// 使用示例function UseHashTableExample takes nothing returns nothinglocal integer key = 5local integer value = 10// 初始化哈希表call InitHashTable()// 插入键值对call InsertIntoHashTable(key, value)// 根据键从哈希表中获取对应的值set value = GetFromHashTable(key)// 输出值call BJDebugMsg("Value: "+ I2S(value))endfunction上述代码演示了如何使用结构体和数组来实现一个简单的哈希表。
function一、变量1.什么是变量变量是存放的是实质的东西,并且因存放的东西不同而分类不同:有单位、区域、触发器等变量——这样说吧,就像容器,放水的叫杯,盛饭的叫碗,装屎的叫马桶。
因分类不同,所以你不能让一个变量储存与它类型不同的东西,譬如你不能用单位变量来保存地图上一个区域,就像你不能用马桶给客人盛饭。
2.不同变量类型的转换虽说变量不能储存与它类型不同的东西,但变量的类型,其实是可以改变的。
我们在T 里,看到―将一个整数转换成实数‖,―将一个整数转换成字符窜‖等等;WE里提供了三种变量类型之间的自由转换——整数,实数,字符窜;就像我们可以用杯子装饭,拿碗装水一样。
不知不觉便说到我们的周星星同学了,因为有人看到他居然拿马桶吃饭;这是怎么回事?原来有个Return Bug,利用系统漏洞可以实现任意两个变量类型之间的转换。
由于周星星是个特工,他的皮鞋,其实是吹风机,他的电话,还是吹风机,也就是说,由于职业需要,他把他的东西做了改装,以麻痹敌人。
所以,他拿的马桶也不是真的马桶,那其实是个饭盒,外观像马桶而已。
所以当周星星拿着马桶去厕所,别人以为他是去便便,其实他是去吃饭。
关于Return Bug,将在后面着重单独列出来讲。
3.全局变量与局部变量变量是容器,这里我们拿杯子来说明全局变量与局部变量的区别。
全局变量就像一个玻璃杯,不可能两个人同时使用,使用完下次可继续使用;局部变量则像一叠一次性纸杯,同时可以满足很多任何水的需要,并且使用完纸杯就丢掉,即便你有Sars也不怕传染给别人。
一般而言,由于程序在执行时,速度很快,因此多个T使用同一个全局变量,出错的概率很小;但,一旦T里有等待,情况就不妙了。
就像用杯子喝水,如果你是一口气把水喝完,然后把杯子放回原处给下一个人用,没什么问题;但如果你喝一小口,歇半天,再喝下一口,就出问题了——如果这时,另外有人也要用这杯子,那么,你跟他将轮流喝杯子里的水——很有断臂山的感觉。
jass教程本⽂针对Jass基础=0的各种不想学习Jass 的地图制作者⽽写, 看完本⽂后, 我保证jass对你来说仍然是⼀个未知的⼴阔世界,但是看完本⽂后,你⼀定能够熟练的使⽤timer和hashtable,配合简单的vjass来做你想要的⼤部分东西,我不能保证你对Jass了解多么深⼊,这不是我的⽬的,我可以保证你们⼀定能够通过本⽂,最快的学会Jass中最简易⽽实⽤的⼯具⽅便我们作图. ⾼深的Jass知识请去各⼤论坛查阅相关的Jass教程.Hashtable 属于1.24新的⼯具,如果你使⽤1.24b以上版本制作地图,本⽂hashtable部分将对你有⽤。
如果你使⽤1.20~1.23版本作图,那么本⽂你可以忽略第四章hashtable的部分,但是你需要寻找gamecache/ return bug的教程,因为gamecache/ return bug是适合于1.23以下版本作图的⼯具,⽽不兼容hashtable. 反之,hashtable是1.24以上的⼯具,不兼容gamecache/ return bug, 这就回答了为什么很多1.24的地图和1.20不能互相并存的原因了。
当然,你可以使⽤YDWE开发者提供的更强⼤的YD功能, 具体去看相关帖⼦,我这⾥只说最普通情况下的作图⽅式⽽已.由于我的⽔平实在有限,对j的了解也只是初涉⽪⽑, 不⾜之处还请见谅和指正⽬录引⾔ 0楼前奏:⾄上的拿来主义 0楼第⼀章: 从Vjass的全局变量开始0楼第⼆章: 了解⼀下function 0楼第三章: Timer的使⽤ 7楼点击查看第四章: 1.24b以上的Hashtable哈希表的简易使⽤⽅法 8楼到9楼点击查看其他: 让vjass的library为我们开路9楼点击查看---------------------------------------------------------------------------------------------引⾔---------------------------------------------------------------------------------------------想写⼀些关于Jass的感⾔,u9也好,地精研究院也好,Jass教程都⽆数多,虽然星际2近在咫尺,但是我依然坚信,只要星际2⼀天不出破解,⼀天不⽀持局域⽹,就只能是⼀个曲⾼和寡的游戏罢了,魔兽风采依旧魔兽风采仍在。
Greedwind教学Jass基础教程一这个教程假设你已经比较熟练地使用Trigger并有一定的逻辑基础和程序设计基础, Knowning engish is preferable首先问个问题: 为什么要学JASS?先看下面的例子:以下例子可以实现在单位死亡的位置显示5秒的死亡信息(漂浮文字)后并清除死亡信息吗?例子:Events:A unit diesConditions:Actions:-Floating Text - Create floating text at ((position of (Triggering Unit))with the message (("A "+(name of (Triggering Unit))) + " dies") with size 20 , red 100, green 100, blue 0, alpha 100.-Wait 5.00 seconds-Destroy (last created floating text)象以上例子, 如果不使用用局部变量, 将无法准确销毁临时漂浮文字. 因为在等待5秒后(-Wait 5.00 seconds), 最近创建的漂浮文字(last created floating text)可能已经不是原来的那个了!) 要达到目的, 必须对JASS有些了解. 教程将对此TRIGGER作进一步的分析.jass基础教程之变量篇学新的程序设计语言, 要先学它的变量类型.首先提醒大家: Jass2是区分大小写的, 如ABcd和ABCD是不一样的.Jass2 变量类型变量相当于物件的储存箱子, JASS2很多的变量类型只是个指针(变量地址).使用变量前必须要首先声明变量类型和变量名称.看个简单的例子:local string my1stvar //声明1个字符型局部变量, 起名为my1stvarset my1stvar = "GreedWind" //把"GreedWind"赋值给变量my1stvar以后的程序中就可以直接引用/重新赋值my1stvar变量(除了数组变量)可以在声明语句中初始化, 上面可以简化成:local string my1stvar = "GreedWind" //声明字符型局部变量my1stvar并赋值为"GreedWind"JASS2有哪些变量类型呢?我们用WORLD EDITOR和Jass2变量类型做对照便一目了然了WORLD EDITOR和JASS变量类型对照表:World Editor 变量名Jass变量类型Boolean boolean 布尔型(用于真/假判断)Destructible destructable 可破坏物Dialog dialog 对话Dialog Button button 按钮Floating Text texttag 漂浮文字Integer integer 数值Item item 物品Leaderboard leaderboard 排行榜Player player 玩家Player Group force 玩家组Point location 位置(点)Real real 真值型数字Region rect 地区Special Effect effect 特效String string 字符串Terrain Deformation terraindeformation 地形Timer timer 计时器Timer Window timerdialog 计时器窗口Unit unit 单位Unit Group group 单位组Player Score playerscore 积分(1.13版新类型)World Editor中的Order(命令) , Ability(技能) , Unit Type(单位类型), Destructible type(可破坏物类型) 和 Item type(物品类型) 在JASS中对应的变量类型实际上是integer。
可以用单引号'Xxxx'(Xxxx为在World Editor用View as raw data(以行数据查看)中看到的代码)表示这些类型的值Jass基本变量类型integerinteger(数值)是的范围在 -2147483648 和 2147483647 之间的整数, 不能有小数位在Jass中Integer的几中特殊形式:1.'xxxx' 单引号加字符形式,该形式为256进制整数,每个字符代表其AscII码值,区分大小写,一般用来表示单位、物品、技能等代码。
比如对战单位里剑圣的代码是 'Obla'(在物编中按Ctrl+D可以看到)2.0xxx 8进制数字,首位为0表示8进制数字3.0Xaa 16进制数字,以0x开头的表示16进制数字realreal是范围很大的32字节数字, 可以有小数位, 123456.33就是real小数点前或后是0的话,可以省略这个0;比如0.34=.34 4.0=4. 0.0可以写成0.或.0,但不能都省略booleanboolean的值只有true(真)和false(假), 多用于条件判断语句if (条件==true)then(符合条件做某事)else(不符合条件就做另一件事)endifstringstring是字符串变量, 可以是null(空值). 注意Jass的字符串是大小写区分的, 赋值时用双引号 "" 引用handlehandle句柄, 可以是null(空值). 是用于指向Warcraft III定义的数据结构的指针. 比如上表中的location/player等除了integer/real/boean/string外的的变量实际上就是handle类型的子变量codecode(程序代码), 可以是null(空值). 函数可以有code类型的传递参数, 表示该函数必须要有其他函数作为参数, 如:function RunFunctionForAllPlayers takes code theFunction returns nothing我们可以这样调用函数: call RunFunctionForAllPlayers(function someFunction) //先运行someFunction也可以: call RunFunctionForAllPlayers(null) //不运行其他函数用户定义变量类型正如上面所说, 上表中location/player等除了integer/real/boean/string外的类型实际上就是handle类型的子类型, 这些变量就是用户类型变量, 实际就是一个数据结构的指针.数组是指一组同类型的有序列的变量. 数组中包含的元素可以用[n]来指明(n 表示第n + 1个元素, 从 0 算起).以上所说的变量类型中除了code类型, 其他类型的变量都可以定义数组变量, 如locate integer array dropitemsset dropitems[0] = 'Xxxx'......set dropitems[18] = 'Xbbb'dropitems[18]指dropitems中第19个变量.注意:1) 数组所有元素初始值是"空", 比如integer类型的数组初始值为0, handle类型初始值的为null2) 数组不能直接再次初始化, 只能数组按元素赋值, 如:locate string array playername = "Greedwind" //数组非法赋值locate string array playername //数组元素只能逐个赋值set playername[1] = "Greedwind"set playername[2] = "Greedwind's girlfriend"unit array myUnitsunit array yourUnits...set myUnits = yourUnits // 非法set myUnits[0] = yourUnits[10] // 合法3) 数组在函数间不能互相传递. 即是不能把数组作为函数参数, 而且函数也不能返回数组类型的变量.4) 数组元素域在 0 和JASS_MAX_ARRAY_SIZE = 8192 之间, 即是最多有JASS_MAX_ARRAY_SIZE + 1 个元素. JASS_MAX_ARRAY_SIZE是在common.j中定义的常数有问有答1)什么是全局变量和局部变量, 怎样声明和使用变量?首先要了解, 从作用范围来区分, 变量有全局变量和局部变量.全局变量作用于Jass程序的全部分, 即是如果全局变量abc在某个函数中改变了值, 这个值也将影响其他引用了abc变量的函数.全局变量声明格式:globals变量类型变量名称 = 初始值 //有初始化的全局变量变量类型变量名称 //无初始化的全局变量变量类型 array 变量名称 //数组全局变量, 不能再次初始化赋值...endglobals局部变量只作用于函数内部, 即是如果在函数内部定义了局部变量abc, abc的值只影响该函数内部, 不影响全局变量abc的值.局部变量声明格式:local 变量类型变量名称 = 初始值 //有初始化的局部变量local 变量类型变量名称 //无初始化的局部变量local 变量类型 array 变量名称 //数组局部变量, 不能再次初始化赋值注意:1) 不论是全局变量还是局部变量, 必须在程序开始部分首先声明.即是全局变量声明总是在程序文件的最前端,而局部变量声明总是在函数的最前面.2) 在Trigger Editor用变量管理器(Ctrl + B)中定义的变量都是全局变量3) 在Trigger Editor的循环GUI语句 For Loop (Integer A)和For Loop (Integer B)中的(IntegerA)(Integer B)都是全局变量实例:globalsinteger abc = 5188endglobals.......function myfunc1 takes nothing returns nothinglocal integer abcset abc = 1233endfunctionfunction myfunc1 takes nothing returns nothinglocal integer myintset myint = abcset abc = 0endfunction如果按顺序调用函数myfunc1 和 myfunc1, 那么在函数myfunc2中的myint的值是多少呢, abc最终值又是多少?答案是: int = 5188, abc 最终值为 02)怎样在Trigger Editor(GUI)中使用局部变量?(有关在Trigger Editor(GUI)中使用局部变量详细方法请参看我的签名中的链接 - 3c的内存泄漏)GUI中不能直接引用局部变量,但是我们可以使用全局变量作为中介首先声明定义变量类型。