标题: 指针变量增减物品时避免出现BUG的方法, 新剧本指令系列
性别:未知-离线 showzhuge
(诸葛宿)

★★

Rank: 6Rank: 6Rank: 6
组别 校尉
级别 破虏将军
功绩 28
帖子 760
编号 81273
注册 2006-9-1


发表于 2009-9-8 22:44 资料 文集 短消息 只看该作者
指针变量增减物品时避免出现BUG的方法

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

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


图片附件: 指针变量p.JPG (2009-9-8 22:55, 4.21 K)



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


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


图片附件: 豆子255.JPG (2009-9-8 22:44, 11.33 K)


加10以后


图片附件: 豆子255+10.JPG (2009-9-8 22:44, 8.77 K)



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



本来我们可以通过这样的命令来避免这个情况
如下图


图片附件: 豆子增加 出错版.JPG (2009-9-8 22:44, 15.9 K)


我要增加10颗豆子
当豆子大于等于245时 则豆子数直接为255


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


图片附件: 豆子增加1.JPG (2009-9-8 22:44, 15.33 K)



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


图片附件: 豆子增加2.JPG (2009-9-8 22:53, 10.73 K)



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


图片附件: 正确的增加过程.JPG (2009-9-8 22:44, 42.79 K)





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



图片附件: 最终结果.JPG (2009-9-8 22:44, 13.82 K)









同理,当我道具数为图中所示


图片附件: 豆子减少1.JPG (2009-9-8 22:44, 15.18 K)



如果我要减10颗豆子
合理的设置应该如下


图片附件: 豆子减少 出错版.JPG (2009-9-8 22:44, 14.54 K)




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



图片附件: 豆子减少2.JPG (2009-9-8 22:44, 12.42 K)





正确的设置方法如下


图片附件: 正确的减少过程.JPG (2009-9-8 22:44, 24.29 K)



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


顶部
性别:未知-离线 showzhuge
(诸葛宿)

★★

Rank: 6Rank: 6Rank: 6
组别 校尉
级别 破虏将军
功绩 28
帖子 760
编号 81273
注册 2006-9-1


发表于 2009-9-8 22:45 资料 文集 短消息 只看该作者
编辑完成

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


顶部
性别:男-离线 godtype
(毅)

刘国公
广南东路经略使
枢密直学士
★★★★★★★★★★★★
★★★

Rank: 24Rank: 24Rank: 24
柱国(正二品) 轩辕春秋年度最佳(轩辕工作室)
组别 经略使
级别 卫将军
好贴 1
功绩 1314
帖子 6207
编号 111321
注册 2007-2-18
来自 我家
家族 轩辕学院


发表于 2009-9-8 23:33 资料 个人空间 短消息 只看该作者
方法不错。
其实此BUG是必须从根本上在引擎中进行修改的,将指针变量的使用对象从DWORD改为BYTE,毕竟曹操传中最小单位仍然是BYTE。
不过我比较懒,能力也低,要我改这个就不太可能了,还是等几位引擎高人出手比较好。(虽然想法我是有,但实现起来比较麻烦。

不过我也有另外两套应对方法,一是对没用的71指令进行修改,再配合几个整形变量,来达到准确的数量测试和数量增减,二是调整一下78指令,同样可以达到准确的数量测试和数量增减。
顶部
性别:未知-离线 yeatss

Rank: 4
组别 士兵
级别 裨将军
功绩 6
帖子 350
编号 87587
注册 2006-10-16


发表于 2009-9-9 14:27 资料 短消息 只看该作者
能否讲解下如何用指针变量得到新增加的12件物品的详细步骤?谢谢
顶部
性别:未知-离线 showzhuge
(诸葛宿)

★★

Rank: 6Rank: 6Rank: 6
组别 校尉
级别 破虏将军
功绩 28
帖子 760
编号 81273
注册 2006-9-1


发表于 2009-9-9 15:24 资料 文集 短消息 只看该作者
回复 #4 yeatss 的帖子

武器和道具的储存方式不一样 武器是每一个储存一个BYTE 如果要用指针变量添加武器会非常麻烦
新武器请用整型变量4080指令
具体方法在STAR引擎配套文件的打包文件说明中有详细介绍
顶部
性别:未知-离线 yeatss

Rank: 4
组别 士兵
级别 裨将军
功绩 6
帖子 350
编号 87587
注册 2006-10-16


发表于 2009-9-9 17:31 资料 短消息 只看该作者
哦 没注意文件说明里有用法,谢谢了
顶部
性别:未知-离线 凤翔天血

Rank: 2Rank: 2
组别 士兵
级别 在野武将
功绩 3
帖子 31
编号 335766
注册 2009-8-21


发表于 2009-9-11 12:56 资料 短消息 只看该作者
  楼主的技术贴很精彩,作为技术小白暂时还看不太懂,,,,支持一下
顶部

正在浏览此帖的会员 - 共 1 人在线




当前时区 GMT+8, 现在时间是 2025-6-24 16:58
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

Powered by Discuz! 5.0.0 2001-2006 Comsenz Inc.
Processed in 0.010403 second(s), 9 queries , Gzip enabled

清除 Cookies - 联系我们 - 轩辕春秋 - Archiver - WAP