3.5 sin 함수를 이용한 물체 이동 / 확대축소
부드러운 상하이동 또는 확대축소가 필요할 경우 sin함수를 이용하면 좋다. sin은 삼각함수의 그 sin 맞다. sin함수를 그래프로 그려보면 다음과 같다.
가로를 시간축, 세로가 y 값이라고 하면 이 곡선과 같은 부드러운 상하 이동이 가능해진다. 원주율을 PI라고 한다면 1초간 60이 증가하는 카운터(Count)를 사용한다면 아래와 같은 공식을 만들 수 있다.
sin(PI*2/60*Count)
이 식은 -1~1사이의 값을 얻을 수 있고 200을 곱하게 된다면 -200에서 200사이의 값을 구할 수 있게 된다.
예제
#include <math.h> #include "DxLib.h" #define PI 3.141592654f int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){ ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); int Handle; int Count = 0; Handle = LoadGraph( "image/character_01.png" ); while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){ DrawRotaGraph( 100, 240+sin(PI*2/240*Count)*200, 1.0, 0.0, Handle, TRUE ); //이미지 이동 DrawRotaGraph( 500, 240, 1.0+sin(PI*2/120*Count)*0.5, 0.0, Handle, TRUE ); //이미지 확대 축소 Count++; }
DxLib_End(); return 0; } |
실행결과
첫번째 DrawRotaGraph는 y좌표에 sin함수를 적용하였고 두번째 DrawRotaGraph에서는 이미지의 크기에 sin함수를 적용한 결과이다. 60카운트에 1초의 계산이기 때문에 각각 4초 2초 주기로 변화한다. 또한 첫번째는 y좌표가 40~440사이에서 변화하고 있으며 두번째에서는 크기 배율에 0.5를 곱하기 때문에 0.5배에서 1.5배사이의 크기 변화를 볼 수 있다. 다음 공식을 활용하도록 하자.
sin( PI*2 / 주기 * Count ) * 진폭
'DX라이브러리' 카테고리의 다른 글
3.7 특정 각도로 탄을 날려보자 (0) | 2014.12.26 |
---|---|
3.6 sin함수를 이용한 매끄러운 이동 (0) | 2014.12.26 |
3.4 간단한 선택화면 (역방향 루프) (0) | 2014.12.24 |
3.3 간단한 선택화면 (0) | 2014.12.24 |
3.2 나눗셈 나머지를 이용한 루프 (0) | 2014.12.24 |