找回密码
 点一下
查看: 1197|回复: 8

关于外部变量和局部变量,求助。

[复制链接]
发表于 2009-11-12 18:39:51 | 显示全部楼层 |阅读模式
对于外部变量和局部变量一直搅得恨迷茫。。所用来求救了。希望各位高手指点下



1》在T里面怎么弄出一个临时的局部变量?有人说必须要先在变量表里定义外部变量才可以。。。。。实在很迷茫。。

2》局部变量最后是不是都需要RemoveLocation (udg_ *****)来删除下,他们说RemoveLocation (udg_ *****)只是针对点和单位组来用,别的不需要。。。应该不是吧??? [s:186]
发表于 2009-11-12 20:15:51 | 显示全部楼层
局部变量作用范围仅在一个触发过程内起作用,具有”一次性“的特点。
全局变量可在多个触发事件中被使用到,从而起到传递数据的作用。

比如:
一个英雄死了
设置全局变量udg_Hero = 触发单位
另一个英雄使用了暴风雪技能
复活udg_Hero在触发单位使用的技能的中心点
此时第一个触发中死掉的英雄能在第二个施放暴风雪的地方复活,这是两个互不干涉的触发,但通过一个全局变量,能对同一个单位进行操作。

一个英雄死了
设置局部变量unit u = 触发单位
另一个英雄使用了暴风雪技能
这个时候不能复活刚才死掉的英雄,因为不能获得死英雄的那个触发中的所有数据,因为它们没有用全局变量记录


1。  在T里使用自定义代码可申明局部变量,例如申明一个名为 hero 的单位类型的局部变量。并设置它为触发单位:
local unit hero = GetTriggerUnit()
当然你可以这样写:
local unit hero
set hero = GetTriggerUnit()
是一回事,只不过第一种写法是在申明的同时赋值了

2。  局部变量因为不能在全局中使用,是用一次就不会被用到第二次的东西,所以需要每次用完后清干净。比如刚才的触发单位,在用完后,触发器的最后一句要加上:
set hero = null
当然有些懒人不写这一步,一个单位才泄露7个字节,如果数量不多不影响什么。
但,局部变量的点,单位组之类的一定要清掉,否则地图会很卡,比如申明一个点,并设置它为技能施放点:
local location Loc=GetSpellTargetLoc()
然后使用完了清除:
call RemoveLocation(  Loc  )
set Loc = null
如果你懒,可以不set null,但你再懒,也需要移除它,否则它将会在你结束游戏之前一直占用你的内存,直到物理内存占完。
回复

使用道具 举报

 楼主| 发表于 2009-11-12 20:52:01 | 显示全部楼层

回 1楼(緋桜) 的帖子

随人还是有点不甚明了。。但是换是谢谢前辈了。。
回复

使用道具 举报

发表于 2009-11-12 21:11:07 | 显示全部楼层
这个,lz可以先去看看一些简单的jass或者其他编程语言教程里关于局部变量与全局变量的相关内容

在T里使用局部变量,其操作量不比直接写J小多少,设局到局部变量的都需要用自定义代码来写
回复

使用道具 举报

发表于 2009-11-12 21:12:19 | 显示全部楼层

回 3楼(zhuzeitou) 的帖子

用夜天UI可以直接在T里写局部变量,工具区有,那个1.24的UI
回复

使用道具 举报

发表于 2009-11-12 21:13:12 | 显示全部楼层
………………摒弃UI,用原版WE是最好的~~
回复

使用道具 举报

发表于 2009-11-12 21:14:17 | 显示全部楼层
摒弃WE,用JassCraft是最好的。。。
回复

使用道具 举报

发表于 2009-11-13 10:07:08 | 显示全部楼层
UI的用处还有一个,就是改变多面板字体大小。。
回复

使用道具 举报

发表于 2009-11-13 10:08:47 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 23:22 , Processed in 0.038356 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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