Software Development/Tizen

[TIZEN]11. 타이젠_간단한게임 만들기5_Timer

huiyu 2015. 12. 26. 12:43

7. Ecore_Timer

이번에 만들고 있는 게임은 처음에 음계를 알려주고, 그 음계에 맞게 똑같이 쳐야 하는 게임입니다.

처음에 음계를 알려주기 위해서는 일정 간격으로 음계를 하나씩 재생시켜야 하는데요,

일정 간격대로 함수가 호출이 되는 ecore_timer에 대해 알아보도록 하겠습니다.


 (1) Ecore_Timer 사용법

     Ecore Timer의 사용법은 간단합니다.

     - 우선 ecore_timer_add()함수를 통해 일정간격으로 호출될 콜백함수를 등록합니다.

1
Ecore_Timer* ecore_timer_add (double in, Ecore_Task_Cb func, const void * data )
cs

  - in : 호출 간격(단위 : 초)
  - func : 콜백함수
  - data : 전달할 데이터
  - Ecore_Timer를 반환하여 timer를 관리할 수 있습니다.


- 콜백함수 원형

1
2
3
4
Eina_Bool my_func(void *data)
{
    return ECORE_CALLBACK_RENEW;
}
cs

  - 콜백함수 등록 시 전달한 data값을 인수로 받으며, return값으로 True나 False값을 반환합니다.
  - True값 리턴 시 반복 수행, False값 리턴 시 중지


- pause 함수

1
ecore_timer_freeze (Ecore_Timer *timer)
cs



- resume 함수

1
ecore_timer_thaw (Ecore_Timer *timer)
cs
 


    - API : https://developer.tizen.org/dev-guide/2.3.0/org.tizen.native.mobile.apireference/group__Ecore__Timer__Group.html



(2) 게임 적용

  - 먼저 5개의 음계를 저장할 인트형 배열과 배열을 가르킬 변수를 선언 후, 타이머를 관리할 Ecore_Timer를 선언합니다.(헤더파일)

1
2
3
int idx;
Ecore_Timer *timer;
int quest[5];
cs

 

 - 5개의 음계를 랜덤으로 생성 후 ecore_timer 콜백함수를 등록합니다.(app_create함수)

1
2
3
4
5
6
7
idx=0;
//5개의 음계를 저장
for(int i=0; i<5; i++)
    quest[i] = rand()%7;
 
//timer 콜백함수 등록-1초간격으로 timer_quest호출
timer = ecore_timer_add(1, timer_quest, ad);
cs

 

 - 콜백함수는 아래와 같이 설정합니다.

 - 1초간격으로 quest배열에 설정된 변수만큼 재생하게 됩니다.(TRUE를 반환함으로서 반복재생)

 - 5개를 넘었을 땐, ECORE_CALLBACK_CANCEL(FALSE)를 반환함으로 호출을 그만합니다.

1
2
3
4
5
6
7
8
9
10
11
12
Eina_Bool timer_quest(void *data)
{
    if(idx<5)
    {
        play_audio(player[quest[idx++]]);
        return ECORE_CALLBACK_RENEW;
    }
    else
    {
        return ECORE_CALLBACK_CANCEL;
    }
}
cs


728x90