작성
·
407
0
안녕하세요?
좋은 강의 제공 주셔셔 감사합니다.
코드를 따라 가면서 궁금한 사항이 있어 글 남기게 되었습니다.
서버와 클라가 서로 연결 될 때
ClientSession.cs의 MyPlayer의 정보가
MyPlayer.Info.PosInfo.State = CreatureState.Idle;
MyPlayer.Info.PosInfo.MoveDir = MoveDir.None; 으로 정의 되는걸로 보입니다. (코드 하단)
public override void OnConnected(EndPoint endPoint)
{
Console.WriteLine($"OnConnected : {endPoint}");
MyPlayer = PlayerManager.Instance.Add();
{
MyPlayer.Info.Name = $"Player_{MyPlayer.Info.PlayerId}";
MyPlayer.Info.PosInfo.State = CreatureState.Idle;
MyPlayer.Info.PosInfo.MoveDir = MoveDir.None;
MyPlayer.Info.PosInfo.PosX = 0;
MyPlayer.Info.PosInfo.PosY = 0;
MyPlayer.Session = this;
}
RoomManager.Instance.Find(1).EnterGame(MyPlayer);
}
궁금한 사항은 하기 부분 입니다.
연결 된 이후에 MyPlayer가 어디서 변경 되기에
public static void C_MoveHandler(PacketSession session, IMessage packet) 에서 session 정보를 받아다가 쓸 수 있는지 알 수 있을까요 ?? ㅜㅜ
특히 C_MoveHandler 코드 중에서 PlayerInfo info = clientSession.MyPlayer.Info; 부분이 이해가 안되는데,
현재 MyPlayer가 정보 중 Move Dir 은 None으로 계속 유지되고 있는게 아닌가요 ? 어디서 MyPlayer정보가 업데이트 되는지 알 수 있을까요 ? ㅜ
//일단 서버에서 좌표 이동
PlayerInfo info = clientSession.MyPlayer.Info;
info.PosInfo = movePacket.PosInfo;
//다른 플레이어한테도 알려준다.
S_Move resMovePacket = new S_Move();
resMovePacket.PlayerId = clientSession.MyPlayer.Info.PlayerId;
resMovePacket.PosInfo = movePacket.PosInfo;
clientSession.MyPlayer.Room.Broadcast(resMovePacket);
답변 3
0
무엇을 여쭤보시는건지 질문이 잘 이해가 가지 않습니다.
MyPlayer는 위와 같은 정보를 포함하고 있고,
각 정보는 필요에 따라 이리 저리서 건드리고 있습니다.
0
답변 감사합니다.
혹시 말씀 사항에서 movePacket은
서버 측에서 의 C_MoveHandler에서 본다면
public static void C_MoveHandler(PacketSession session, IMessage packet) 에서
packet에 해당되는 데이터로 타고 넘어 오는 걸로 보이고,
제가 궁금한 부분은 session의 경우는 해당 데이터를 받은
ClientSession 클래스 정보가 넘어 오는 걸로 보여집니다 .
ClientSession 정보 중 MyPlayer가 가장 궁금한 부분인데, 하기 코드에서 info.PosInfo는 클라에서 넘어오는 movPacket으로 업데이트 되는데 clientㄴSession,MyPlayer의 정보는 언제 업데이트 되는지 알 수 있을까요?
패킷이 조립되거나 데이터가 전송되면 결국은 movePacket 정보가 바뀌어질텐데, clientSession의 MyPlayer 정보 또한 바뀌는 부분이 어딘지 알 수 있을 까요 ?ㅜ
PlayerInfo info = clientSession.MyPlayer.Info;
info.PosInfo = movePacket.PosInfo
0
정답은 클라 쪽에서 움직이고 있습니다.
서버에서는 나중에 해당 좌표에 대한 검증을 하지만,
기본적으로 각 플레이어 좌표 계산은 각자의 Client에서 하는 것입니다.