• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

kaikai向前走

转职任务完成。崭新fn诞生
  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

开发体会

以后遇到的问题,尽量总结了记下来。免得犯同一个错误...

P.1
在不能cancel某个具体消息的消息管理器里,如何验证收到的某个消息是否有效?
该消息可能不断出现,但后一个的出现立即使得前一个失效。
比如:某玩家进入危险区域一定连续时间后将触发一个事件(如减血);篮球三秒违例。
一旦玩家离开区域,这个事件将失效。如果可以在消息管理器内找到这个消息并删除,问题就解决了。
假设不能cancel这个消息。那么可以用下面的方法来解决该问题:
对自发自收的情况,可以用一个循环自增的量做验证:
int EventStamp; // 事件戳
发生改事件时发送一个更新过的事件戳:
SendEvent(new Event(++EventStamp));
在收到事件的时候,如果不符合当前事件戳,就可以忽略掉。
if (Event.mEventStamp == EventStamp)
{
    // 处理该事件
}
例如:玩家进入危险区,发送了EventStamp=3的事件,离开时,EventStamp又增为4。在事件3到达时,发现事件戳不匹配,忽略。如果再次进入,发送EventStamp=5事件,并且在事件5到达之前没有发生离开,那么事件5将触发。

另一个问题是:对于网络事件,如何解决类似问题?为了验证EventStamp,接收者必须获得发送者的数据。如果同时发送2个事件,第一个用来通知EventStamp,第二个是事件本身。在保序环境下是否可以达到目的?思考中...

posted on 2005-02-06 11:06  kaikai  阅读(1079)  评论(4)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3