找回密码
 点一下
查看: 2819|回复: 22

强化T使用教程——帮助您学习使用局部变量

[复制链接]
发表于 2009-1-23 19:10:56 | 显示全部楼层 |阅读模式
为了普及jass的应用大家可以试着编写半T半J的触发
毕竟如果在T里能使用局部变量对大家也能减少全局变量太多的困扰 ,也可以接触一下jass代码方便以后进阶jass。

!因为等待函数的机制,所以这个依然无法实现多人共用或者无CD使用


[trigger]
Hblm S
事件
单位 - 任意单位 发动技能效果
条件
(施放技能) 等于 毒蛇守卫
动作
-------- 下面这2个语句的作用是给触发要了2个局部变量,local是要局部前必须加的单词 unit的意思是单位 integer的意思是整数 --------
自定义代码: local unit u
-------- 下面这语句的在要变量的同时还得到了一个值1,=1就是把=后面的值给他 --------
自定义代码: local integer i=1
设置 p1 = ((触发单位) 的位置)
设置 p2 = (技能施放点)
单位 - 创建 1 释法者 给 (触发玩家) 在 p1 ,面向 p2
设置 u = 最后创建的单位 [R]
点 - 清除 p1
点 - 清除 p2
-------- !把全局变量u里保存的单位保存进局部变量u里,全局变量要加udg_的开头,set相当于设置2字 --------
自定义代码: set u=udg_u
-------- 从这里的loop开始循环 --------
自定义代码: loop
-------- 这里exitwhen是循环结束条件,条件是循环10次,也就是i=10的时候,值得注意的是,等于符号是==,2个等于 --------
自定义代码: exitwhen i==10
-------- !把局部变量里保存的单位放到全局变量u里方便在语句里使用,因为局部变量不能在T语句里使用 --------
自定义代码: set udg_u=u
设置 p1 = (u 的位置)
设置 p2 = (从 p1 开始,距离 100.00 ,方向为 (u 的面向角度) 度的位移处)
单位 - 对 u 发布 兽族牛头人酋长 - 震荡波 命令到目标点: p2
点 - 清除 p1
点 - 清除 p2
-------- !把全局变量里的u保存进局部变量u里,因为这里要使用到等待,所以局部保存,防止其他地方使用udg_u变量造成混乱 --------
自定义代码: set u=udg_u
等待 0.20 秒
-------- 变量i每循环1次增加1 --------
自定义代码: set i=i+1
-------- 这里的endloop是指循环的尾部,连接上一个loop,期间的语句就是这个循环的语句 --------
自定义代码: endloop
-------- 这里把创建的释法单位不留痕迹地给删除 --------
单位 - 删除 u
-------- 以下就是给变量排泄,把变量都设置成空,也就是null --------
自定义代码: set udg_u=null
自定义代码: set udg_p1=null
自定义代码: set udg_p2=null
自定义代码: set u=null
[/trigger]



地图: 学习.w3x (20 KB, 下载次数: 47)


附表
常用变量的类型名称表
    变量类型          类型名称
     单位              unit
          实数              real
          整数              integer
          点                location
        计时器             timer
          玩家              player
          物品              item
          可破坏物          destructable
        单位组             group
         

评分

参与人数 2威望 +31 收起 理由
crazyforyou + 30 ……
新鲜的可 + 1

查看全部评分

恶声恶气 该用户已被删除
发表于 2009-1-23 19:15:56 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2009-1-23 19:17:35 | 显示全部楼层
-------- !把全局变量u里保存的单位保存进局部变量u里,全局变量要加udg_的开头,set相当于设置2字 --------


你没仔细看呐。
回复

使用道具 举报

发表于 2009-1-23 19:25:17 | 显示全部楼层
他就一胡搅蛮缠的~~~你可以选择无视它~~~~在回帖的时候打上(无视LS)就可以了~~~~
回复

使用道具 举报

 楼主| 发表于 2009-1-23 19:31:55 | 显示全部楼层
他又换头像了,换了头像我也认识
回复

使用道具 举报

发表于 2009-1-23 21:32:18 | 显示全部楼层
对于这种半T半J的东西我已经不抱多大的希望了
哦,对于我自己来说,数组的应用已经很熟练了除非是大量使用的变量,(不超过8000+)的话直接用数组
实际上局部变量是有一件很讨厌的问题的
那就是触发间的数据传递
貌似一般的J都是使用returnbug来解决
不过达到使用这个技术的水平,一般也可以直接用J写了

其实有一些东西是可以当做局部变量来用的,比如触发单位等
同一个有等待T在不同的触发单位引发事件而开始执行时
(就是说一个含有等待的触发在运行时又一次的被触发)
触发单位的返回是不同的,类似一个单位局域变量
因此在某些时候我们不需要使用局域变量来达到我们的目的
当然,这样的替代是有限的
不过利用数组是可以做出一些运行量不大的东西
使用局部变量的一项令人讨厌的东西是
它使我们的很多动作要使用自定义代码来写
哦,不过如果你不使用IF和单位组循环动作的话
你可利用局部变量屏蔽同名全局变量的特点来做
比如LZ例子中的循环变量i命名为udg_i的话
直接使用循环动作就可以了
但是因为IF的条件里无法设置局域变量
所以无法在使用了多动作IF语句中使用
……
有时间的话,我还是写个教程吧
不过忙论文,不知道有没有时间
回复

使用道具 举报

 楼主| 发表于 2009-1-23 21:43:53 | 显示全部楼层
同名局部优先这个确实是很聪明的方法来实现触发里调用局部
不过对于新手来说可能难以理解了点,使用确实是方便了。


要不我把我这个教程改一下吧?
回复

使用道具 举报

 楼主| 发表于 2009-1-23 21:45:55 | 显示全部楼层
算了,毕竟这个教程是拿来准备入门jass的人看的,不太适合加上这类有点混淆的内容,您有空写个吧
回复

使用道具 举报

发表于 2009-1-23 22:23:21 | 显示全部楼层
写得挺详细的
但是对于我来说用这个估计比直接用JASS脑残快很多
(就是说习惯用这个人直接学JASS更好吧~)
回复

使用道具 举报

发表于 2009-1-24 14:17:09 | 显示全部楼层
是地
其实用J是为了更高的效率更好的排泄和技能等的多次同时调用这三点
当然还有些功能T里没有也需要用J
不过有很多用J才能达到的效果用T也能达到
只是在效率上或者使用人数上有些缺陷……
不过某些时刻也可以凑乎用
回复

使用道具 举报

发表于 2009-1-24 16:58:55 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2009-1-24 17:00:34 | 显示全部楼层
半兽半人还不如全兽
回复

使用道具 举报

 楼主| 发表于 2009-1-24 17:02:11 | 显示全部楼层
2位水了。。
回复

使用道具 举报

发表于 2009-1-24 17:31:51 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2009-1-24 17:44:59 | 显示全部楼层
奇怪了,整型变量又是遵循的局部优先,单位却不是。
回复

使用道具 举报

发表于 2009-1-24 17:51:49 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2009-1-24 17:55:05 | 显示全部楼层
可是整型却是局部变量优先,为什么呢,奇怪啊
回复

使用道具 举报

发表于 2009-1-24 18:21:40 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2009-1-24 18:53:17 | 显示全部楼层
没试过
回复

使用道具 举报

发表于 2009-1-24 20:30:19 | 显示全部楼层
翻译员!很有前途的职业!加油!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-7-15 19:55 , Processed in 0.114106 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表