我有一个在远程系统上计算玩家动作的游戏。为了便于讨论,我们假设这个系统一次只能处理一个动作,但是玩家应该能够根据自己的喜好来排队。
每当播放器执行一个动作时,客户端向remote发送一个请求:
async void ActionAsync(){
string id = await ActionRequestToRemote();
CharacterActions.Add(new CharacterAction(id, currentlySelectedGameobject));
}
获取id已经足够快了,但之后需要远程大约6秒才能返回一个新的游戏状态,在此期间,所有进一步的await请求都会被遗忘(比如玩家在一秒钟内点击3次)。
什么是最好的方式让玩家保持排队动作,同时停止/调度await ActionARequestToRemote(id)
的执行,直到前一个完成运行?
每当远程处理完成时,调用以下方法以开始播放动画等。
void UpdateLocalGameState(string Type, bool success)
{
if (success)
{
switch (type)
{
case "ActionA":
LocallyDoActionA(CharacterActions[0]);
break;
case "ActionB":
LocallyDoActionB(CharacterActions[0]);
break;
case "ActionC":
LocallyDoActionC(CharacterActions[0]);
break;
}
}
}
我目前的工作通过列表recusrively出队本身,忽略请求的时候,球员点击,只是重新发送后,所有任务的执行已经完成。但这看起来很不雅,好像还有更好的办法?
1条答案
按热度按时间wljmcqd81#
在我看来,你似乎想使用某种
ConcurrentQueue
,并允许操作堆积在那里。就像E。g的。