Board logo

标题: 指针变量增减物品时避免出现BUG的方法 [打印本页]

作者: showzhuge    时间: 2009-9-8 22:44     标题: 指针变量增减物品时避免出现BUG的方法

首先先讲解一下指针变量的两个含义

指针变量p 是指内存地址
图中的4917723换算成16进制就是4B09DB
就是豆子的内存地址
[attach]80827[/attach]

指针变量*p 是指该内存地址的值 占四个字节
通常情况我用指针变量*p来增减物品数会是一个好方法


有两种情况指针变量会产生BUG 第一种情况是当第一个字节为豆子数为255时 若再加 增第二个物品就会增多
如图
[attach]80828[/attach]
加10以后
[attach]80829[/attach]

第二种情况就是物品数如果小于0 也会出现错误这里就略过了



本来我们可以通过这样的命令来避免这个情况
如下图
[attach]80830[/attach]
我要增加10颗豆子
当豆子大于等于245时 则豆子数直接为255


现在问题来了 因为我们知道 物品的数量只有一个字节 而实际山现在我的指针变量p 0 代表了4中物品的地址
也就实际上是4917723-4917726的值为 37 02 01 01
[attach]80831[/attach]

正确的情况因为现在豆子数小于245 那么就应该加10变为65 值应该为  41 02 01 01
但是实际上现在指针变量*p0并不是小于F5(也就是十进制245)的37(也就是55颗) 而是远远大于F537 02 01 01
所以按照判定大于245(F5)时豆子变成了255(FF 00 00 00)颗 其他三个物品消失
[attach]80832[/attach]

难道没有解决办法了吗?其实很简单,只要利用一个整型变量来暂存一下数据就行了。
我的目的是让指针变量*p在计算时保证只有第一个字节起作用,也就是说我需要指针变量*p的值是XX 00 00 00。也就是说我要让4917724-4917726这三个字节在计算的时候为0。
那么我直接把4917724赋值为0就行了。不过在计算后还要让这些物品回来,这里就需要用一个整型变量保存一下。方法如下
[attach]80833[/attach]



这样的话 最终结果如下图所示 就达到了我需要的效果

[attach]80834[/attach]







同理,当我道具数为图中所示
[attach]80835[/attach]

如果我要减10颗豆子
合理的设置应该如下
[attach]80836[/attach]


当豆子小于10颗(0A)时,则豆子数为0。
我现在的豆子数为1颗,应该满足以上条件,但是问题是现在的指针变量*p值并不是01,而是01 02 01 01远远大于0A
结果没有满足01小于0A所以等于00的条件,而是变成了01 02 01 01-0A
结果如下

[attach]80837[/attach]



正确的设置方法如下
[attach]80838[/attach]

[ 本帖最后由 showzhuge 于 2009-9-8 22:58 编辑 ]

图片附件: 指针变量p.JPG (2009-9-8 22:55, 4.21 K) / 该附件被下载次数 144
http://www.xycq.org.cn/forum/attachment.php?aid=80827



图片附件: 豆子255.JPG (2009-9-8 22:44, 11.33 K) / 该附件被下载次数 143
http://www.xycq.org.cn/forum/attachment.php?aid=80828



图片附件: 豆子255+10.JPG (2009-9-8 22:44, 8.77 K) / 该附件被下载次数 142
http://www.xycq.org.cn/forum/attachment.php?aid=80829



图片附件: 豆子增加 出错版.JPG (2009-9-8 22:44, 15.9 K) / 该附件被下载次数 144
http://www.xycq.org.cn/forum/attachment.php?aid=80830



图片附件: 豆子增加1.JPG (2009-9-8 22:44, 15.33 K) / 该附件被下载次数 139
http://www.xycq.org.cn/forum/attachment.php?aid=80831



图片附件: 豆子增加2.JPG (2009-9-8 22:53, 10.73 K) / 该附件被下载次数 144
http://www.xycq.org.cn/forum/attachment.php?aid=80832



图片附件: 正确的增加过程.JPG (2009-9-8 22:44, 42.79 K) / 该附件被下载次数 142
http://www.xycq.org.cn/forum/attachment.php?aid=80833



图片附件: 最终结果.JPG (2009-9-8 22:44, 13.82 K) / 该附件被下载次数 150
http://www.xycq.org.cn/forum/attachment.php?aid=80834



图片附件: 豆子减少1.JPG (2009-9-8 22:44, 15.18 K) / 该附件被下载次数 151
http://www.xycq.org.cn/forum/attachment.php?aid=80835



图片附件: 豆子减少 出错版.JPG (2009-9-8 22:44, 14.54 K) / 该附件被下载次数 144
http://www.xycq.org.cn/forum/attachment.php?aid=80836



图片附件: 豆子减少2.JPG (2009-9-8 22:44, 12.42 K) / 该附件被下载次数 145
http://www.xycq.org.cn/forum/attachment.php?aid=80837



图片附件: 正确的减少过程.JPG (2009-9-8 22:44, 24.29 K) / 该附件被下载次数 150
http://www.xycq.org.cn/forum/attachment.php?aid=80838


作者: showzhuge    时间: 2009-9-8 22:45

编辑完成

[ 本帖最后由 showzhuge 于 2009-9-8 22:54 编辑 ]
作者: godtype    时间: 2009-9-8 23:33

方法不错。
其实此BUG是必须从根本上在引擎中进行修改的,将指针变量的使用对象从DWORD改为BYTE,毕竟曹操传中最小单位仍然是BYTE。
不过我比较懒,能力也低,要我改这个就不太可能了,还是等几位引擎高人出手比较好。(虽然想法我是有,但实现起来比较麻烦。

不过我也有另外两套应对方法,一是对没用的71指令进行修改,再配合几个整形变量,来达到准确的数量测试和数量增减,二是调整一下78指令,同样可以达到准确的数量测试和数量增减。
作者: yeatss    时间: 2009-9-9 14:27

能否讲解下如何用指针变量得到新增加的12件物品的详细步骤?谢谢
作者: showzhuge    时间: 2009-9-9 15:24     标题: 回复 #4 yeatss 的帖子

武器和道具的储存方式不一样 武器是每一个储存一个BYTE 如果要用指针变量添加武器会非常麻烦
新武器请用整型变量4080指令
具体方法在STAR引擎配套文件的打包文件说明中有详细介绍
作者: yeatss    时间: 2009-9-9 17:31

哦 没注意文件说明里有用法,谢谢了
作者: 凤翔天血    时间: 2009-9-11 12:56

  楼主的技术贴很精彩,作为技术小白暂时还看不太懂,,,,支持一下




欢迎光临 轩辕春秋文化论坛 (http://www.xycq.org.cn/forum/) Powered by Discuz! 5.0.0