开发体会

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

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,第二个是事件本身。在保序环境下是否可以达到目的?思考中...
原文地址:https://www.cnblogs.com/kaikai/p/102724.html