728x90 반응형 전체 글165 게임서버) 7. 논블로킹 소켓 논블로킹 소켓 소켓 관련 시스템 콜에 대하여 네트워크 시스템이 즉시 처리할 수 없는 경우라도 시스템콜이 바로 리턴되어 응용 프로그램이 block되지 않게 하는 소켓 모드이다. 싱글게임이 아닌 온라인 게임과 같이 통신 상대가 여럿이거나 여러가지 작업을 병행하려면 nonblocking 또는 비동기 모드를 사용해야 한다. ioctlsocket function (winsock.h) - Win32 apps The ioctlsocket function (winsock.h) controls the I/O mode of a socket. learn.microsoft.com 서버 논블로킹 소켓 생성 논블로킹 소켓은 블로킹소켓을 생성했을때와 동일한 순서로 생성하되, 바인딩전에 아래와 같은 코드를 설정해주어야 한다. u_l.. 게임서버 2023. 1. 12. 게임서버) 6. 소켓프로그래밍 소켓프로그래밍 //TODO 서버 소켓프로그래밍 순서 0.소켓초기화 1.새로운 소켓 생성 2.소켓에 주소/포트 번호 바인딩 3.Listen설정 4.Accept설정 5.통신 //필요한 헤더파일 #include #include #include // 게임서버 2023. 1. 11. 게임서버) 3.멀티쓰레드 공유자원 멀티 쓰레드 공유자원 공유 자원은 여러 프로세스가 공동으로 이용하는 변수, 메모리, 파일 등을 말한다. 공유 자원은 공동으로 이용되기 때문에 누가 어떻게 데이터를 읽거나 쓰느냐에 따라 결과가 달라질 수 있다. 이러한 공유자원을 이해하기 위해서는 일단 메모리의 구조를 이해해야된다. 메모리구조 메모리는 총 4가지 구간으로 나눌수 있는데, 각각의 영역은 다음과 같은 역할을 수행한다. -코드영역: 코드영역은 실행할 프로그램의 코드가 저장되는 영역으로 텍스트영역이라고도 부른다.CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리하게 되며, 공유하더라도 문제가 되지않는다. 단, 우리가 적은 코드 순서대로 실행되는 것이 아닌 CPU파이프라인에 영향을 받아 순서가 다소 다를수 있다. -스택 영역:스택영역은 함수의.. 게임서버 2023. 1. 6. 게임서버) 2. 멀티쓰레드 멀티쓰레드 //TODO 쓰레드 생성 쓰레드는 다음과 같이 생성이 가능하다. #include std::thread t(실행할 함수); 이런식으로 쓰레드를 생성하고 사용할수 있지만 문제가 발생할 수 있다. 예를 들어 자식 스레드가 아직 실행 중인데 부모 스레드가 종료한되는 경우이다. 기본적으로 메인 스레드가 종료되고도 자식 스레드가 계속 실행 중인 것은 비정상적인 상황으로 본다. 때문에 이 경우, 강제로 오류를 발생시킨다. 이러한 경우를 위해 join() 이라는 함수를 통해 해결할수 있다. 만약 자식쓰레드가 join을 호출하게 되면 부모 스레드는 자식쓰레드가 실행이 끝날 때까지 멈추게 된다. 자식쓰레드의 실행이 끝나면 다시 실행을 재개한다. t.join(); vector를 이용한 다중쓰레드 생성 void T.. 게임서버 2023. 1. 6. 게임서버) 1. 서버개론 서버 온라인 게임에서 서버는 매우 중요한 역할을 한다. 게임에 서버가 연결 되었나 되지 않았나에 따라 싱글게임과 온라인 게임으로 나뉘게 된다. 그렇다면 이러한 서버는 무엇인가? 서버는 다른 컴퓨터에 연결할수 있도록 상시 대기중인 프로그램을 말한다. 서버의 종류 게임에서는 보편적으로 WebServer와 GameServer 두가지의 서버가 존재한다. 이러한 서버는 다음과 같은 특징을 갖는다. WebServer(HTTP Server) -드물게 정보를 요청/갱신을 할 경우 사용 -실시간 상호작용이 필요치 않을 경우 사용 -데이터만을 저장하는 용도로 사용할 경우 사용 - 서버쪽에서 먼저 접근하여 클라이언트에게 요청이 불가능(StateLess서버) -반대로 클라이언트에서 서버에게 요청하여 그에 따른 응답을 해주는 .. 게임서버 2023. 1. 6. 윈도우API)14.카메라 카메라 2D게임에서의 카메라는 3D환경에서의 카메라와 달리 불러온 이미지에서의 영역을 이동하는것에 불과하다. 예를 들자면 800x600의 게임 화면에서 100만큼 이동시키는것은 (100,100)의 좌표에 있는 것들을 우리 화면(0,0)으로 옮기는것에 불과하다는 뜻이다. 상용엔진에서 카메라는 Component를 만들어 카메라를 관리한다. 카메라 Component 생성 카메라는 게임의 장르에 따라 달라진다. 이 포스트에서는 플레이어를 따라가는 카메라를 구현하고자 한다. Component에 자신을 붙일 엑터를 가르키는 owner를 만든다. class Component { public: Actor* GetOwner() { return _owner; } void SetOwner(Actor* owner) { _ow.. 게임엔진/윈도우API 2022. 12. 30. 윈도우API)13.플립북 애니메이션 플립북 애니메이션 플립북 애니메이션은 2D전용 애니메이션이다. 상용엔진에서는 특정 툴을 이용하여 범위를 지정하고 그것을 통해 얻은 스프라이트를 합쳐서 애니메이션을 만드는것을 플립북이라고 한다. WindowApi에서는 bmp만을 지원하며 알파 채널이 없어 특정 색상을 무시하는 것을 통해 본래의 이미지를 추출하는 방식을 채택한다. TransparentBlt 함수(wingdi.h) - Win32 apps TransparentBlt 함수는 지정된 원본 디바이스 컨텍스트에서 대상 디바이스 컨텍스트로 픽셀 사각형에 해당하는 색 데이터의 비트 블록 전송을 수행합니다. learn.microsoft.com TransparentBlt를 이용하여 특정 색을 무시하는것이 가능하다. TransparentBlt을 사용하기 위해서.. 게임엔진/윈도우API 2022. 12. 24. 윈도우API)12. 모작 가속도 구현 float deltaTime = GET_SINGLE(TimeManager)->GetDeltaTime(); float wind = GET_SINGLE(UIManager)->GetWindPercent();//바람 가속도 Vector gravity = { 0,1000 };//중력 가속도 _speed += gravity*deltaTime; _speed.x += wind*deltaTime*3; _pos += _speed*deltaTime; 충돌 처리 게임엔진/윈도우API 2022. 12. 23. 윈도우API)11. 역삼각함수 역삼각함수 역삼각함수는 삼각함수의 역함수를 의미한다. 역삼각함수를 사용하는 이유는 바로 주어진 값에 따른 각도를 얻을수 있기 때문이다. 게임수학) Chapter1. 삼각함수 삼각형은 꽤나 오래전부터 연구되어온것중 하나이다. 게임에서도 이러한 삼각형의 성질을 이용해서 콘텐츠를 제작하는데, 그중에서 삼각함수에 대해 알아보려고 한다. 삼각함수 모든 삼각함수 pjnull.tistory.com 역삼각함수와 내적/외적 역삼각함수에서 각도를 구할때 내적을 이용한다면 손쉽게 cos값을 얻을수 있다. 또한 외적을 이용한다면 역삼각함수가 닿지 않는 범위까지 보정이 가능하다. 게임에서 활용 그렇다면 게임에서는 역삼각함수를 어떻게 활용할수 있을까? 이러한 식으로 x축을 기준으로 cos은 수직적인 범위를 가지고 있으며, sin.. 게임엔진/윈도우API 2022. 12. 23. 윈도우API)10. 벡터의 외적 벡터의 외적 벡터의 내적과 외적의 가장 큰 차이는 내적은 결과값이 스칼라값이라는 점이고 외적은 벡터값이라는 것이다. 2차원에서 외적을 활용하기가 다소 어렵다. 그럼에도 벡터의 외적을 활용할수 있는 방법에 대해 알아보고자 한다. 게임수학) Chapter2. 벡터 스칼라 (Scalar) ㆍ흔히 생각할 수 있는 수치. ㆍ거리의 값이 있을 때 이 값은 방향정보는 가지고 있지 않고 오로지 수치만을 나타내는것이 스칼라 값. 벡터(Vector) ㆍ벡터를 사용하면 정적인 위치 pjnull.tistory.com 2D에서의 외적 활용 외적은 2D에서 시계/반시계방향을 체크하는데 매우 유용하게 쓰인다. 이러한 방향 체크는 다소 불필요해 보이지만 범위를 체크하는데 매우 유용하다. 위의 세가지 벡터가 있다. 각각 v1과vp v.. 게임엔진/윈도우API 2022. 12. 22. 윈도우API)9. 벡터의 내적 벡터의 내적 벡터에서 내적은 공식하나로 간단하게 구해질수 있다. 하지만 내적에서 중요한것은 게임엔진에서 어떤 식으로 응용이되는지가 중요하다. 이번 포스팅에서는 그것을 중점적으로 알아보고자 한다. 게임수학) Chapter2. 벡터 스칼라 (Scalar) ㆍ흔히 생각할 수 있는 수치. ㆍ거리의 값이 있을 때 이 값은 방향정보는 가지고 있지 않고 오로지 수치만을 나타내는것이 스칼라 값. 벡터(Vector) ㆍ벡터를 사용하면 정적인 위치 pjnull.tistory.com 내적의 활용 내적은 어떤 상황에서 유용하게 응용될수 있을까? 5가지의 예시를 통해 알아보자 1.내적의 값==0일경우 내적의 값이 0일경우 cos의 각도가 90º라는것을 의미한다. 2.내적의 값>0일 경우 내적의 값이 0보다 클 경우 cos의 각.. 게임엔진/윈도우API 2022. 12. 22. 윈도우API)8. 벡터 벡터 벡터또한 예전에 포스팅한것을 참고하면 도움이 될것이다. 이번 포스팅에서도 프로젝트에서 벡터를 어떻게 이용하는지를 중점적으로 다룰 예정이다. 게임수학) Chapter2. 벡터 스칼라 (Scalar) ㆍ흔히 생각할 수 있는 수치. ㆍ거리의 값이 있을 때 이 값은 방향정보는 가지고 있지 않고 오로지 수치만을 나타내는것이 스칼라 값. 벡터(Vector) ㆍ벡터를 사용하면 정적인 위치 pjnull.tistory.com 벡터 추가하기 //Types.h struct Vector { public: Vector() {}; Vector(float _x, float _y):x(_x),y(_y) {}; Vector operator+(const Vector& other) { Vector ret; ret.x = x + ot.. 게임엔진/윈도우API 2022. 12. 18. 이전 1 ··· 4 5 6 7 8 9 10 ··· 14 다음 728x90 반응형