偶久网

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索

网站魔兽热门地图

查看: 8494|回复: 7

新手注意-死循环问题+用T来实现处理

  [复制链接]
ou99孽缘 title=
发表于 2010-12-16 18:15:31
很久很久之前,B神创造了War3世界,他甚至把自己所持有的魔法书WE降下了凡间,让凡人们能够运用魔法来改变这个世界。
然而,书中所用的神的语言jass却是如此的晦涩难懂,只有最睿智的法师才能掌握。
为了让更多人能够掌握改变世界的魔法,神随后发明了trigger,让普通人也可以用自己的语言来使用魔法。
起初,这种方法能使用的魔法还只有最常用的一些,但是随后,一些大法师们把越来越多的原本只能用jass语言释放的魔法引进了trigger中......
新的世界,就此开始
【嘘声............】
好好好!我不跑题了还不成么?
特别注意问题!死循环!
Q1:伤害加深使得游戏跳出啦!

       Tip1-1:死循环,死循环,死循环
                 嘛,其实这个问题更多的出现在物品相关的触发里,经常会有新手朋友发现自己绞尽脑汁弄出的物品系统居然会弄得一捡起物品就死机.......
                 但是,不先说这个往下的教程就有问题,所以还是这里说说吧!
                 请看这个触发!我想让小强受到的所有伤害增加50%!
1.jpg

    没有问题吧?没有问题吧?
                 于是,华丽的开始测试,让一个步兵来打小强一下!
                 步兵举剑!砍!
                 魔兽程序自动关闭了..........
                 原因?很简单!
                 假设小强受到100的伤害。
                 那么这个触发会给他50点伤害。
                 到此还没有问题吧?但是!
                 请注意!这个50点伤害也是伤害!也会触发这个触发器本身!
                 于是还要再挨25点伤害。
                 还没完呢!,还有12.5+6.25+3.125+..........
                 好吧,数学上这个叫无限递归,收敛函数,比小于1的等比数列递加.........虽然这个无限数列实际上是有个和的,但是你的游戏还没把它算出来就会中断了....
                 难道伤害加深没法做?
                 怎么可能嘛.....
                 问题解决!
2.jpg
实际上,造成魔兽什么提示都没有的跳出或死机的错误十有八九是这种死循环!遇到这种问题时,请仔细检查思考一下!
                特别提示:对物品的操作中,创建物品、捡起物品、从别的单位处获得物品都会触发“获得物品”事件!同样,将物品给别的单位同样会触发“丢弃物品”事件!
Q2:这只有指定的单位受伤害事件啊!任意单位的伤害加成怎么做?
       Tip2-1:任意单位受到伤害事件!
           没有这个,就没法做无光之盾,没法做伤害加深,没法做.................
           打住!谁说没办法?
           我们有强大的:添加事件!
           怎么做一个状态,有这个状态的单位受到的伤害减少一半呢?
          简单!
3.jpg
4.jpg
这样就OK?
        错了,这样问题大了.............

        稍后为您演示~



       Tip2-2:出错啦!
          做出了任意单位受到伤害减少的技能,很高兴么?别高兴啦......
         【有什么问题?】
          简单,去测试一下!
         【我给我的步兵上一个心灵之火,果然他变能顶了!再给骑士上一个,也成功了!完美!有什么问题?】
          别急,你再给那第一个步兵上一次心灵之火。
         【有什么问题?等等,怎么不掉血了?】
          别激动,再上一次!
         【怎么挨打回血的?】
          问题来了吧?
          第一次对这个步兵释放心灵之火,他受到伤害时会减少50%
          第二次对这个步兵释放心灵之火,他受到伤害时会减少100%
          第三次对这个步兵释放心灵之火,他受到伤害时会减少150%
          恩,聪明的你应该从数据上看出点端倪了吧?      
          问题就出现在触发注册上了。每对步兵释放了一次心灵之火技能,就为触发2注册了一个“步兵受到伤害”的事件。
          假如对A再次释放了这个技能,实际上触发2有两个“A受到伤害”的事件,也就是说A受到伤害时触发2是运行两次的,于是,两次50%的伤害返还,不掉血了.....
          三次的话,就变回血了...........
                   解决方法,就是防止重复注册!
          用一个单位组a来记录,如果某个单位已经注册过了,那么它就不需要也不能再次被注册。
5.jpg

Tip2-3:有没有更好的方法呢?或者我需要做全图伤害显示,这样需要注册每个单位受到伤害事件的时候怎么办?
          那么,全体注册的方法,铛铛!
          需要特别注意的是,原先在地图上的单位和新进入地图的单位都需要注册!
          也就是,需要两个触发了~
          同样,千万记得用单位组记录哦!
6.jpg
7.jpg




ou99孽缘 title=
 楼主| 发表于 2010-12-16 18:15:49
我只是个路过的 不解释 什么
晓零
发表于 2011-9-10 17:00:56
真的不解释啊
发表于 2011-10-5 22:59:40
....还马赛克呢
kreaty
发表于 2011-10-6 13:31:10
天神赋予的图啊
gw96123
发表于 2011-10-16 01:03:48
...................
发表于 2012-1-13 14:31:22
死循环问题+用T来实现处理
879558831 该用户已被删除
发表于 2012-12-30 06:24:11
提示: 作者被禁止或删除 内容自动屏蔽
快速回复 返回顶部 返回列表