private bool PlayKeyFrame()
    {
        if (_lockStepKeyFrameDataList.Count == 0)
        {
            // 数据还未接收完毕,继续等待
            return(false);
        }
        LockStepKeyFrameData lockStepKeyFrameData = _lockStepKeyFrameDataList.Values[0];

        if (lockStepKeyFrameData.KeyFrame == _clientFrame)
        {
            foreach (LockStepClientMsgItem LockStepClientMsgItem in lockStepKeyFrameData.ReceiveMsgList)
            {
                if (LockStepClientMsgItem.msgId == MsgID.SteerPositionRsp)
                {
                    SteerPositionRsp resp   = (SteerPositionRsp)LockStepClientMsgItem.msg;
                    GameEntity       entity = _context.CreateEntity();
                    entity.AddPlayerId(resp.PlayerId);
                    entity.AddSteerPosition(new Vector2(resp.X, resp.Y));
                    Log4U.LogDebug("LockStepClientMgr:FixedUpdate _clientFrame=", _clientFrame, " resp=", resp.ToString());
                }
            }
            _lockStepKeyFrameDataList.RemoveAt(0);
            _nearstServerKeyFrame = _clientFrame + Config.SYN_RATE_SERVER;
            _gameController.Execute();
            _clientFrame++;
        }
        return(true);
    }
    private void OnSteerPositionRsp(IMessage msg, object ext)
    {
        SteerPositionRsp steerPositionRsp = (SteerPositionRsp)msg;
        int serverKeyFrame = steerPositionRsp.KeyFrame;
        LockStepClientMsgItem lockStepClientMsgItem = new LockStepClientMsgItem(MsgID.SteerPositionRsp, msg);
        LockStepKeyFrameData  lockStepKeyFrameData;

        if (_lockStepKeyFrameDataList.ContainsKey(serverKeyFrame))
        {
            lockStepKeyFrameData = _lockStepKeyFrameDataList[serverKeyFrame];
        }
        else
        {
            lockStepKeyFrameData = new LockStepKeyFrameData(serverKeyFrame);
            _lockStepKeyFrameDataList.Add(serverKeyFrame, lockStepKeyFrameData);
        }
        lockStepKeyFrameData.AddLockStepClientMsgItem(lockStepClientMsgItem);
    }
    private void OnLockStepEnd(IMessage msg, object ext)
    {
        LockStepEnd rsp            = (LockStepEnd)msg;
        int         serverKeyFrame = rsp.KeyFrame;

        _serverKeyFrame = Math.Max(_serverKeyFrame, serverKeyFrame);
        int msgTotal = rsp.MsgTotal;
        LockStepKeyFrameData lockStepKeyFrameData;

        if (_lockStepKeyFrameDataList.ContainsKey(serverKeyFrame))
        {
            lockStepKeyFrameData = _lockStepKeyFrameDataList[serverKeyFrame];
        }
        else
        {
            lockStepKeyFrameData = new LockStepKeyFrameData(serverKeyFrame);
            _lockStepKeyFrameDataList.Add(serverKeyFrame, lockStepKeyFrameData);
        }
        lockStepKeyFrameData.SetMsgTotal(msgTotal);
    }