找回密码
 点一下
查看: 1146|回复: 12

这两种思路,那种好了??

[复制链接]
发表于 2012-1-9 20:24:47 | 显示全部楼层 |阅读模式
话说,我想走个N秒后删除特效,漂浮文字之类的东西,我能解决这个问题,但不知道那种思路好
最简单的思路
声明一个局部变量,记录最后创建的特效
等待N秒后
删除特效
  这样写实很坑爹的...
我如果把它函数封装的话肯定不行,那样调用这个函数的地方都会等待N秒后才会执行后面的语句
有点麻烦的思路
声明一个全局变量
[jass]globals effect temp = null [/jass]
[jass]
函数1
声明一个局部变量=全局变量temp
等待N秒(从HashTable获得)
删除特效
endfunction
[/jass]
函数2
声明一个局部触发t
将时间存进HashTable
创建特效
设置temp = 最后创建的特效
为t添加动作函数 函数1
强制运行触发t
endfunction
另外一种思路
函数3
获得存进去的特效(从HashTable)
删掉他
endfunction
函数4
声明一个局部计时器t
创建特效
将他存进去
[jass]call TimeStart(t,N,false,函数3)[/jass]
endfunction
发表于 2012-1-9 21:48:10 | 显示全部楼层
第一个等待其实可以用ExecuteFunc,那样第一次之后的调用就不会挂起了,不过等待啥的,应该误差挺大的……

第二个不做评论……

要封装的话个人感觉是第三个好。。参数可以是特效和持续时间


话说LZ下次能排版一下吗……
各种分不清哪个是哪个。。
至少用空格或者分割线分一下吧~
回复

使用道具 举报

 楼主| 发表于 2012-1-10 17:32:05 | 显示全部楼层

回 1楼(chyj4747) 的帖子

chyj4747:第一个等待其实可以用ExecuteFunc,那样第一次之后的调用就不会挂起了,不过等待啥的,应该误差挺大的……

第二个不做评论……

要封装的话个人感觉是第三个好。。参数可以是特效和持续时间
....... (2012-01-09 21:48) 
...我居然不知道还有ExecuteFunc这个函数!!!啊!!!!!都用Jass很久了.....
   第二个,我表示这是GreedWind的做法,在另一个触发中用等待
  第三个,是从YDWE看过来的
   话说,ExecuteFunc这个函数有什么功能在,怎么用????
回复

使用道具 举报

发表于 2012-1-10 23:35:52 | 显示全部楼层
可以用函数名字符串作为参数执行无参函数,优点是函数不一定需要在调用前声明,缺点是只能无参
回复

使用道具 举报

发表于 2012-1-10 23:51:52 | 显示全部楼层
话说executefunc执行的函数,等待不会失效嘛?~

表示漂浮文字建议自带生命周期~

effect可以hash绑定timer的说~
回复

使用道具 举报

发表于 2012-1-11 00:59:43 | 显示全部楼层
同步执行(ExecuteFunc).w3x (18 KB, 下载次数: 3)
测试方法进图就能看到~


另外回LS,等待不会无效~
不过一下子用很多次会不会灭了等待我不知道……

函数是借用zyl910的,我记得我就只改了下函数名。。
另外有个很强大的利用BJ局部变量的写法……
普通写法是局部变量,然后哈希表绑定,zyl910直接用BJ局部变量然后传递时直接用……
表示我第一次看到这个写法时就震惊了。。


不过仍旧推荐第三种的说……ExecuteFunc据说不太稳定。。
回复

使用道具 举报

发表于 2012-1-11 12:28:19 | 显示全部楼层
据说Executefunc是把函数当做触发器用。
详细的我不理解,一般也不用= =!
回复

使用道具 举报

 楼主| 发表于 2012-1-11 18:10:12 | 显示全部楼层

回 5楼(chyj4747) 的帖子

chyj4747:
测试方法进图就能看到~

另外回LS,等待不会无效~
不过一下子用很多次会不会灭了等待我不知道……
....... (2012-01-11 00:59) 
  .....哎,居然不稳定.....坑爹啊!!!!
回复

使用道具 举报

发表于 2012-1-12 00:58:01 | 显示全部楼层
没什么不稳定的,龙骗你。
回复

使用道具 举报

发表于 2012-1-12 03:45:03 | 显示全部楼层
杀戮机器:没什么不稳定的,龙骗你。 (2012-01-12 00:58)
发现我各种被你秒杀……
LS头像和名字真是绝配了~


似乎用词的确不大妥当。。

没记错的话应该是相隔较远的函数用ExecuteFunc可能会调用不到,这个是以前在某篇帖子里看到的……
回复

使用道具 举报

发表于 2012-1-12 11:38:55 | 显示全部楼层
当然用计时器最好了,准确、效率
[jass]function DE takes nothing returns nothing
    local timer t=GetExpiredTimer()
    local integer th=GetHandleId(t)
    local effect e=LoadEffectHandle(udg_HT,5,th)
    call DestroyEffect(e)
    call RemoveSavedHandle(udg_HT,5,th)
    set t=null
    set e=null
endfunction
function DelEff takes real r , effect e returns nothing
    local timer t = CreateTimer()
    call TimerStart(t,r,false,function DE)
    call SaveEffectHandle(udg_HT,5,GetHandleId(t),e)
    set t=null
endfunction[/jass]
回复

使用道具 举报

 楼主| 发表于 2012-1-12 18:02:29 | 显示全部楼层

回 10楼(zh62920) 的帖子

zh62920:当然用计时器最好了,准确、效率
[jass]function DE takes nothing returns nothing
    local timer t=GetExpiredTimer()
    local integer th=GetHandleId(t)
    local effect e=LoadEffectHandle(udg_HT,5,th)
.. (2012-01-12 11:38) 
....兄弟啊!!你太给力了,代码都贴上来了...
回复

使用道具 举报

发表于 2012-1-13 01:00:13 | 显示全部楼层
终于有人发现了我的头像和名字的无比和谐了吗~~
看来我的吐槽功力见长了呢~~(*^__^*) 嘻嘻……
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-7 21:05 , Processed in 0.189471 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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