일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 이브온라인
- 리눅스
- 천체사진
- 점상
- 포크스푼
- 유니티
- centos
- 언성스토리
- 라즈베리파이
- 이브
- 미니적도의
- 오픈스택
- coroutine
- inputsystem
- 번역
- 자율비행
- 데포르메
- DX라이브러리
- 스카이트래커
- 게임제작
- 온라인
- 이브뉴스24
- C언어
- 미타니
- 오브젝트이동
- UI
- 킥스타터
- 드론
- This is EVE
- 유루캠
- Today
- Total
목록게임제작 (31)
게임개발 예제모음
4.2 이미지 자유 변형 확대, 축소 이외에 자유변형이라고 하는 처리방법도 있다. 이미지의 꼭지점 4개를 지정해줌으로써 그에 맞추어 이미지를 변형 시킬 수 있다. DrawModiGraph함수를 이용하여 구현한다. 레퍼런스는 여기를 확인하자. 선언 int DrawModiGraph( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int GrHandle , int TransFlag ); 기능 메모리에 로드된 그래픽을 자유변형 인수 x1 , y1 , x2 , y2, x3 , y3 , x4 , y4 : x1부터 순서대로 묘화할 이미지의 좌상, 우상, 우하, 좌하의 꼭지점 좌표. GrHangle : 묘화할 그래픽 핸들 TransFlag : 투명도 ..
3.14 특정 FPS로 동작하기 지금까지 60Hz의 모니터를 사용하는 환경에서는 1초에 60번 루프한다 라고 배워왔다. 60Hz의 모니터에선 아래와 같은 코딩으로 1초간 60번 루프가 이루어진다. while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){1더하기();} 대부분의 모니터가 60Hz로 동작하지만 그보다 크거나 작을 경우도 생각해보아야 한다. 60Hz이외의 환경에서도 같은 처리속도를 보장하기 위한 제어가 필요하다. (단, 보통 60Hz보다 낮은 모니터는 사용하는 경우가 없기 때문에 이보다 큰 경우만 생각한다.) 이론적으론 어렵지 않다. 1프레임마다 FPS에 맞는 계산을 해주어서 대기 시키게 된다. 시작 시간 : 0프레임째를..
3.13 개조불가능한 세이브데이터 만드는법 - 2 구체적인 이야기에 들어가기 앞서 간단하게 정리를 해본다. 세이브데이터경험치 = 1000 위와 같은 데이터가 있다고 할 때 수정은 매우 간단하다. 세이브데이터경험치 = 2000 이처럼 단순히 수정해주기만 해도 된다. 하지만 다음과 같은 데이터라면 이야기가 틀려진다. 세이브데이터경험치 = 1000해시값 = 25 해시값은 경험치의 값에따라 변경되는 값이다. 경험치를 변경하기 위해선 해시값역시 수정해주어야 한다. 수정을 시도하는 입장에선 이 해시값이 어떻게 도출됐는지 알 수 없다. 시험삼아 경험치항목만 2000으로 변경해본다. 세이브데이터경험치 = 2000해시값 = 25 유저와는 다르게 프로그래머 입장에서는 이게 잘못된 데이터라는것을 알 수 있다. 해시값의 공식..
3.12 개조불가능한 세이브데이터 만드는법 - 1 지난 섹션에서 작성한 세이브파일은 바이너리에디터를 사용하면 간단하게 수정가능하다. 그렇다면 암호화를 통해서 수정하지 못하게 하면 어떨까 라는 생각이 들겠지만 사실 암호화는 필요하지 않다. 암호화 같은 복잡한 방법을 사용하지 않더라도 세이브파일이 수정되었는가 여부만 검사하면 되는 일이다. 일단 다음과 같이 세이브데이터를 텍스트로 보존한다고 가정하자. HP = 200MP = 100소지금 = 1000경험치 = 1000 유저는 이 세이브파일을 열어 "경험치 = 2000" 이라고 수정했을 때 수정한 사실을 알고 있다면 게임에 적용하지 않으면 된다. 이는 해시값을 이용하여 구현 가능하다. 해쉬값은 해쉬함수를 통하여 구할 수 있으며 해시함수는 특정 계산식을 이용하여 ..
3.11 세이브데이터 만드는법 * 원본에서도 3.8 ~ 3.10은 없습니다. C언어 입문시에 파일출력하는 법을 배우게 된다. FILE *fp = fopen( "***.txt", "w" ); 위 명령줄을 통해 파일을 열고 int money = 1000;fprintf( fp, "현재 소지금 = %d\n", money ); 과 같은 명령줄을 사용하게되면 실제 파일에는 아래 그림과 같이 저장된다. 하지만 이런 방식으로는 데이터가 너무 쉽게 개조가 가능해지며 데이터의 양이 몇백, 몇천이상이 되었을 때 매우 번거로워진다. 때문에 텍스트 파일이 아닌 바이너리 파일로 출력을 하는것이 좋다. 이 fopen함수의 역할을 확인해보자. FILE *fp = fopen( "***.dat", "wb" ); 이 명령줄처럼 "b"를 ..
3.7 특정 각도로 탄을 날려보자 슈팅게임에서의 탄도는 특정각도를 통하여 궤도가 설정되고 이를 구현하기 위해서는 삼각함수의 지식이 필수적으로 필요하다. 간단하게 살펴보자면 다음과 같다. 직각삼각형의 밑변과 사변의 각도가 30도일 때는 각 변의 길이 비율이 1:2:√3 이된다. 하지만 게임제작에 있어서는 이런걸 기억하고 있어보았자 딱히 쓸모가 없다. 탄의 발사 각도는 정확히 30도가 아니다. 1도가 될수도 있고 65도가 될수도 있다. 이와 같이 각도가 θ일때 x와 y가 어떻게 되는가 정도는 계산이 가능해야 한다. 학생시절 배운 것 처럼 알파뱃의 모양을 생각하여 표현했다. sinθ= y/rconθ=x/r 이것은 다음과 같은 부분에서 사용하게된다. 그림1. 탄을 보낼 방향과 좌표 위 그림처럼 좌하를 기준 좌표..