找回密码
 点一下
查看: 6093|回复: 21

-=关于给触发传递数据=-

[复制链接]
发表于 2006-12-26 21:53:25 | 显示全部楼层 |阅读模式
为了多线程操作而创造的触发一般都会需要创造它的函数给他一些数据 如果用全局变量来传递这个值 可能会在频繁的使用时出现问题 其实可以用一个单位来传递这些数据 如果是为了一个aloc单位( 偶喜欢那么叫..这个素蝗虫技能的代码也就是)而创建的触发 那么这是最好的情况 否则可以额外创建一个aloc单位来当作事件的引发者
[jass]
function BasicFunction takes ......
....
set aloc = CreateUnitAtLocSavelast( pOwn, 'xxxx', lBeg, 0) //pOwn为需要传递的一个玩家变量
                                                             //lBeg为为需要传递的一个点变量
call SetUnitUserData( aloc, iA + iB * 10 + iC * ....)//iA~In为需要传递的N个整数变量
call SetUnitLife( aloc,rA) //rA为需要传递的一个实数 同样单位的魔法值,移动速度,转向速度,动作速度等等也可以用来传递变量!
call SetUnitRallyUnit( aloc, uTar) //uTar为需要传递的一个单位冰凉 当然这个也可以用来储存点或可破坏物体
set trgBeCreate = CreateTrigger()
call TriggerRegisterUnitEvent( trgBeCreate, aloc, EVENT_UNIT_ISSUED_POINT_ORDER) //aloc为创造的一个蝗虫单位
call IssuePointOrderLocBJ( aloc, "move", lTar) //lTar为需要传递的另一个点变量:P
call TriggerAddAction( trgBeCreate, function DoFunction)
....
endfunction
[/jass]
这样一来就有N多数据可以不用全局变量来传递了 并且一个单位的生命或魔法甚至可以像自定值那样同时存储N个数据 然后再利用切割字符串来分离 或者可以用N维的数组的求元素地址法来存储

如果有一些使用率较低的变量种类难以传递的话 那么下表可能会有一些帮助
player -可以用GetOwningPlayer(unit)或Player(integer)
ability -可以把事件改为释放技能 那么就可以用GetSpellAbilityId()来得到一个技能变量 或用一个全局变量来储存所有技能 然后传递一个整形数作为编号
location - 可以用PolarPirjectionBJ(location,real,real)来用一个旧的点得到新的点也可以用坐标来得到点
destructable -可以用GetSpellTargetDestructable()或GetOrdertargetDestructable()来得到 否则就需要使用较麻烦的办法 先在BasicFunction那在一个点或坐标创造需要传递的可破坏物 然后在使用搜索以得到那个可破坏物 同样其他一些在XX位置的变量 如纹理也可以用此方法得到
type -由于类型其实是Integer变量 因此可以用Integer来传递
string -或许用游戏缓存来传递是最好的办法:P 同样其他的一些变量也可用此法

另外就是数据的类型转换 比如int和real,string等能互相转 而location通过一些手段也能和real互相转型 player,unit,des等也可转为integer

评分

参与人数 1威望 +20 收起 理由
白银の游戏王 + 20

查看全部评分

发表于 2006-12-26 22:49:33 | 显示全部楼层
研究性内容甲酚...
顺便问一句:难道楼主不知道缓存这个神奇的东西?
回复

使用道具 举报

发表于 2006-12-27 10:59:36 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2006-12-27 14:10:16 | 显示全部楼层
恩的恩的,其实在缓存面前,所有其它东西都是那么苍白无力
回复

使用道具 举报

发表于 2006-12-27 15:19:26 | 显示全部楼层
我以前好像见过LZ……和这个头像
好像在剑心那里呢……
回复

使用道具 举报

发表于 2006-12-27 15:29:58 | 显示全部楼层
其实偶也好像见到过呢恩恩...
回复

使用道具 举报

发表于 2006-12-27 15:40:28 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2006-12-27 21:35:57 | 显示全部楼层
的确..偶的头像..是EGS那抄的..
哎 看着EGS消逝心里真不是滋味...(其实是因为偶在是想挖一堆Player去CGA-0-)
偶在那的ID素酷乐 8知道有么有人认识鄙人咧
回复

使用道具 举报

发表于 2006-12-27 21:38:04 | 显示全部楼层
记得缓存还是老克告诉我的............
但是据说缓存耗硬盘
不知道缓存是什么工作原理
回复

使用道具 举报

发表于 2006-12-27 21:45:28 | 显示全部楼层
555...缓存只要不保存到硬盘就不会耗硬盘...

当然也有特例,就素它所占滴内存刚好素虚拟内存...
回复

使用道具 举报

发表于 2006-12-28 17:06:23 | 显示全部楼层
引用第9楼白银の式神2006-12-27 21:45发表的:
555...缓存只要不保存到硬盘就不会耗硬盘...

当然也有特例,就素它所占滴内存刚好素虚拟内存...


狂汗。。。
回复

使用道具 举报

 楼主| 发表于 2006-12-29 17:49:40 | 显示全部楼层
小内存用户慎用........
回复

使用道具 举报

发表于 2006-12-29 18:15:23 | 显示全部楼层
胡说来着~~ War3运行的时候也可能占用虚拟内存~~所有软件都可能会~~

那么我们为了保护硬盘什么软件都不要运行好了~~window也不要装了操作系统也不用了~~把硬盘拆了去玩0101吧~~
回复

使用道具 举报

发表于 2006-12-29 18:30:18 | 显示全部楼层
事实上偶素从来不开虚拟内存滴恩恩...
所以不存在这个问题恩...
回复

使用道具 举报

发表于 2006-12-29 20:54:51 | 显示全部楼层
事实上有个神奇的软件可以把内存神奇的变成硬盘 这样就可以把虚拟内存也弄到内存上去  哇 完美的不伤硬盘策略啊
回复

使用道具 举报

发表于 2006-12-30 09:03:35 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2007-1-1 17:10:05 | 显示全部楼层
引用第14楼bbs.wfox.cn2006-12-29 20:54发表的:
事实上有个神奇的软件可以把内存神奇的变成硬盘 这样就可以把虚拟内存也弄到内存上去  哇 完美的不伤硬盘策略啊

银河汗~~
那你开虚拟内存干什么?
回复

使用道具 举报

发表于 2007-1-1 17:11:09 | 显示全部楼层
引用第11楼小恶魔の痕迹2006-12-29 17:49发表的:
小内存用户慎用........



。。。。。。

一个点占用的容量能建好几条缓存。。。。。。
回复

使用道具 举报

 楼主| 发表于 2007-1-2 20:35:56 | 显示全部楼层
小内存才需要用缓存
回复

使用道具 举报

发表于 2007-2-19 23:38:18 | 显示全部楼层
引用第9楼白银の式神2006-12-27 21:45发表的:
555...缓存只要不保存到硬盘就不会耗硬盘...

当然也有特例,就素它所占滴内存刚好素虚拟内存...
怎样不把它保存到硬盘上,只保留在内存或虚拟内存里面??
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 04:05 , Processed in 0.173344 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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