|
原英文贴地址:Jass: Known bugs
我只是将其翻译了一下 水平有限 有不妥或错误之处还请指出 我会更正的
懂英文的千万不要看我翻译的 去看上面连接的原文 翻译总会有一些走样的 不懂英文的就只好忍受一下我蹩脚的语文了....下面就开始了~~~
此帖是一份jass中已知bug的清单. 且仅限于编译器中的以及native中的bug .
而Blizzard.j中的,用户自定义函数中的以及一般war3游戏中的bug除外.
注意: 这份清单仅针对于war3中的jass(冰封王座1.20)
此帖的目的是为了方便大众 以及避免让论坛被同样的问题帖子淹没 包含了bug的一些简明介绍 以及其他相关帖子的连接 以便你获得所涉及bug的更多信息 比如解决方案 教程等等. 如果有相关软件能解决某个现存的bug 也同样会有连接(使用一个软件之前要记得看read me哦)
如果你发现有任何遗漏 请回帖 我会把它加上.
编译器中的bugs:
1.遗漏endif 或 endloop 导致编辑器自动关闭
在没有写loop 或 if语句的结束申明的情况下保存地图 会导致we突然自动关闭
当放生这种情况时 或者其他原因导致的we自动关闭 你都能在你保存地图路径那的地图名字的零时文件夹中找到你的地图脚本 你可以用触发编辑器中的 文件->导入触发选项 从其他地图导入触发 注意: 这样做容易导致一些重新申明全局变量的问题
我推荐的jass编辑器 JassCraft (我也推荐 全英文的哦)
JassCraft 说明及下载地址:http://www.wc3campaigns.net/showthread.php?t=80105
2. 无效整数型值导致的自动关闭
无效的整数赋值 比如: 赋值为'Æ;Øpo'将导致保存地图时we自动关闭 无论是Æ;还是Ø都会导致此问题
3.在文件名中使用单个斜线符号导致存图时自动关闭
任何时候你想让一个字符串包含"\"时 都应该取而代之用"\\" 因为单斜杠号是有功能作用的 两个杠中只有一个会成为那个字符串的值的那部分
4.函数应该返回某种类型时偏偏不返回这种类型
当你有一个函数申明了要返回莫中类型 但你却返回了另一种时 会导致存档时关闭
5.错误报告移后(这个bug半天才看明白,不知道我理解的正不正确 要是你发现有问题要赶快说哦)
有些bug我们一般是意识不到的. 你有没有这样的经历? 有些时候编译器提示说有错误但我们呢却怎么也找不出哪错了. 这实际上是因为编译器提示你某某行上有错误 而事实上真正存在错误的地方是在其上面的行里. 这个问题真是难解这决了,但它至少会告你bug所在哪一行,这时你就应该也同时检查一下上面的几行.这个bug经常出现在 比如用错endfunction的时候.
6.字符串长度限制
当字符串超过860个字符的时候也会导致存档时自动关闭. 解决的办法很简单 就是使用多个串联起来.
7.return bug
尽管这是个bug 但它却非常地有用! we或者war3的编译器只检查是否最后一个返回的数据类型符合声名 (从下往上检查) .于是,你便可通过这段简单的传说中的函数将 例如,句柄型转化为整数.
- function H2I takes handle h returns integer
- return h
- return 0
- endfunction
复制代码
这个bug更像一个恩赐而不是一个bug 因为它让你能将某些类型存放到另一种变量中 从而使你获得了很大的发挥空间
关于return bug的更多文章:http://jass.sourceforge.net/doc/retbug.shtml
教程:使用局域句柄变量函数http://www.wc3jass.com/viewtopic.php?t=2006
使用return bug时出现的一个问题的解决 http://www.wc3jass.com/viewtopic.php?t=2091
8.相同名字的变量彼此覆盖
这个bug非常地讨厌 当你用了一个参数后又定义了一个相同名字的局部变量 而只有那个最后声名的变量 这个例子中也就是那个局部的 会运行正常, 如果你不留意这种情况的话 会让你的代码运行的非常地诡异...
然而也可以利用这个bug去做GUI multiinstanceable(仅限有一定功底的)http://www.wc3jass.com/viewtopic.php?t=2356
9.某些操作系统下的自定义代码功能不可用(最开头那里写公用函数的地方)
当使用Windows 98 and ME或许还有别的某些操作系统时就会出现此障碍
解决的办法: 创建一个在所有触发编译之前编译的触发,然后你便可以在那个触发里写你的公用函数了 这里有一个小工具可以方便你实现这件事
http://www.wc3jass.com/files.php?mode=view&id=17
10.windows XP SP2 单挑 SP1
有些时候在装了sp2的机子上和在没装sp2的机子上实际情况会很不一样.我们对此也没找到一个好的解释 但事实就是有的时候确实会糟糕到让你XXX (埃~这个词实在不知道什么意思...)
11. 保存地图时一个%符号会从自定义代码区里消失
这只发生在自定义代码区(地图开头写公用函数那里)
解决的办法 写两个%% 这样一个被移走了 还剩下你需要的那个
和native有关的bugs
1.IsUnitType boolexpr bug(没看懂 看懂的回个贴我补上)
IsUnitType(whichUnit, whichUnitType) causes bugs when used alone in boolexpr's and not compared to true or false.
详请见http://www.wc3jass.com/viewtopic.php?t=2370
2.游戏缓存限制
当你使用了大于等于256个游戏缓存(game cache)保存在你的战役地图文件里时会让你的地图发生一系列诡异的事情
详情见http://www.wc3jass.com/viewtopic.php?t=2334
3.移除计时器
当你在倒计时函数的另一个函数里将此计时器移除后(destroyed) 它仍然不会停止倒计时.解决方法很简单 在移除它之前先将其暂停.
详情见http://www.wc3jass.com/viewtopic.php?t=2373
4.SetUnitX 和 SetUnitY 导致自动关闭
使用这两个native函数时 如果给的坐标超过了地图范围(playable map area)(the initial value of the bj_mapInitialPlayableArea rect global) 会导致自动关闭
解决的办法也很简单 就是在调用此函数前自己检查一下坐标是否超出了范围
5.在地图范围外(playable map area)创建单位导致自动关闭
同上
解决办法:同上
6.RestoreUnit ignores type protection(没看懂 看懂的回个贴我补上)
The RestoreUnit native seems to ignore the 'type protection' for the returned units, and can therefore cause crashes when used incorrect (with typecasting).
详情见http://www.wc3jass.com/viewtopic.php?t=2518
7.GroupEnumUnitsInRectCounted 和 GroupEnumUnitsInRangeCounted
这两个native函数被用在大量单位上时会有非常不稳定的结果
8.ExecuteFunc 的限制
这个函数有个很傻的限制 如果调用ExecuteFunc的函数和目标函数之间的行数超过一定数量时就会超时 然后什么反映结果都没有
我靠~终于翻译完了..我的天....
[ 本帖最后由 illlusion 于 2006-4-7 09:09 编辑 ] |
|