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], 100, 230);
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를 선택하셔야 원하는 로그가 출력됩니다)
'Software Development > Tizen' 카테고리의 다른 글
[TIZEN]11. 타이젠_간단한게임 만들기5_Timer (1) | 2015.12.26 |
---|---|
[TIZEN]10. 타이젠_간단한게임 만들기4_사운드 출력 (0) | 2015.12.25 |
[TIZEN]8. 타이젠_간단한게임 만들기2_레이아웃 구성 (0) | 2015.12.25 |
[TIZEN]7. 타이젠 Layout 설명 (0) | 2015.12.25 |
[TIZEN]6. 타이젠_간단한게임 만들기1_프로젝트생성, 화면방향설정 (0) | 2015.12.25 |