骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

搜索
查看: 210|回复: 2

[求助] 各位有没有遇到过一次按键代码执行两次的情况?

[复制链接]
鲜花(160) 鸡蛋(0)
发表于 2018-7-8 07:26:54 | 显示全部楼层 |阅读模式
如题,战团版本1.168下面说下具体情况。

在下写了一段按键触发的代码,其中一部分是把目标部队的某种健康的成员移除,再在俘虏里添加等量的这种成员。但出现了这样一种情况,就是在移除最后一个该种健康士兵的时候,出现了代码执行两次的情况。
为此,在下给这个按键触发器的开端加了个-99的短消息做标记,在这段代码中获取stack_size时将获取的数量也以短消息形式发出。结果就是,当上述情况时,会出现-99 50 50 的情况(50是stack_size),也就是说触发器本身执行了一次,但代码却执行了两次!!!

补充的是,这绝不是在下一时大意把代码复制了两次的问题,因为这种情况只会出现一次。之后,在这支部队中的移动就不会再出现这种情况(如果换了部队还会再出现一次)。
另外,只出现在移动最后一个士兵的时候出现。比如目标stack的数量为50,一个个移动最终会得到51个新俘虏,10个10个移动会得到60个,50个一起动会得到100个。都是在最后一个士兵被移动时出现执行两次的情况。
再另,更奇怪的是,在下写的反向命令却没有出现过这样的情况——这两段代码除了几个命令不一样,结构完全相同。如下折叠中。

(点击展开 / 收起)




(点击展开 / 收起)




所以,在下的问题就是,这种情况究竟是怎么导致的?这种情况究竟该如何避免?
鲜花(163) 鸡蛋(67)
发表于 2018-8-9 15:13:21 | 显示全部楼层
(party_prisoner_stack_get_size,  后续的东西,无论执行不执行都是逻辑真。不需要弄个人数大于0的判断么?
数字变量可读性不好,没仔细看后边的内容。

个人观点, 不太建议把人机互动条件 key_is_down, key_clicked 这行弄在复杂代码内部的,特别是每帧执行的那种。
你没法知道MB主程序的机制,人机互动的标记能维持多久,什么时候清除。我一般会直接放到触发条件里边去。
鲜花(160) 鸡蛋(0)
 楼主| 发表于 2018-8-9 17:00:25 | 显示全部楼层
本帖最后由 达尔克内斯 于 2018-8-9 17:01 编辑
Borr 发表于 2018-8-9 15:13
(party_prisoner_stack_get_size,  后续的东西,无论执行不执行都是逻辑真。不需要弄个人数大于0的判断么 ...

根据stack进行的循环,还是俘虏,不用考虑伤患,没可能等于0的吧?而就算是0,就结果而言应该也没有问题。移动0等于没有移动而已。

关于第二条,虽然感谢这条建议,但有时候这样会相对麻烦。比如这里,选择的其他的流程是一定的,根据按键差异进行不同处理。
如果把按键作为触发条件,要么根据三种按键写三遍,要么还是得建立一个中介,不如这样来得直接、节省。

另,这个帖子里的问题,最后在下是用party_count_companions_of_type和party_count_prisoners_of_type代替了原先的party_stack_get_size和party_prisoner_stack_get_size
,也就是省去了循环stack来寻找目标兵种的步骤。代码也省了不少。

但是,在下的疑惑在于,单看逻辑在下看不出什么问题,在执行中也只有涉及到“最后一个”时才出错。
而这个情况,至今在下也没办法解释,也没有办法知道什么时候会发生。所以此帖也一直没有加“已解决”。

最后,还是感谢回复了。

您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

Archiver|手机版|小黑屋|骑马与砍杀中文站 ( 鄂ICP备07001403号 )

GMT+8, 2018-9-26 20:49 , Processed in 0.089625 second(s), 20 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表