T,Jass,vJass三者究竟有什么不同?
既然 T 和 Jass 是同一类东西,那为何有的人喜欢用T,有的人喜欢用 Jass,甚至还有人使用一种叫 vJass的莫名其妙的语言呢?这一切都是因为一个罪魁祸首,那就是“变量”。
打开一张未加密的真三国无双地图,点击如图的变量列表图标,打开变量列表,就看到真三中使用的变量,这一大堆的变量,被用在各个触发中,类型也千差万别,但是却被成堆地放在一起,杂乱无章,根本无从知道哪个是干什么用的。
这就是用普通 T 作图的最大毛病,变量不方便管理。尤其对于自定义技能中使用的变量,很多时候变量只是在技能施放的时候被短暂使用一下,大部分时间均处于闲置状态,这些变量不但增加变量的杂乱程度,还占用游戏资源。
这时就有人用 Jass来解决这个问题。对比起 T来,J最大的优势就是能使用局部变量,局部变量能在触发的动作函数里声明,能独立运算不互相干扰,方便清空,而且它不需要堆放在变量列表里,这极大降低了变量的管理难度。可以这么说,如果暴雪设计WE时让变量能够分组,可能就不会有用T还是用J这个问题了。
但是使用局部变量并不能完全解决地图设计中的所有变量问题,因为局部变量只能在一个函数中使用,而不少华丽的技能,尤其是持续一段时间的技能,要使用到多于一个函数并使用计时器,在这种情况下,依然要使用到全局变量。这时问题又回来了,由于无论是用T还是 J,全局变量的声明都必须放在变量列表里,因此
对于拥有大量华丽技能的地图,J的优点并不能发挥出来。更重要的是,技能中需要使用大量的“临时”变量,原本这些变量只需在技能施放时产生,技能施放后就可以删除的,但由于 WE 设计时变量的管理缺陷,我们不得不事先把这些变量事先声明好并一直放在地图中,这样做就占用了很多地图资源。
为了解决这个问题,有 Jass用户想出了使用缓存的方法。他们把技能施放过程需要反复调用的“单位”,“实数”,“特效”等“物件”暂存在游戏的缓存中,并在需要的时候调出来。这种方法很好地解决了 WE的变量管理问题,而且使用方法也很符合人类的思考习惯,因此在一段时间内可以说大行其道。
缓存尽管解决了变量的“分类”问题,但是它并没有简化作图的工作,技能制作者依然要为每一个“物件”进行“存”,“取”,“删除”,“清空”等动作;另外使用缓存存取的速度要比全局变量要慢,因此一张存在大量华丽技能的地图,虽然使用缓存后其地图加载速度比使用全局变量的快,但技能施放时的速度却比使用全局变量的慢;更重要的是,缓存必须用文本来标识保存的物件,这就导致我们很多时候要在技能设计时,逐个地对物件进行保存,然而在大多数情况下我们需要的仅仅是对物件进行批量处理,而不是很麻烦地给
每个物件加上标记。
在这种情况下,就诞生了 vJass,一种可能很多人完全没听说过的高级语言。其实vJass并不是 Jass的替代品,它只不过从根本上解决了一个问题,就是全局变量的“分类声明”。在vJass里,你可以在触发里声明需要使用的全局变量,同时可以给全局变量加上“私有”(private),或者“公用”(public)这样的标记,以解决以上提到的问题,甚至还可以给全局变量“打包”(struct),调用的时候全部一起调用,不需要的时候整个包一起清空。这些特性,都极大简化了技能制作者的工作。
看到这里你也许就会明白,所谓 vJass或 Jass,并不比 T高级,它们的出现只是为了给技能作者提供方便。假设用 vJass重新写一遍 澄海3C,游戏时的速度并不会加快,因为T已经是最快的了。但是 J和 vJ能解决 T 的致命问题 - 变量管理,一些用 J和 vJ写的很简单的技能,如果改用 T 写就会变得极其繁冗,而且作者在这种繁冗的代码堆里还很容易出错。屠夫大战就是用vJ编写的经典作品,里面屠夫的技能支持多人,并且链条会拐弯,钩子飞出后技能施放者可以随意运动,如果要保持这种种特点,改用 T 来做这样的技能那可真的可以说是谋杀脑细胞。另外本人的《功夫3C-星宿会战》也是全 vJ编写,里面的大部分技能如果用T做出来,那也是相当折磨人的事情。簡單的說吧
而J則是自製的,可以省略許多為了相容性而添加的步驟,進而增加運作效率
打個比方,T創造N個單位的指令,轉成J之後,會發現它不斷的用迴圈將剛創造的單位設定成上一個創造的單位,並且把這個單位加入上一個創造的群組。
這些都是多餘的步驟,在純J你可以省略他們,另外也因為T生成Jass的方法相當制式化,會型成許多極其憋扭的 function ,讓整個運作的效率很差,類似的例子很多,若大家有些J的實作經驗就會明白。
VJass 是「重新編譯」的 Jass,Struct 本身就是靠一堆 array 跟 function 來達成支援多重施展的效果,所以在效率上是輸純Jass一截的,若你拆過VJass的.J你就會知道它是在玩什麼把戲。
當然,不可否認的是 VJass 提各種方便編輯的功能,只是當你的 Jass 技巧足夠的時候,也未必要使用 VJass的語法來達成目的。
總而言之 Jass > VJass > T
VJass 跟 T 最後也都是以 Jass 的型態被儲存在地圖,差別只在一個是「重新編譯」,一個是「套件組裝」而已。
既然 T 和 Jass 是同一类东西,那为何有的人喜欢用T,有的人喜欢用 Jass,甚至还有人使用一种叫 vJass的莫名其妙的语言呢?这一切都是因为一个罪魁祸首,那就是“变量”。
![](https://img-my.csdn.net/uploads/201303/10/1362918745_3272.jpg)
![](https://img-my.csdn.net/uploads/201303/10/1362918764_7821.jpg)
打开一张未加密的真三国无双地图,点击如图的变量列表图标,打开变量列表,就看到真三中使用的变量,这一大堆的变量,被用在各个触发中,类型也千差万别,但是却被成堆地放在一起,杂乱无章,根本无从知道哪个是干什么用的。
这就是用普通 T 作图的最大毛病,变量不方便管理。尤其对于自定义技能中使用的变量,很多时候变量只是在技能施放的时候被短暂使用一下,大部分时间均处于闲置状态,这些变量不但增加变量的杂乱程度,还占用游戏资源。
![](https://img-my.csdn.net/uploads/201303/10/1362918819_1625.jpg)
这时就有人用 Jass来解决这个问题。对比起 T来,J最大的优势就是能使用局部变量,局部变量能在触发的动作函数里声明,能独立运算不互相干扰,方便清空,而且它不需要堆放在变量列表里,这极大降低了变量的管理难度。可以这么说,如果暴雪设计WE时让变量能够分组,可能就不会有用T还是用J这个问题了。
但是使用局部变量并不能完全解决地图设计中的所有变量问题,因为局部变量只能在一个函数中使用,而不少华丽的技能,尤其是持续一段时间的技能,要使用到多于一个函数并使用计时器,在这种情况下,依然要使用到全局变量。这时问题又回来了,由于无论是用T还是 J,全局变量的声明都必须放在变量列表里,因此
对于拥有大量华丽技能的地图,J的优点并不能发挥出来。更重要的是,技能中需要使用大量的“临时”变量,原本这些变量只需在技能施放时产生,技能施放后就可以删除的,但由于 WE 设计时变量的管理缺陷,我们不得不事先把这些变量事先声明好并一直放在地图中,这样做就占用了很多地图资源。
为了解决这个问题,有 Jass用户想出了使用缓存的方法。他们把技能施放过程需要反复调用的“单位”,“实数”,“特效”等“物件”暂存在游戏的缓存中,并在需要的时候调出来。这种方法很好地解决了 WE的变量管理问题,而且使用方法也很符合人类的思考习惯,因此在一段时间内可以说大行其道。
缓存尽管解决了变量的“分类”问题,但是它并没有简化作图的工作,技能制作者依然要为每一个“物件”进行“存”,“取”,“删除”,“清空”等动作;另外使用缓存存取的速度要比全局变量要慢,因此一张存在大量华丽技能的地图,虽然使用缓存后其地图加载速度比使用全局变量的快,但技能施放时的速度却比使用全局变量的慢;更重要的是,缓存必须用文本来标识保存的物件,这就导致我们很多时候要在技能设计时,逐个地对物件进行保存,然而在大多数情况下我们需要的仅仅是对物件进行批量处理,而不是很麻烦地给
每个物件加上标记。
在这种情况下,就诞生了 vJass,一种可能很多人完全没听说过的高级语言。其实vJass并不是 Jass的替代品,它只不过从根本上解决了一个问题,就是全局变量的“分类声明”。在vJass里,你可以在触发里声明需要使用的全局变量,同时可以给全局变量加上“私有”(private),或者“公用”(public)这样的标记,以解决以上提到的问题,甚至还可以给全局变量“打包”(struct),调用的时候全部一起调用,不需要的时候整个包一起清空。这些特性,都极大简化了技能制作者的工作。
看到这里你也许就会明白,所谓 vJass或 Jass,并不比 T高级,它们的出现只是为了给技能作者提供方便。假设用 vJass重新写一遍 澄海3C,游戏时的速度并不会加快,因为T已经是最快的了。但是 J和 vJ能解决 T 的致命问题 - 变量管理,一些用 J和 vJ写的很简单的技能,如果改用 T 写就会变得极其繁冗,而且作者在这种繁冗的代码堆里还很容易出错。屠夫大战就是用vJ编写的经典作品,里面屠夫的技能支持多人,并且链条会拐弯,钩子飞出后技能施放者可以随意运动,如果要保持这种种特点,改用 T 来做这样的技能那可真的可以说是谋杀脑细胞。另外本人的《功夫3C-星宿会战》也是全 vJ编写,里面的大部分技能如果用T做出来,那也是相当折磨人的事情。簡單的說吧
补充:
T 是許多Jass 的套件組裝起來的,為了符合廣大使用者的需要,設計以相容性為主;而J則是自製的,可以省略許多為了相容性而添加的步驟,進而增加運作效率
打個比方,T創造N個單位的指令,轉成J之後,會發現它不斷的用迴圈將剛創造的單位設定成上一個創造的單位,並且把這個單位加入上一個創造的群組。
這些都是多餘的步驟,在純J你可以省略他們,另外也因為T生成Jass的方法相當制式化,會型成許多極其憋扭的 function ,讓整個運作的效率很差,類似的例子很多,若大家有些J的實作經驗就會明白。
VJass 是「重新編譯」的 Jass,Struct 本身就是靠一堆 array 跟 function 來達成支援多重施展的效果,所以在效率上是輸純Jass一截的,若你拆過VJass的.J你就會知道它是在玩什麼把戲。
當然,不可否認的是 VJass 提各種方便編輯的功能,只是當你的 Jass 技巧足夠的時候,也未必要使用 VJass的語法來達成目的。
總而言之 Jass > VJass > T
VJass 跟 T 最後也都是以 Jass 的型態被儲存在地圖,差別只在一個是「重新編譯」,一個是「套件組裝」而已。
原文:http://bbs.uuu9.com/thread-1583235-1-1.html
http://baike.baidu.com/view/4527854.htm