找回密码
 点一下
查看: 1345|回复: 19

用vjass改写地图

[复制链接]
发表于 2008-11-4 13:14:17 | 显示全部楼层 |阅读模式
看了一片名为T,JASS,VJASS的文章,按作者的意思,用VJASS的那个方法可以不用return bug传递局部变量,但实际上那不是全局变量吗?同时使用一个技能会冲突吧?
另外问个问题,如何让一个函数在地图初始化的时候就执行?
发表于 2008-11-4 17:20:28 | 显示全部楼层
一、会。但其实没必要全部技能都要支持多人施法(包括不同玩家和同一玩家),像功夫3c中不也是限制一个英雄每个玩家只能选一次么。
二、 未命名.JPG


要是直接写在J里面就是写在 InitCustomTriggers 里...........
回复

使用道具 举报

 楼主| 发表于 2008-11-4 17:52:17 | 显示全部楼层
那要是12个玩家都选了这个英雄,不是写脚本的时候要分别写个12结构然后判断玩家决定用哪一个结构了?
回复

使用道具 举报

发表于 2008-11-4 18:48:02 | 显示全部楼层
用的是全局变量数组吧
不会冲突的
回复

使用道具 举报

发表于 2008-11-4 21:30:55 | 显示全部楼层
那些教程我还没看懂啊,即是话要写算法啊?!
回复

使用道具 举报

 楼主| 发表于 2008-11-4 22:15:31 | 显示全部楼层
不会冲突?STRUCT就相当于一个数组吧,如果是用的是全局的,同时调用肯定有冲突啊,如果是局部的还是没解决如何传递的问题吧?
回复

使用道具 举报

发表于 2008-11-4 22:47:57 | 显示全部楼层
有篇介绍struct原理的文章
struct传递是用integer
其实只是传递一个引索
然后调用相应数组
http://www.islga.org/bbs/read.php?tid=18895&fpage=2
回复

使用道具 举报

 楼主| 发表于 2008-11-5 09:44:38 | 显示全部楼层
这个文章刚刚看完,然后觉得还是要冲突啊!在一个函数里创建了一个struct,如果要传到timer里面,用全局变量保存索引,很容易就冲突了吧?实质上至少也要把索引用缓存绑定在timer上来传递吧?
回复

使用道具 举报

发表于 2008-11-5 12:47:05 | 显示全部楼层
应该是吧  把索引用缓存绑定在timer上来传递
只需要传递索引   相比较而言  方便多了


当然  如果你想彻底抛弃缓存, 也是可以的
但要用到hash算法
具体原理看3楼的解释
http://www.islga.org/bbs/read.php?tid=19253
回复

使用道具 举报

发表于 2008-11-5 12:54:42 | 显示全部楼层
应该是不会冲突的吧,除非你同时使用超过8192个项

每一个struct都有自己独立的索引和数组,是互相不会干扰到的额
回复

使用道具 举报

发表于 2008-11-5 13:09:18 | 显示全部楼层
为什么要用HASH来判断,循环判断就可以了啊,8192又不是大数组
回复

使用道具 举报

 楼主| 发表于 2008-11-5 13:19:07 | 显示全部楼层
一些说要冲突一些说不冲突啊…举个简单的例子吧,有一个技能被施放之后,等待6秒给目标恢复100点生命,不用睡眠动作用计时器来做,那么vjass怎么得到之前的技能施放目标?
回复

使用道具 举报

发表于 2008-11-5 17:26:57 | 显示全部楼层
vjass不熟悉,不过做一个struct,里面包含一个计时器和一个单位(也就是目标)估计可以吧

其实jass也是一样,就像10楼libla说的,直接用循环+整数作索引,循环判断下到期的计时器的索引,获取相应的单位就可以阿
回复

使用道具 举报

 楼主| 发表于 2008-11-5 18:09:13 | 显示全部楼层
如果下标很大的话,效率还有用缓存高吗
回复

使用道具 举报

发表于 2008-11-5 18:31:54 | 显示全部楼层
全局的效率肯定要比缓存高,数组下标高一点也无所谓,最多不过8191而已
回复

使用道具 举报

 楼主| 发表于 2008-11-5 19:30:56 | 显示全部楼层
我的意思是用循环来找索引,要是要找的那个下标大了,效率还有用缓存的高么?
回复

使用道具 举报

发表于 2008-11-5 19:53:00 | 显示全部楼层
变量的效率肯定比缓存高,14楼已经说过了
回复

使用道具 举报

 楼主| 发表于 2008-11-5 21:02:47 | 显示全部楼层
即使每次都要找完8000多个索引也要快些吗?要是是0.01的计时器,光是指针的加法在一秒内都要做80多万次
回复

使用道具 举报

发表于 2008-11-5 21:17:40 | 显示全部楼层
额,这个貌似我的理解错误了

循环查找的时间复杂度是o(n),而缓存的话是o(1),但变量原本的效率要比缓存高的多
回复

使用道具 举报

 楼主| 发表于 2008-11-5 22:02:34 | 显示全部楼层
明白了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-28 19:18 , Processed in 0.065239 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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