假设入座玩家总人数为5个,自己的座位永远在下方记为1,玩家依次入座,顺序为2,3,4,5如图所示:
此时我的座位下标索引为0,即游戏中都有MyUserId 的判断用来区分是否是自己,如果是自己的PosIndex永远取0.
如果我入座的方位是2,那么就取第一个位置..此时视图所展示的情况应该如图:
要保证自己视图永远在下方,那么就需要对应的更新坐标位置,并保证入座显示全部正常.
故:当我的方位Direction = 2 (posIndex = 0),
例1:如果此时有一个玩家入座到Direction = 4 (posIndex = 2)的方位上:
玩家的方位Direction = 4 > 我的方位Direction = 2 (posIndex = 0)
posIndex = 4 - 2 = 2,即 其他玩家的方位大于我的方位 otherDir > myDir => posIndex = otherDir - myDir
例2:如果此时有一个玩家入座到Direction = 1 (posIndex = 4)的方位上:
玩家的方位Direction = 1 < 我的方位Direction = 2
posIndex = 5(玩家总数) + 1(其他玩家Dir) - 2(我的Dir) = 4,即 其他玩家的方位小于我的方位 otherDir < myDir => posIndex = playerCount + otherDir - myDir..
伪代码如下:
void Test(ServerMessage serverMsg,MyUserInfo myInfo) { int posIndex = -1; //坐标索引集合,5个玩家 List<int> PosList = new List<int> {1, 2, 3, 4, 5}; //测试代码,如果是自己,永远取第一个. if (serverMsg.userId == myInfo.userId) { posIndex = PosList[0]; } else { //如果玩家方位大于自己的方位的话 if (serverMsg.Direction > myInfo.dir) { //直接用玩家的方位减去自己的方位即为玩家的头像位置 posIndex = PosList[serverMsg.Direction - myInfo.dir]; } else { //用玩家最大人数减去自己的方位再加上玩家的方位,即为玩家的位置 posIndex = PosList[PosList.Count - myInfo.dir + serverMsg.Direction]; } } }