
解决方案资源管理器—解决方案“MyGameServer”—右键—添加—新建项—文件夹
命名为:
Threads
解决方案资源管理器—解决方案“MyGameServer”—Threads—右键—添加—新建项—类库
命名为:
SyncPositionThread.cs
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;using Common;using System.Xml.Serialization;using System.IO;using Photon.SocketServer;//线程namespace MyGameServer.Threads{public class SyncPositionThread{private Thread t;//开启线程public void Run(){t = new Thread(UpdatePosition);t.IsBackground = true;t.Start();}//停止线程public void Stop(){t.Abort();}private void UpdatePosition(){Thread.Sleep(5000);//休息5秒while (true){Thread.Sleep(200);//休息0.2秒//进行同步SendPosition();}}//发送位置private void SendPosition(){//封装位置信息List<PlayerData> playerDataList = new List<PlayerData>();foreach (ClientPeer peer in MyGameServer.Instance.peerList)//遍历所有客户端{if (string.IsNullOrEmpty(peer.username) == false){PlayerData playerData = new PlayerData();//实例化playerData.Username = peer.username;//用户名playerData.Pos = new Vector3Data() { x = peer.x, y = peer.y, z = peer.z };//位置playerDataList.Add(playerData);//放入集合}}StringWriter sw = new StringWriter();XmlSerializer serializer = new XmlSerializer(typeof(List<PlayerData>));serializer.Serialize(sw, playerDataList);sw.Close();string playerDataListString = sw.ToString();Dictionary<byte, object> data = new Dictionary<byte, object>();data.Add((byte)ParameterCode.PlayerDataList, playerDataListString);foreach (ClientPeer peer in MyGameServer.Instance.peerList){if (string.IsNullOrEmpty(peer.username) == false){EventData ed = new EventData((byte) EventCode.SyncPosition );//实例化ed.Parameters=data;peer.SendEvent(ed, new SendParameters());}}}}}