소켓으로 통신을 하다가 통신을 끝내고 싶을 때 소켓을 종료해야한다.소켓을 종료하는 방법은 두가지가 있는데 int close(int socket_fd);int shutdown(int socket_fd, int how_to); 이 있다. 위 두가지 함수의 사용법과 차이점에 대해 알아보자 TCP소켓은 통신의 신뢰성을 유지하기 위해 패킷을 주고받을 때 마다 안전하게 수신했다는 신호로 ACK패킷을 재전송한다. 이는 소켓을 종료할 때도 마찬가지이며 클라이언트에서 종료 패킷을 보내면 서버는 이에 따른 ACK패킷과 종료 패킷을 보낸다. 서버가 보낸 종료 패킷에 대해 클라이언트도 ACK패킷을 전송하면 정상적으로 소켓이 종료된다. close() int close(int socket_fd); 성공하면 0을, 실패하면 -1을..
서버가 여러 클라이언트를 처리하기 위한 방법 중 입출력 다중화를 사용하는 방법을 알아보자.입출력 다중화란 여러 입출력 대상이 있을 때 그 대상들을 검사하며 입출력이 필요할 때마다 작업을 수행하는 것을 말한다. 이 방법은 멀티 프로세싱, 멀티 스레딩 방법과 다르게 싱글 프로세스, 싱글 스레드에서도 동작한다. 하지만 완전히 동시에 처리하지는 못하는 단점을 가지고 있다. select() 함수리눅스는 select() 함수로 입출력 다중화를 구현할 수 있다. select()는 지정한 범위의 file discripter중 FD_SET으로 1로 set되어있는 파일을 순회하면서 변화가 있는 file discripter를 반환한다.파일에 변화가 있다면 그대로 1로 두고, 변화가 없다면 0으로 set멀티 플랙싱이 가능하게..
벡터의 내적과 외적을 하는 법을 알아보고 내적과 외적이 의미하는 것들에 대해 알아보자 내적 A벡터와 B벡터의 내적은 다음과 같이 계산할 수 있다 또는 내적이 의미하는 것 A벡터의 B에 대한 투영 벡터의 길이 투영 벡터는 A*B값을 B단위벡터에 곱하는 것으로 구할 수 있다 A벡터와 B벡터의 사이 cos값(A와 B가 단위벡터일 때만 성립) 외적 A벡터와 B벡터의 외적은 다음과 같이 구한다 또는 외적이 의미하는 것 방향 두 벡터에 동시에 수직인 벡터의 방향과 같다 좌표계에 따라 오른손, 왼손 으로 방향을 알 수 있다 크기 두 벡터가 만드는 평행사변형의 넓이를 뜻한다 두 연산을 점과 면의 충돌검출에 응용할 수 있는데 그 주제에 대해서는 다음에 글을 새로 써야겠다 개념 면의 단위벡터 A와 충돌 검출을 할 점과 꼭..
어떤 프로그래밍 책에서 #pragma instrinsic 명령으로 math.h 내에 있는 함수들의 속도를 향상시킬 수 있다는 내용을 읽었다 책에서는 그냥 instrinsic을 사용하면 속도가 향상된다고 쓰여 있었고 삼각함수를 빨리 구하기 위해 삼각함수 table을 사용하는 방법도 intrinsic(cos, sin, tan)을 하면 소용이 없다 라는 뉘앙스의 설명이 있었다 #pragma intrinsic이 대체 뭐길래 이런 마법같은 일을 하는 것일까 #pragma 명령 전저리기 명령. 사전에 컴파일러에게 명령을 내릴 수 있다. #pragma intrinsic 사용법 #pragma intrinsic(func1, func2, ...) 설명 인자 목록에 들어있는 함수를 컴파일러가 판단한 후 inline 또는 f..
스케줄러란?일정 시간 후에 콜백 함수를 실행하거나 일정 시간마다 콜백 함수를 실행하게 하는 루프 코드 // selector, interval, repeat, delay// if repeat is -1 repeat foreverthis->schedule(schedule_selector(ClassName::FuncName), 1.0f, 2.0f, 3.0f); schedule_selector라는 메크로는 함수포인터를 통해 콜백함수를 등록한다. 콜백함수는 float 형의 dt 매개변수를 가지고 있어야 한다.
RenderTexture란?렌더링을 할 수 있는 텍스처로 Cocos2d-x 에서 필요한 크기만큼 생성하여 그 위에 그리고 싶은 오브젝트들을 그릴 수 있다. 만들어진 texture에 shader를 적용시켜서 광원 효과를 내거나 작은 renderTexture를 생성해서 미니맵 같은 요소를 만들 수 있다. RenderTexture 생성 auto renderTexture = RenderTexture::create(100, 100, Texture2D::PixelFormat::RGBA8888); // width, height, pixelFormat this->addChild(renderTexture); RenderTexture에 sprite 추가 auto spr = Sprite::create("image.png")..
개발을 하다보면 한 객체가 다른 객체를 자식으로 가지는 계층 구조를 많이 만들게 되는데 이 계층화된 객체를 메모리에서 삭제(remove)시키려면 최상위 객체만 부모 레이어로부터 remove시키면 된다.임의로 최상위 객체의 소멸자에서 removeAllChildren()같은 함수를 추가하면 나중에 레이어를 삭제할 때 문제가 발생할 수 있다. 문제 발생 시나리오레이어 A에 Sprite객체 head와 SpriteBatchNode headBatch, bodyBatch가 추가되어 있고, head는 자식으로 body와 arm을 가지고 있다. 이 때 arm과 body의 이미지는 head이미지를 가지고 있는 plist와 다른 plist에 있으므로 객체 head를 생성할 때 bodyBatch를 전달하여 body와 arm을..
목표무조건 추격하는 미사일이 아닌 자연스럽게 타겟을 추격하는 미사일을 만든다. 이론방향 벡터를 점점 타겟 방향으로 회전시키면서 이동한다.시간이 지날수록 회전하는 속도가 빨라진다. 코드(ex:Cocos2d-x)void Bullet::update(float dt){ auto pos = this->getPosition(); // 현재 위치 저장 auto momoPos = momo->getPosition(); // 타겟의 위치 Vec2 toDir = momoPos - pos; toDir = Normalize(toDir); // 방향 단위벡터 계산 float cross = (toDir.x*direction.y) - (toDir.y*direction.x); // 현재 방향과 타겟으로의 방향과의 외적 (어느 방향으로..
- Total
- Today
- Yesterday
- 국내여행
- machine learing
- Java
- game
- Git
- C/C++
- Cocos2d-x
- 드라마
- 알고리즘
- rxswift
- 운영체제
- OS
- ios
- 수학
- mongoDB
- ue4
- DesignPattern
- winsock
- C
- SwiftUI
- C++
- database
- JSP
- swift
- Spring
- scala
- 데이터베이스
- 자료구조
- SOCKET
- SHADER
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |