호야킴 MYPI

호야킴
접속 : 3096   Lv. 32

Category

Profile

Counter

  • 오늘 : 2 명
  • 전체 : 6197 명
  • Mypi Ver. 0.3.1 β
[게임메이커] 게임메이커 UI 이동 스크립트 (6) 2017/01/12 AM 12:47
안녕하세요.
오늘은 예전에 올렸던 부드러운 이동을 위한 스크립트 강좌를 보신
게임메이커 카페의 랩톤님께서 적용할 만한 예제 소스가 있었으면 좋겠다고 하셔서 스크립트를 하나 들고 왔습니다.
UI이동 스크립트에요.
menu.gif
이런 식으로 모여라 촛불집회에서도 UI이동에 쓰였네요. 스크립트로 간단하게 적용할 수 있습니다.
어제 올린 자신만의 스크립트만들기 와 같이 보시면 좋을 것 같네요.

create 이벤트에 scr_gui_moving_create(-view_xview,0,view_xview,0,30) 를 넣어 주었습니다.
scr_gui_moving_create 스크립트는 이렇게 구성되어있어요
 ///scr_gui_moving_create(xstart,ystart,xend,yend,time)
gui_start_xpos = argument0 //시작 x  위치
gui_start_ypos = argument1//시작 y  위치
gui_end_xpos = argument2 //목표 x 좌표 지점
gui_end_ypos = argument3//목표 y 좌표 지점
duration = argument4 // 목표까지 걸리는 스텝 시간 변수

//초기화
gui_now_xpos = argument0
gui_now_ypos = argument1
time = 0 //현재 시간 변수
x = gui_now_xpos
y = gui_now_ypos

gui_status = 0 //UI 상태
간단하죠? -view_xview,0 이라는 초기 x,y  위치와 view_xview,0 이라는 x,y 위치를 넣어주고 시간은 30스텝으로 주었습니다.

left mouse click 이벤트(실제 게임에는 메뉴 오브젝트의 드로우 이벤트에 버튼을 그리고 버튼을 눌렀을 경우 실행되게 만들어 두었습니다.)
에는 gui_status를 한번 누르면 1로 바꾸고 다시 누르면 0으로 바뀌도록 했습니다.
ifgui_status = 0 {
scr_gui_moving_create(view_xview,0,-view_xview,0,30);  //퇴장이벤트로 전환
gui_status = 1
}
else
{
scr_gui_moving_create(-view_xview,0,view_xview,0,30); //등장이벤트로 전환
gui_status = 0
}
draw이벤트에는 scr_gui_moviing_draw 스크립트를 만들어서 아래처럼 넣어주었습니다.

drea_self();; // 이걸 빼먹으면 드로우 이벤트 등록된 오브젝트는 스프라이트를 안그려줘요.
scr_gui_moviing_draw(EaseLinear); // EaseLinear 부분을 원하시는 타 ease 함수 예를들면 EaseInOutQuad 등으로 바꾸세요.
저번 강좌에서 설명한 argument_count를 썼기 때문에
scr_gui_moviing_draw();
이런식으로 인수를 빼도 괜찮습니다.
scr_gui_moviing_draw는 아래처럼 구성을 할거에요.
///scr_gui_moviing_draw(easeing)
switch (gui_status)
{
    case 0: // UI 등장 이벤트 실행
    x = gui_start_xpos
    y = gui_start_ypos
   
    time += 1 //스텝마다 1을 더해줌
    if argument_count = 1 easings = /s!crip/_execute(argument[0],time, 0, time/duration,duration);
    else  easings = EaseInOutQuad(time, 0, time/duration,duration);

    //옵션값, 인수가 있으면 인수대로 없으면 EaseInOutQuad을 적용.
    //easeInOutCubic 알고리즘의 값을 리턴해서 easings에 기록 easeInOutCubic자리에 다른 알고리즘을 넣어도 됨.

    gui_now_xpos = lerp(gui_start_xpos,gui_end_xpos,easings);
    gui_now_ypos = lerp(gui_start_ypos,gui_end_ypos,easings);
   //초기값,최종값과 현재 위치값을 시간에 따라서 비교해서 출력

    x = gui_now_xpos
    y = gui_now_ypos
   
    if time > duration  // 완료시간이 넘어가면
    {
    time = 0
    gui_status = 2 // 대기 중으로 바꿈
    }    
    break;
   
    case 1:  //UI 퇴장 이벤트
    time += 1 //스텝마다 1을 더해줌
    easings = EaseInOutCubic(time, 0, time/duration,duration);
    //easeInOutCubic 알고리즘의 값을 리턴해서 easings에 기록 easeInOutCubic자리에 다른 알고리즘을 넣어도 됨.
    gui_now_xpos = lerp(gui_end_xpos,gui_start_xpos,easings);
    gui_now_ypos = lerp(gui_end_ypos,gui_start_ypos,easings);
   //초기값,최종값과 현재 위치값을 시간에 따라서 비교해서 출력
    x = gui_now_xpos
    y = gui_now_ypos
   
    if time > duration // 완료시간이 넘어가면 초기화
    {  
       gui_status = 2 //대기중으로 바꿈
    }
    break;
   
    case 2 : // 대기 중
    // 대기 중 기타 등등 스크립트를 넣어주세요. 비워두셔도 무방.
    break;  
 
}

스크립트 만드는데 꽤나 고생했던 기억이 나네요...ㅠ_ㅠ

예제는 왼쪽에서 등장해서 왼쪽으로 들어가지만

실제 인게임에서는 오른쪽에서 왼쪽으로 사라진다던가 다양하게 쓰이고 있습니다.

 

모여라 촛불 집회도 한번씩 다운로드 해주세요~

어제는 뉴스보다가 화가 나서 평화상(?) 과  고래풍선들도 업데이트 했답니다.

제목 없음.png

https://play.google.com/store/apps/details?id=com.raggletaggle.million_candles


그럼 다음시간까지 안녕~

신고

 

근근웹4    친구신청

게임 메이커로 만드시기 힘드셨을텐데, 이런 자료를 아무 대가 없이 공유하는 것만으로도 대단한 일을 하셨다고 생각합니다. 게임메이커 스크립트가 아무리 하위언어라고 해도 새로이 연구개발을 해야되는 분야임에도 불구하고 공유 하심은 지극히 정의로운 일이며 누군가에게 큰 도움이 되리라 생각합니다.

인디 게임 개발자들을 대신하여 감사함을 전해드리고 싶습니다.

호야킴    친구신청

아이고 칭찬받았다! 인디게임 개발자 풀이 커지고 먹고 인디가 먹고 살만해져야 한국 게임 업계도 좀 바뀔 거라 생각해서 시작은 했는데 하는게 별로 없네요! ㅋㅋㅋㅋㅋㅋㅋㅋ 좋은 덧글 감사드립니다~

근근웹4    친구신청

저도 게임메이커를 통해서 게임을 만들었고, 목표 이상의 성과를 올렸습니다만, 한국에서 인디게임 개발자/개발사는 언제나 파리 목숨이라는 것을 잘알고 있습니다. 결국은 상생이거든요. 같이 살아남아야 합니다. 촛불 하나하나가 모여 역사를 쓰듯, 우리는 한사람 한사람의 끈기와 열정이 필요합니다.

호야킴    친구신청

파리 목숨에 정말 동감하네요.
요즘엔 시간이 가면 갈수록 주변의 좋은 소식 보다는 안 좋은 소식만 듣고 있거든요.ㅠ_ㅠ

김뱃돈    친구신청

헐 게임 엄청 재밌어보이네요 군중제어도 굉장히 자연스럽고 오브젝트가 저렇게 많은데도 모바일에서 문제가 없는건가요??

호야킴    친구신청

테스트 배드에서 실험해 보았는데 핸드폰 사양에 따라서 많이 갈리기는 합니다.ㅠㅠ 오브젝트들도 간단하게 만들기도 했고(....) 오브젝트가 600개가 넘으면 프레임이 조금씩 떨어지기 시작하더라구요. 3~4프레임 정도는 티가 많이 안나서 800개 정도로 제한을 하고 있고, 실제로는 꼼수를 써서 화면에 많아 보이는 것이에요.
X