bbasic吧 关注:112贴子:299
  • 9回复贴,共1

修复剑侠风云的蛋疼两天

只看楼主收藏回复

每次在运行这种找不到源码(有大富翁、各种编程大赛的参赛作品等等)的程序时心情都是忐忑的,因为出了问题完全就只能靠分析和判断来缩小范围。比如大富翁,安卓版基本完工时就是用大富翁做测试的,贴图位置完全错了,一片混乱,找不到原因,觉得有太多可能造成这个问题的原因了。然后各种手段疯狂设断点调试反汇编,偶然发现showpic的x,y为负数,当时还挺震惊的,然后就反应过来,赶紧去小机上测试了下,原来负数是允许的,宽度调节一下就好了。我直接就要求x,y必须大于0了。。。(BB程序写得太少了
然后这次是剑侠风云,先是STRETCHBLTPAGE的实现犯了点低级错误,但是排查用了很久,因为没有源码,把出错范围缩小到这个函数上花了不少功夫;接着就是chr$和asc的问题,当初实现chr$时,如果参数不是0到255就break了,当时还觉得没问题,毕竟虫子的教程上写的是 把ascii码转换为字符,ascii码最多也就255嘛。没想到小机上会做处理,会把低位取出来。这次发现剑侠风云在读取技能文件datajx.dat的时候无法正确对字符串断句(剑侠风云那时候还没有BB2.1,get #1,s$是无效的,大家都用chr$累加来实现),因为没有源码,实在想不出是什么导致明明读到了0还要继续往下读取。今天晚上搜了搜狂风小帅在论坛发的帖子,果然皇天不负有心人,找到了他写的 http://club.eebbk.com/bbkbbs/showtopic/149735/1
[分享]解决彩屏机BB不能读取字串的好方法
解决彩屏机BB不能读取字串的方法(使用下列函数)
function get_zhi$()
zhi_a=loc(1)
get_s$=""
zhi_t=0
while zhi_t=0
seek #1,zhi_a
get #1,zhi_k
zhi_as$=chr$(zhi_k)
if asc(zhi_as$)=0 then
zhi_t=1
else
get_s$=get_s$+zhi_as$
end if
zhi_lock=loc(1)-3
seek #1,zhi_lock
zhi_a=zhi_a+1
wend
get_zhi$=get_s$
end function
*********************************
举个例子:
open "***" for binary as #1
get #1,i
a$=get_zhi$() '(等于get #1,a$)
get #1,p
close #1
我当时就激动了,因为在调试和反编译的时候我就奇怪了为什么读数要两次seek,一看这源码,正好是两次seek(小帅这代码写得。。。无力吐槽),八成就是用在了剑侠风云里,果然,经分析基本一致,这样我就明白了之所以无法正确断句是因为chr$出了问题,然后看了看上面写法,chr的参数居然没有做处理,我一直以为大家会写成 i mod 16777216之类的,,当然了解的小机的实现之后这样的写法也只能表示接受。然后改了chr$的实现,一测游戏,正常了,谢天谢地。


IP属地:广东1楼2015-01-29 00:18回复
    找到bug修改完后的成就感噌噌噌


    IP属地:浙江来自Android客户端2楼2015-01-29 07:50
    收起回复
      对了,触摸屏是不是还不能用?


      IP属地:浙江来自Android客户端3楼2015-01-29 22:04
      收起回复