블로그

메이플 포트폴리오 현황(오류 수정) 본문

프로그래밍/C++

메이플 포트폴리오 현황(오류 수정)

이동헌 2022. 11. 8. 16:07

1. 서버가 켜진 상태에 클라이언트에서 로그인했을때 화면이 멈춤. 이 때 마우스의 좌표는 잘 그려지지만 화면이 무효화가 안돼 계속해서 그려지는 상황. 게임 내 오브젝트들은 한개도 그려지지 않지만 다른 클라이언트에서 정지한 클라이언트의 움직임을 확인해보면 멀쩡하고, 서버에도 잘 전송되는 것으로 보임

> 오류 수정 완

문제 근본에 초점을 맞추었다. 정확히는 게임이 멈추는 것이 아닌 렌더링만 멈추는 것이라 생각하여 렌더링 관련 객체들의 문제인지 살펴보았다. 찾아보니 원인은 Direct2D로 렌더링을 하는데, CoInitializeEx에서 COINIT_APARTMENTTHREADED 플래그를 사용중이라 멀티쓰레드 환경에서 간헐적으로 ID2D1RenderTarget이 동작하지 않는 문제였다. COINIT_MULTITHREADED 플래그로 변경하여 해결하였다.

 

2. 서버에서 간헐적으로 데이터베이스에 있는 클라이언트 데이터를 보내려고 할 때 mysqlRes 값이 null이 되어 힙 손상 오류 발생

> DBManager 클래스에 CriticalSection을 도입하여 데이터베이스에 접근하는 모든 함수의 시작 부분에 CriticalSection 객체를 거치도록 수정하였다.

 

3. 클라이언트에서 다른 클라이언트의 애니메이션을 그리려 할 때 텍스쳐가 null이라는 오류 발생

> 1번 오류와 동일한 원인이었는지, 1번을 수정한 뒤에 오류가 발생하지 않음

 

4. 서버에서 몬스터 위치 계산 후에 클라이언트로 전송하는데, 서버 적용하지 않은 클라이언트에서 잘 사용했던 충돌 계산을 그대로 서버에 가져놓았으나 몬스터의 위치가 충돌체와 전혀 상관없는 위치에 있음(공중에 떠있기, 땅 통과하기 등)

> 아직 수정하지 못하였다. 이걸 해결하면서 동시에 포트폴리오 작성/이력서 작성 및 코딩테스트 연습을 병행해야 할 것 같다.