• 主页

  • 投资

  • IT

    🔥
  • 设计

  • 销售

  • 共151篇

    Unity - 游戏引擎

关闭

返回栏目

关闭

返回Unity - 游戏引擎栏目

68 - 配置 - Threads - 服SyncPositionThread.cs线程

作者:

贺及楼

成为作者

更新日期:2024-06-06 19:38:13

新建线程文件夹Threads

解决方案资源管理器—解决方案“MyGameServer”—右键—添加—新建项—文件夹
命名为:

  1. Threads

新建线程文件SyncPositionThread.cs

解决方案资源管理器—解决方案“MyGameServer”—Threads—右键—添加—新建项—类库
命名为:

  1. SyncPositionThread.cs
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading;
  6. using Common;
  7. using System.Xml.Serialization;
  8. using System.IO;
  9. using Photon.SocketServer;
  10. //线程
  11. namespace MyGameServer.Threads
  12. {
  13. public class SyncPositionThread
  14. {
  15. private Thread t;
  16. //开启线程
  17. public void Run()
  18. {
  19. t = new Thread(UpdatePosition);
  20. t.IsBackground = true;
  21. t.Start();
  22. }
  23. //停止线程
  24. public void Stop()
  25. {
  26. t.Abort();
  27. }
  28. private void UpdatePosition()
  29. {
  30. Thread.Sleep(5000);//休息5秒
  31. while (true)
  32. {
  33. Thread.Sleep(200);//休息0.2秒
  34. //进行同步
  35. SendPosition();
  36. }
  37. }
  38. //发送位置
  39. private void SendPosition()
  40. {
  41. //封装位置信息
  42. List<PlayerData> playerDataList = new List<PlayerData>();
  43. foreach (ClientPeer peer in MyGameServer.Instance.peerList)//遍历所有客户端
  44. {
  45. if (string.IsNullOrEmpty(peer.username) == false)
  46. {
  47. PlayerData playerData = new PlayerData();//实例化
  48. playerData.Username = peer.username;//用户名
  49. playerData.Pos = new Vector3Data() { x = peer.x, y = peer.y, z = peer.z };//位置
  50. playerDataList.Add(playerData);//放入集合
  51. }
  52. }
  53. StringWriter sw = new StringWriter();
  54. XmlSerializer serializer = new XmlSerializer(typeof(List<PlayerData>));
  55. serializer.Serialize(sw, playerDataList);
  56. sw.Close();
  57. string playerDataListString = sw.ToString();
  58. Dictionary<byte, object> data = new Dictionary<byte, object>();
  59. data.Add((byte)ParameterCode.PlayerDataList, playerDataListString);
  60. foreach (ClientPeer peer in MyGameServer.Instance.peerList)
  61. {
  62. if (string.IsNullOrEmpty(peer.username) == false)
  63. {
  64. EventData ed = new EventData((byte) EventCode.SyncPosition );//实例化
  65. ed.Parameters=data;
  66. peer.SendEvent(ed, new SendParameters());
  67. }
  68. }
  69. }
  70. }
  71. }