找回密码
 点一下
查看: 1928|回复: 10

关于等待的讨论!到底是什么实质!

[复制链接]
发表于 2010-11-19 12:03:11 | 显示全部楼层 |阅读模式
       个人而言  等待游戏时间  这个功能非常强大,  但是很多人都说这个效率不搞  非常渣啊什么的  导致都不敢用了  或者不好意思用了

比如  屠夫的钩子   

如果用等待  可以用简单的   


循环  中间 加 等待  0.02秒 然后一路过去   然后 再用循环  回来 这就可以在一个函数里面完成   

如果是这样  那么 只需要局部变量就可以达到   

而由于是在一个函数里完成   照大家说的  那么就可以轻松实现多人 一起用 而不冲突      

不然用 TIMER的话  那么必须用另一个触发来捕捉  必须要传递参数  那么不就麻烦了吗  

大家讲讲  等待的弊病   感觉上  相差也不是很多   (恐怕人是感觉不到)



举个最简单的例子    施放技能的时候   创建一排树  然后  等待3秒 删除   如果用等待  那么 就可以在一个函数里完成   而且都可以只用局部变量 不需要创建全局变量

如果是用TIMER 那么又需要另一个触发来捕捉 到期的计时器    如果等待后  有伤害目标  而且伤害和 技能等级挂钩  那么   第2个触发显然不能使用 先前记下的局部变量   那不是又麻烦了吗
发表于 2010-11-19 14:11:39 | 显示全部楼层
等待本身受很多东西影响,比如暂停、读秒、卡机什么什么的,等待游戏时间是timer+loop+等待的一个奇怪东东,可以自己修正上述的误差,不过效率自然不会高...
回复

使用道具 举报

发表于 2010-11-19 16:38:21 | 显示全部楼层
J下不需要新触发……
等待被抛弃主要是因为悲剧的精度不高以及同步上会导致掉线
timerstart才是好东西……
回复

使用道具 举报

发表于 2010-11-19 23:51:30 | 显示全部楼层
主要还是个精度问题,效率那是后话了。
回复

使用道具 举报

发表于 2010-11-20 01:02:01 | 显示全部楼层
lz会jass的话,看教程关于timerstart的部分吧……
回复

使用道具 举报

发表于 2010-11-20 02:43:34 | 显示全部楼层
用timer实现等待?

把一个触发器的动作函数分成两半
后一个在前一个里用TimerStart调用
如果前后两部分涉及到参数传递,就必须有个数据系统来支持,比如缓存啊哈希表啊什么什么的。
书写量可能大点,不过肯定安全可靠低碳环保分秒不差。
回复

使用道具 举报

发表于 2010-11-20 07:24:54 | 显示全部楼层
据说timer精度在万分之一秒
回复

使用道具 举报

 楼主| 发表于 2010-11-22 12:46:54 | 显示全部楼层
可不可以这么想  

对于精度要求不高的  用 等待 在一个函数里完成

对于精度要求高的   用 timerstart()    在2个函数里完成  

对于特效   可以创建后立刻删除 来防止泄露吗
回复

使用道具 举报

发表于 2011-1-8 22:04:44 | 显示全部楼层
回复

使用道具 举报

发表于 2011-1-8 22:22:55 | 显示全部楼层
楼上在干什么?
回复

使用道具 举报

发表于 2011-1-9 00:27:04 | 显示全部楼层
明显是在挖坟。


这里顺便说一下等待游戏时间为什么渣好了。

[jass]
function PolledWait takes real duration returns nothing
    local timer t
    local real  timeRemaining

    if (duration > 0) then
        set t = CreateTimer()
        call TimerStart(t, duration, false, null)
        loop
            set timeRemaining = TimerGetRemaining(t)
            exitwhen timeRemaining <= 0

            // If we have a bit of time left, skip past 10% of the remaining
            // duration instead of checking every interval, to minimize the
            // polling on long waits.
            if (timeRemaining > bj_POLLED_WAIT_SKIP_THRESHOLD) then
                call TriggerSleepAction(0.1 * timeRemaining)
            else
                call TriggerSleepAction(bj_POLLED_WAIT_INTERVAL)
            endif
        endloop
        call DestroyTimer(t)
    endif
endfunction
[/jass]

等待也就是TriggerSleepAction本来就渣,精度为0.125s,而且当游戏卡的时候或者被暂停的时候非常不稳定。

而等待游戏时间实际上就是用循环等待,一直等到一个timer走完,所以比等待本身更加渣。

关于这个东西也不能算是完全没有用途,某个极端情况系下用得到:
http://bbs.islga.org/read-htm-tid-33768-fpage-66.html
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 14:53 , Processed in 0.056114 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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