SDL中文论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4749|回复: 0
打印 上一主题 下一主题

[network] 为同步(网络、回放录像),编程上要注意

[复制链接]

149

主题

331

帖子

2445

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2445
跳转到指定楼层
楼主
发表于 2020-9-5 18:47:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一、能改变城市内三个列表顺序的操作
三个列表指“未”武将、“完”武将,城内部队。像出征时,取消出征操作要使出征部队回到原来位置;像AI操作时,不要动不动就排序城内部队,AI排序过了的“录像回放”也一定要让排序。
一旦城市被攻陷,部队/武将去哪个城是严格按照列表中顺序来的。

二、怎么会出现以下的一连同一个地点出发的move命令
  1. [command]
  2.         [move]
  3.                 x="19,18,17,16,15"
  4.                 y="5,4,4,3,3"
  5.         [/move]
  6. [/command]
  7. [command]
  8.         [move]
  9.                 x="19,18,17,16,15"
  10.                 y="5,4,4,3,3"
  11.         [/move]
  12. [/command]
复制代码
可能原因:一些操作执行后,该有清空undo_stack!举个例子,把N个武将从A城移动B城,但不清空undo_stack;
1:把部队从(19,5)移动到(15,3);(命令池中多一条move命令)
2:N个武将被从A城移动B城;(命令池中多一条move_heros命令)
3:玩家按下“撤消”,由于undo_stack不空,部队根据undo_stack从(15,3)移回到了(19,5),同时命令池中最上那条move_heros命令被删除。
4:玩家又把部队从(19,5)移动到(15,3);(命令池中多一条move命令)
————于是致出现以上写的两条连续move命令。
解决,该把undo_stack清空的就该清掉,该清掉操作有:移动武将、征兵、解散部队、建造。

unit_map::scout_unit_部队计算路程时,要使用pathfind::emergency_path_calculator,而不是pathfind::shortest_path_calculator。
即使已使能“忽略zoc”,shortest_path_calculator依旧和地图当前部队分布相关,也就是说,同样是两个城市,不同时刻用它计算路程时可能会出不一样结果。这就可能造成两个问题。
  • 回放不同步。回放时总是使用“最早”计算出路程,而且一直用到结束;实时时,要是出现中途加载存档,这时再计算路程,由于部队分布和一开始不一样,这就造成这个路程可能和开始时不一样。
  • 中途加载,可能会出现不能正确反映路程情况。shortest_path_calculator会考虑到部队分布,而这种路径是不应该考虑部队。

emergency_path_calculator在计算路程时只和地形有关,和部队分布无关。但这里要注意一个问题,一旦将来支持动态改地图,这时需要把缓存的路程清空,以让重新计算。

mr_data.own_cities类型是std::map<int, enemy_data>,不能是std::map<artifical*, enemty_data>。
std::map是排序容器,使用std::map<artifical*, enemty_data>时,它会按“artifical*”指针值进行排序,这就造成不同运行实例时各城市顺序可能不一样,从而导致回放不同步。使用std::map<int, enemy_data>,其中“int”是cityno,这会保证每次运行城市顺序都是一致。

移动力须保持同步
一只部队处于被挑衅,假设在位置上它既不能移动又不能攻击,在进入end_turn前,实时情况下它的移动力要被置0,由于被置0,它下回合不会进入resting状态。可在录像情况下,由于该部队什么命令也没有,它的移动力没变化,依旧保持满,致使会让进入resting状态。——由于一个没resting、一个有resting,导致出来hp不同步。

解决办法
实时时应该把修改了移动以命令形式发向回放器。
当前解决办法是增加个能一不能进入resting状态判断(no_enter_resting)。接下要做部队任务,可能会和这个有关,到时再决定怎么改。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|丽谷软件|libsdl.cn

GMT+8, 2025-5-1 23:12 , Processed in 0.052116 second(s), 19 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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