水雷的程序员用了某种多线程的技术?
帝国时代吧
全部回复
仅看楼主
level 11
Hero_Jason 楼主
不然我实在想不出为什么能搞出圣物复制,同一个科技能同时研究叠加,同一个可汗能同时在所有TC生成这类奇葩bug
我业余时间也自己做游戏写代码,我的代码里是绝对不会出这种问题的,因为哪怕两件事看起来是同时发生,它在代码逻辑里仍然会分个先后。
比如如果让我来写和尚取圣物的代码,肯定是和尚碰到庙的一瞬间,先检测庙里有圣物没有,必须≥1才能取,取了就-1。第二个和尚来检测的时候,肯定是庙里圣物已经-1完了,怎么还能取出来呢?除非压根不检测。
如果2个和尚一起来取,哪怕真就恰好在同一时间,同一帧发生了,程序上仍然也会一先一后,最终按单位ID,添加到场景的数组序号之类的东西排列,只要第一个和尚取的同时就已经修改了庙的圣物数的属性,第二个和尚还是取不出来的才对。
但帝国4这些bug给我的感觉就是,他这个程序很多东西压根是不按顺序发生,不按顺序检测条件的。第二个和尚取圣物的时候压根就不受第一个和尚取没取的影响。而且,如果是很多和尚紧贴着庙,同时取圣物,能出bug也就罢了,居然隔着不同距离,依次上来的都可以。
水雷的程序员肯定比我这个业余的不知高到哪里去了,也不会连这么简单的条件检测都不会写吧。那感觉唯一合理的解释就是,他们为了多核CPU优化,用了某种多线程的编程技术,让很多逻辑能够同时运行?但因为这种编程太高端了,很多单线程很好解决的事情它不好解决,所以才容易出错……?
2021年12月01日 00点12分 1
level 1
拿无限射程长矛来说,“不能同时研究的科技”这个逻辑其实是存在的,比如铁匠铺科技会有个提示是“无其他研究”
水雷很可能是因为智慧宫只有一个而忘记给里面的科技加入这个特性,因此当这些科技被移到出兵建筑的时候就出现了bug
2021年12月01日 00点12分 2
level 1
没实践过这些bug,但它们跟多线程没关系,就是忘记判断的低级错误
2021年12月01日 00点12分 3
level 1
他压根就只是在命令发布的时候判定了,不存在什么取的时候判定
这游戏很多莫名其妙的代码都挺离谱的,看他表现形式都能猜到大概是什么逻辑去写的,就NM非常离谱,就比如帝国2的命令队列就是真的只记录了“右键了一次”,然后到位之后在判断这个右键是干啥,帝国4就完全不一样,他只在你按下右键的时候判定目标的状态来决定你到底发布了什么命令,然后就硬把这个命令存进队列,走到位置不管怎么样反正强行运行这个命令,所以才会有shift操作非常**的问题
在你操作右键的时候,因为圣物剩余>0,他判定你现在是想取圣物,然后记了个僧侣去取圣物,至于取的时候根本就没判定
2021年12月01日 00点12分 5
他这种搞法显然底层屎山非常恐怖了,修个看起来非常简单的东西都要动底层,感觉后续开发会越来越离谱
2021年12月01日 00点12分
正常程序都不会这么写吧,下命令的时候做判断毫无意义,写代码太不负责了[汗]
2021年12月01日 02点12分
@旺旺他大锅 很显然他就是这么实现的,不然也不至于不能shift放圣物,或者贪官不能shift收税。
2021年12月01日 02点12分
学者点圣物再shift清真寺,就会带着圣物蹲到清真寺里[阴险]
2021年12月02日 00点12分
level 12
水雷怕不是连测试组都没有,这种低级bug真就测不出来吧[喷]
2021年12月01日 01点12分 6
level 11
之前看有人说过,这个还是貌似在coh2也有过的bug,美军战役的无坚不摧斯图亚特和毁天灭地谢尔曼都是有过这个无限叠加数值的bug[阴险]
2021年12月01日 01点12分 7
祖传?
2021年12月01日 09点12分
level 8
你是不是没学过面向对象啊?这些bug是不应该,但也没你说的那么肤浅
2021年12月01日 01点12分 8
我的确没系统学过,但大致有了解,我自己编程时能封装成类的都用类,大量使用类的继承。但是这些跟这个bug有关系吗,我怎么感觉没关系
2021年12月01日 02点12分
level 11
想多了,就是单纯的没检测条件而已。
水雷做的这个东西粗糙到什么程度,你让个稍微有点水平的MOD制作组来都不会这么惨,有些人是带着滤镜强行看不到。
2021年12月01日 01点12分 9
level 3
水雷程序员稀烂又不是一天两天的事了,帝国4接触到的属实大惊小怪,玩狗熊连的早就习惯了。
2021年12月01日 02点12分 10
level 2
虽然但是,没人会在游戏主逻辑里用多线程的
这个问题显然只是个有效操作验证时机的问题
2021年12月01日 02点12分 11
level 5
估计底层逻辑就是一坨,少了很多数据检查,也没把数据分开来
2021年12月01日 02点12分 13
level 6
首先你肯定不怎么写多线程,多线程不是这么用的。其次通过多人游戏的卡掉的情况可以知道,帝国四用的是帧同步。那么就很好解释了,僧兵排成一条线是拿不到多个圣物的,要在同一帧里面拿就能拿出多个。说明这个判断 圣物>0 在每个单位身上是独立的,这才是造成bug的原因。 黑衣就更简单了,科技能重复研究和重复生效这两个bug叠加了说明底层没有分离。
2021年12月01日 03点12分 14
1 2 尾页