프로그래밍8 온라인 게임의 이동처리 기법 - 데드 레커닝 2편 (보간 처리) 지난번 글에서 데드 레커닝에 대한 개념에 대해 알아보았습니다. 2010.11.05 - [프로그래밍/서버] - 온라인 게임의 이동처리 기법 - 데드 레커닝 무려 13년 전쯤(...) 작성했던 글인데요 생각보다 읽어보신 분들이 많고 다음 글을 기다리시는 분들도 계셨는데 당시에 글을 작성하고 티스토리를 안하게 되는 바람에 이제서야 보게 되었습니다 ㅡㅡ;;; 게임 서버 프로그래머로 오래 일하다가 현재는 게임 업계를 떠나 웹 백엔드 개발자로 현업에 종사하고 있지만 지난 글에 관심을 가져주신 분들께 감사하는 마음에 오랜만에 기억을 떠올려 글을 작성해보겠습니다. (게임쪽을 떠난지도 시간이 좀 되는지라 요즘 어떤 더 좋은 방법들이 쓰일 수 있는 점 참고 바랍니다.) 그럼 이번 글에서는 데드 레커닝 처리시 서버와 클라이.. 2023. 6. 10. QNAN 과 IND 에 대해서 프로그래밍을 하시다 보면 아무리 봐도 소스나 계산식에는 문제가 없는데 오동작을 하게 되는 경우가 있습니다.저도 최근 그런 문제를 겪어 골머리를 썩혔는데요, 범인은 -1.#QNAN 이었습니다.그럼 IND 와 QNAN 이란 무엇인가??둘다 FPU 에서 이해할 수 없는 실수값을 처리할때 발생하는 문제 입니다.IND 는 정의 되어있지 않은 숫자 , QNAN 은 값을 정할 수 없음, SNAN 은 유효하지 않은 값으로 MSDN 에서도 확인하실 수 있습니다. ( NAN 은 Not a number )그럼 앞에 붙는 -1.# 나 1.#는 무엇이냐면 1.# 는 양수 무한대, -1.#는 음수 무한대 입니다.C 에서는 실수를 처리할때 지수부와 가수부를 나눠 저장하는데 지수부와 가수부의 사용 비트가 정해져 있기 때문에정확하게 .. 2012. 8. 17. 온라인 게임의 이동처리 기법 - 데드 레커닝 현재 3D 온라인 게임 프로젝트에서 게임서버를 제작하면서 미처 예상하지 못한 부분에서 많은 문제들이 있었고 해결해 나가면서 큰 도움이 되고 있습니다. 그 많은 문제들 중 캐릭터의 이동처리 부분이 있었습니다. 사용자가 키보드를 이용한 방향키 입력으로 이동 패킷을 서버에 보내주고 그것을 서버에서는 브로드캐스트로 뿌려주는 가장 기본적이고 간단한 방법이 있습니다. 하지만 이 방법은 엄청난 서버 부하를 가져오게 됩니다. 60프레임으로 돌아가는 게임이라고 한다면 1초에 60번이나 이동에 대한 패킷을 보내는것이 됩니다. 또한 받기도 해야겠죠. 그렇다면 어떻게 해야할까??? 유저의 상태가 기존상태에서 변화되었을때만 알리게된다면 어떨까요? 기존 상태를 계속 유지하고 있다면 일정한 규칙을 가진 행동을 반복하고 있을테니 패.. 2010. 11. 5. 아주아주 간단한 C++ 계산기 소스 클래스를 사용한 아주아주 간단한 계산기 소스 입니다. 입문 유저를 위한 초보 소스입니다. 덧셈뺄셈곱셈나눗셈만 가능합니다. 소스에 간단하게 주석처리를 하였으나 소스 자체가 쉽고 간단한 것이여서 단순히 클래스 사용 방법에 대해서 참고하시길 바랍니다. 클래스 해더에서 선언하고 cpp에서 정의를 하는 방법과 main.cpp에서 클래스의 맴버들을 사용하는 방법을 참고하는 용도로 보시면 되겠습니다. 2010. 6. 6. 너무나도 중요한 포인터 !! 포인터는 선언된 자료형을 따라간다. 예를들어 int 형 변수의 포인터를 만들고 싶으면 int 형 포인터를 만들어야 한다. 포인터는 주소를 이용하여 사용하는 것이다. int *p = 0; 이런식으로 포인터를 초기화할때 0 은 Null 값을 뜻한다.(\0) 고로 이 포인터는 아직 아무 주소도 가르키지 않고 있는것이다. int A = 100; int *p = &A; 이렇게 되면 포인터 p 는 A의 주소를 가져오게 된다. p의 값은 A의 주소가 들어가게 된다. -------------------------------------------------------------------------------------------------------&p = p의 주소값이 반환된다. --------------------.. 2010. 6. 6. Cpp마다 변수를 같이쓰자 !! extern 한 프로젝트에 여러가지 cpp를 사용하는데 어떠한 변수를 cpp끼리 같이 쓰고싶을때가 있을것이다. 이럴때 사용되는 것이 extern 이다. extern int A; 예를들어 A.cpp 에 int A 라는 변수가 있다. 그런데 B.cpp에서도 이 변수값을 그대로 사용하고 수정하고 싶다. 그럴경우 A.cpp에는 int A 라고 선언하여 사용하고 B.cpp 에서는 extern int A 라고 선언을 해주면 된다. 다른 cpp에서 사용중인 int A라는 값을 찾아서 B에서도 같이 사용할수 있게 되는것이다. 간단하게 cpp끼리 변수를 공유하여 사용할수 있는 방법이지만 , 여러가지 문제가 생길수도 있는 방법이다. C++ 에서는 이런식의 방법보다 class를 이용하여 해결하는게 바람직하다고 본다. 물론 간단한 프로그.. 2010. 6. 6. 이전 1 2 다음