개발/TIZEN

[TIZEN]9. 타이젠_간단한게임 만들기3_이벤트 작성

huiyu 2015. 12. 25. 19:08

5. Event 입력

 (1) 버튼 이벤트

 - EFL의 이벤트의 경우엔, 각 오브젝트에 clicked이 발생할 때 콜백함수를 등록하면 쉽게 등록이 가능합니다.

 버튼 생성부분 아랫부분에 콜백함수를 등록합니다.

1
evas_object_smart_callback_add(ad->btn_finish, "clicked", clicked_finish, ad);
cs

 

evas_object_smart_callback_add()의 함수원형은 아래와 같습니다.

1
evas_object_smart_callback_add (Evas_Object *obj, const char *event, Evas_Smart_Cb func, const void *data)
cs

    - obj : 콜백함수를 등록할 오브젝트
    - event : 이벤트가 발생할 종류
    - func : 이벤트 발생 시 실행될 콜백함수
    - data : 콜백함수로 전달하게 될 값(콜백함수의 첫번째 인자로 전달)

 

다음으로 클릭하게 되면 실행될 'clicked_finish' 콜백함수를 추가합니다.

1
2
3
4
5
static void
clicked_finish(void *user_data, Evas_Object *obj, void *event_info)
{
    ui_app_exit();
}
cs

 - user_data : 콜백함수 등록 시 전달하였던 data값
 - obj : 이벤트가 발생한 객체
 - event_info : 발생한 이벤트에 대한 정보값

 

다음으로 ui_app_exit()함수를 통해 앱을 종료시킵니다.

앱을 실행시킨 후 finish버튼을 클릭하면 앱이 종료되는 것을 확인할 수 있습니다.

 

 (2) Rectangle 이벤트

 - 실제 터치로 게임이 이루어질 rectangle객체의 이벤트를 등록합니다.

기본적으로 버튼이벤트와 같으나 evas의 오브젝트의 경우엔 콜백함수 등록시 아래 함수를 이용합니다.

1
evas_object_event_callback_add (Evas_Object *obj, Evas_Callback_Type type, Evas_Object_Event_Cb func, const void *data)
cs

또한 두번째 인수 type의 경우 미리지정된 Evas_Callback_Type을 전달하고 있다는 점도 유의하시기 바랍니다. 클릭시 EVAS_CALLBACK_MOUSE_DOWN전달

 

이 게임에 경우 각 사각형별로 이벤트를 추가하여야 하므로 rectangle을 생성한 for문 안쪽에 아래와 같이 추가합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    for(int i=0; i<7; i++)
    {
        ad->rect[i] = evas_object_rectangle_add(ad->box_game);
        //rect[i]배열의 색상 변경
        evas_object_color_set(ad->rect[i], color[i].r, color[i].g, color[i].b, 255);
        evas_object_size_hint_min_set(ad->rect[i], 100230);
        evas_object_show(ad->rect[i]);
        elm_box_pack_end(ad->box_game, ad->rect[i]);
 
        //사각형별 이름등록
        char *num[1];
        num[0= i+'0';
        evas_object_name_set(ad->rect[i], num);
        //사각형별 콜백함수 등록
        evas_object_event_callback_add(ad->rect[i],   EVAS_CALLBACK_MOUSE_DOWN, clicked_rect, ad);
    }
cs

콜백함수 등록전 각 rectangle별로 이름을 지정하여 터치시 어떤 사각형이 눌렸는지 알아보도록 하겠습니다.

evas_object_name_set은 오브젝트에 이름을 지정하는 함수입니다.

 

다음으로 콜백함수를 지정합니다. 콜백함수의 경우에도 Evas* e가 추가되었습니다.

1
2
3
4
5
static void
clicked_rect(void *user_data, Evas* e,  Evas_Object *obj, void *event_info)
{
    dlog_print(DLOG_INFO, "MY_LOG", evas_object_name_get(obj));
}
cs

이후 log를 확인하는 dlog_print함수를 통해 어떤 객체가 눌렸는지 확인할 수 있습니다.

 

 

*log 확인

아래 함수를 통해 로그를 확인 할 수 있습니다.

1
dlog_print (log_priority prio, const char *tag, const char *fmt,...)
cs

   - pro : 출력될 로그의 priority( DLOG_DEBUG / DELOG_INFO / DLOG_WARN / DLOG_ERROR)
   - tag : 출력할 로그를 구분할 태그
   - fmt.. : 일반적으로 printf와같이 사용, 원하는 메시지 입력

 

로그확인창을 띄우기 위해 [Window] > [Show View] > [Log]를 누르면 아래와 같이 창이 뜹니다.

다음으로 표시된 +버튼을 누릅니다.

 

- 로그창의 원하는 이름과 출력을 원하는 Tag를 입력 후 ok클릭 

 

- rectangle객체를 누르면 클릭한 객체의 숫자가 나타남을 확인할 수 있습니다. (우측 상단의 priority를 선택하셔야 원하는 로그가 출력됩니다)

 

728x90
반응형