• QQ21031394

    工作时间

    周一至周五:9:30-18:30

    周末及节日:根据情况调休

  • 手机版二维码

    随时手机查素材

  • 扫描二维码

    加入官方QQ群

站长推荐
气息 二级会员
  • 未知地域
  • 348发帖数
  • 54主题数
  • 0关注数
  • 17粉丝

jass变量教程篇

[复制链接]
气息 发表于 2018-9-30 19:04:53 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题 <
提莫作坊QQ群:提莫作坊www.tbwlm.cn

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 fakeyou 于 2018-9-30 22:11 编辑

作者:Greedwind

  学新的程序设计语言, 要先学它的变量类型.

  首先提醒大家: Jass2是区分大小写的, 如ABcd和ABCD是不一样的.

  Jass2 变量类型

  变量相当于物件的储存箱子, JASS2很多的变量类型只是个指针(变量地址).

  使用变量前必须要首先声明变量类型和变量名称.

  看个简单的例子:

  local string my1stvar //声明1个字符型局部变量, 起名为my1stvar

  set 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版新类型)
----------------------------------------------------------------------
----------------见下楼---------------------附加一张演示图    翻楼查看
楼主热帖
免责条款:本站仅提供学习的平台,所有资料均来自于网络,版权归原创者所有!本站不提供任何保证,并不承担任何法律责任,如果对您的版权或者利益造成损害,请提供相应的资质证明,我们将于3个工作日内予以删除。

本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。本站部分作品是由网友自主投稿和发布、编辑整理上传,对此类作品本站仅提供交流平台,不为其版权负责。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。

本网站所提供的信息,只供参考之用。本网站不保证信息的准确性、有效性、及时性和完整性。本网站及其雇员一概毋须以任何方式就任何信息传递或传送的失误、不准确或错误,对用户或任何其他人士负任何直接或间接责任。在法律允许的范围内,本网站在此声明,不承担用户或任何人士就使用或未能使用本网站所提供的信息或任何链接所引致的任何直接、间接、附带、从属、特殊、惩罚性或惩戒性的损害赔偿。

精彩评论6

 楼主| 气息 发表于 2018-9-30 19:05:28 | 显示全部楼层 <
----------------------------------------------------------------------
  World Editor中的Order(命令) , Ability(技能) , Unit Type(单位类型), Destructible type(可破坏物类型) 和 Item type(物品类型) 在JASS中对应的变量类型实际上是integer。
  可以用单引号'Xxxx'(Xxxx为在World Editor用View as raw data(以行数据查看)中看到的代码)表示这些类型的值

  Jass基本变量类型

  integer

  integer(数值)是的范围在 -2147483648 和 2147483647 之间的整数, 不能有小数位

  在Jass中Integer的几中特殊形式:

  1.'xxxx' 单引号加字符形式,该形式为256进制整数,每个字符代表其AscII码值,区分大小写,一般用来表示单位、物品、技能等代码。比如对战单位里剑圣的代码是 'Obla'(在物编中按Ctrl+D可以看到)

  2.0xxx 8进制数字,首位为0表示8进制数字

  3.0Xaa 16进制数字,以0x开头的表示16进制数字

  real

  real是范围很大的32字节数字, 可以有小数位, 123456.33就是real

  小数点前或后是0的话,可以省略这个0;比如0.34=.34 4.0=4. 0.0可以写成0.或.0,但不能都省略

  boolean

  boolean的值只有true(真)和false(假), 多用于条件判断语句

  if (条件==true)

  then

  (符合条件做某事)

  else

  (不符合条件就做另一件事)

  endif

  string

  string是字符串变量, 可以是null(空值). 注意Jass的字符串是大小写区分的, 赋值时用双引号 "" 引用

  handle

  handle句柄, 可以是null(空值). 是用于指向Warcraft III定义的数据结构的指针. 比如上表中的location/player等除了integer/real/boean/string外的的变量实际上就是handle类型的子变量

  code

  code(程序代码), 可以是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 dropitems

  set dropitems[0] = 'Xxxx'

  ......

  set dropitems[18] = 'Xbbb'

  dropitems[18]指dropitems中第19个变量.

  注意:

  1) 数组所有元素初始值是"空", 比如integer类型的数组初始值为0, handle类型初始值的为null

  2) 数组不能直接再次初始化, 只能数组按元素赋值, 如:

  locate string array playername = "Greedwind" //数组非法赋值

  locate string array playername //数组元素只能逐个赋值

  set playername[1] = "Greedwind"

  set playername[2] = "Greedwind's girlfriend"

  unit array myUnits

  unit 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)中的(Integer A)(Integer B)都是全局变量

  实例:

  globals

  integer abc = 5188

  endglobals

  .......

  function myfunc1 takes nothing returns nothing

  local integer abc

  set abc = 1233

  endfunction

  function myfunc1 takes nothing returns nothing

  local integer myint

  set myint = abc

  set abc = 0

  endfunction

  如果按顺序调用函数myfunc1 和 myfunc1, 那么在函数myfunc2中的myint的值是多少呢, abc最终值又是多少?

  答案是: int = 5188, abc 最终值为 0

  2)怎样在Trigger Editor(GUI)中使用局部变量?

  (有关在Trigger Editor(GUI)中使用局部变量详细方法请参看我的签名中的链接 - 3c的内存泄漏)

  GUI中不能直接引用局部变量,但是我们可以使用全局变量作为中介

  首先声明定义变量类型。声明定义变量类型的语句只能放在TIGGER的开头,不然会出现编译错误

  声明定义变量类型:

  要用:Custom Script - Action

  语法:

  Custom Script: local <变量类型> <变量名>

  变量类型请参看WORLD EDITOR和JASS变量类型对应表

  例如:

  --单位变量

  Custom Script: local unit u

  --单位组变量

  Custom Script: local group g

  然后将它们赋值给临时全局变量就可以在GUI里调用该值了,注意全局变量要加前缀"udg_"

  Custom Script: set udg_TempUnit=u

  局部变量的使用:

  在变量表(Control + B)中先定义好同类型临时变量(不要加前缀udg_)的变量,该变量可以在多个触发里重复利用

  (在变量表中定义此变量是为了方便TIGGER EDITOR引用该变量。)

  以下例子实现了在单位死亡的位置显示5秒的死亡信息(漂浮文字)

  (象这种例子, 如果不使用用局部变量, 将无法准确销毁临时漂浮文字(-Destroy (diesmessage)). 因为在等待5秒后(-Wait 5.00 seconds), 最近创建的漂浮文字(last created floating text)可能已经不是原来的那个了 )

  例子:

  Events:

  A unit dies

  Conditions:

  Actions:

  -Custom Script: local texttag diesmessage

  -Custom Script: set udg_TempTextTag = diesmessage //注意要添加"udg_"前缀

  -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.

  -Set TempTextTag= (last created floating text)

  -Wait 5.00 seconds

  -Custom Script: set udg_TempTextTag = diesmessage

  -Destroy (TempTextTag)

  注意:不要利用同名覆盖的方法在GUI中使用局部变量!(即以udg_开头的局部变量与已定义全局变量名字相同)

  该方法在触发内该类同名变量数量>=2时会出现严重Bug!

PS:文件来自搬砖蝼蚁
 楼主| 气息 发表于 2018-9-30 19:06:26 | 显示全部楼层 <
自顶二楼
 楼主| 气息 发表于 2018-9-30 22:17:19 | 显示全部楼层 <
一个jass自定义代码的简单引用..................
2(DD2%[KMI0VW}@LYE_ZR95.png
爷傲灬奈爷何 发表于 2019-5-6 16:03:53 | 显示全部楼层 <
楼主发贴辛苦了,谢谢楼主分享!我觉得提百万联盟是注册对了!
[发帖际遇]: 一个蘑菇砸在了 爷傲灬奈爷何 头上,爷傲灬奈爷何 赚了 5 枚 绿钻. 幸运榜 / 衰神榜
创世神 发表于 2019-11-20 00:03:33 | 显示全部楼层 <

这东西我收了!谢谢楼主!天工社区真好!
亦真亦假皆为常世之梦
黑色死神 发表于 2020-3-19 23:12:37 | 显示全部楼层 <

感谢楼主的无私分享!要想天工社区好 就靠你我他

强调下版规的规定,如有恶意灌水从重处罚:
=====发表主题规则=======
1.主题内容请一定要附带预览图片,谢谢;
2.搬运来的东西请尽量不要卖钱!;
3.发帖有任何疑问请联系QQ21031394;
=====发表回复规则=======
1.禁止直接复制标题内容的;
2.禁止纯数字或者纯字母的;
3.禁止乱打一通文不对题;
4.禁止屠版和刷分行为;
第一次扣分处理,第二次扣分+警告,警告三次禁言三天,绝不手软,情况严重的直接封号,请大家珍惜自己的账号!

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

猜你喜欢
天工维度唯一QQ群
786014245

欢迎进群交流,入群答案:编辑器

  • 官方在线客服

    QQ客服:小雪

    点击交谈

    QQ客服:砂糖

    点击交谈

    团队老大:荀公子

    商务合作
  • 上海市静安区共和新路4718号宏慧新汇园6号楼603室

  • 手机扫码查看手机版

    手机查找资源更方便

  • 扫一扫关注官方微信

    加入官方QQ群

Powered by 天天RPG&DZX3.4 ©2020-2021 Comsenz Inc.提百万设计( 沪ICP备18032615号-1 )营业执照