标题: 指针变量增减物品时避免出现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 编辑 ]


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

★★

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


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

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

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




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

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

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