public void OnRoleMove(ERole role, C2SMove pack) { role.Movement.IsNavAuto = false; if (pack.IsUsePosition) { // new EntityMove(role, pack.Position.X, pack.Position.Y); // old //var speed = pack.Speed; //var xt = pack.X - role.Position.x; //var yt = pack.Y - role.Position.y; //var tmp = Math.Max(Math.Abs(xt), Math.Abs(yt)); //var x = xt / tmp * speed; //var y = yt / tmp * speed; //EntityMove(role, role.Position.x + x, role.Position.y + y); } else { // 朝着当前朝向前进(使用timer处理) if (role.Movement.MoveTimerId > 0) { Program.TimerManager.Remove(role.Movement.MoveTimerId); role.Movement.MoveTimerId = 0; } role.Movement.Orientation.X = pack.Orientation.X; role.Movement.Orientation.Y = pack.Orientation.Y; role.Movement.Orientation.Z = pack.Orientation.Z; role.Movement.MoveTimerId = Program.TimerManager.Insert(50, 50, int.MaxValue, null, obj => { var x = pack.Orientation.X; var y = pack.Orientation.Y; var l = Math.Sqrt(x * x + y * y); EntityMove(role, role.Position.x + pack.Speed * 50 / 1000 * x / l, role.Position.y + pack.Speed * 50 / 1000 * y / l); }); } }
private static void Main() { LogHelp.Init(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "LogConfig.log4net")); LogHelp.TestLog(); log = LogHelp.GetLogger(typeof(Program)); Console.SetIn(new StreamReader(Console.OpenStandardInput(8192))); Console.WriteLine("Hello Client!"); #region Normal Socket var client = new NormalClient(20, 8192); client.Init(2048); client.MessageHandler.SetDeserializeFunc((bytes, guid) => { var protoId = BitConverter.ToInt32(bytes); return(ProtocolParser.Instance.GetParser(protoId).ParseFrom(bytes)); }); client.MessageHandler.SetSerializeFunc((protocol) => { return((protocol as ProtocolBufBase).Serialize()); }); client.StartConnect("127.0.0.1", 11000); #endregion Normal Socket Task.Run(() => { var stopwatch = new Stopwatch(); stopwatch.Start(); var t1 = stopwatch.ElapsedMilliseconds; var t2 = stopwatch.ElapsedMilliseconds; while (true) { t1 = stopwatch.ElapsedMilliseconds; var count = client.MessageHandler.MessageQueue.Count; for (var i = 0; i < count; ++i) { if (client.MessageHandler.MessageQueue.TryDequeue(out var msg)) { (msg as ProtocolBufBase).OnProcess(); } } t2 = stopwatch.ElapsedMilliseconds; var t = (int)(t2 - t1); System.Threading.Thread.Sleep(t < 30 ? 30 - t : 1); } }); while (true) { var str = Console.ReadLine(); var args = str.Split(' '); switch (args[0]) { case "register": if (args.Length > 2) { var pack = new C2SRegister { Name = args[1], Password = args[2] }; client.StartSend(pack); } break; case "login": if (args.Length > 2) { var pack = new C2SLogin { Name = args[1], Password = args[2] }; client.StartSend(pack); } break; case "move": if (args.Length > 2) { var pack = new C2SMove { X = double.Parse(args[1]), Y = double.Parse(args[2]) }; client.StartSend(pack); } break; default: break; } } }