고급강의실
2014.10.16 01:59

RPG Maker VX Ace - 윈도우 만들기

조회 수 2537 추천 수 2 댓글 3
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

정적 윈도우.jpg

최종 적으로 수정하여 나올 장면입니다.


RPG Maker VX Ace에선 윈도우를 만들기 위해선 일단 윈도우에 쓰이는 클래스들의 상하(상속)관계를 알고 계시면 편합니다.

일반적으로 윈도우에 관련되어 만들어져있는 클래스는

기본 윈도우(Window_Base)

선택 윈도우(Window_Selectable)

크게 이 두 가지로 나뉠수 있다고 생각합니다.(사용되는 종류가 다르니깐 이렇게 나눈겁니다.)

기본 윈도우는 메세지 출력, 스크롤 메세지 같은 정적인 윈도우에서부터 더 정확하게 선택 윈도우까지 상속을 해주는 클래스입니다.(Window_Base)

선택 윈도우는 Window_Base를 상속받아서 파티원 조작, 아이템 조작, 상점등 선택에 관련된 모든 윈도우에 사용되게 만들어진 클래스입니다.


그리고 이 모든 윈도우 클래스들의 최상위 상속 관계는 RPG Maker의 RGSS에 정의 내려져있는 Window라는 클래스입니다.


Window Class의 정의는

RPG Maker 의 F1(도움말)을 보시면 도움이 됩니다.(기본적인 위치, 크기, 이동, 열고 닫는 기본적인 기능이 들어가있습니다.)


이번에 할 것은

Window_Base를 상속 받아서 윈도우 창을 새로 정의 내려서 만들 예정입니다.

먼저 클래스를 만드신 후에 상속을 합니다.


class Window_Test < Window_Base

end


여기서 상속이란, 예을 들어서

차에 관련된 정보를 모아서 사람들에게 보여 줄려고 할때, 자동차에 관련된 기본적인 정보와 그 차에 관련된 새로 추가되거나 제거된 정보가 있을 것일겁니다.

여기서 자동차에 대한 기본적인 정보만 모아서 특정란으로 만들고, 차에 관련되어서 새로 추가, 제거된 정보란을 따로 만들 수 있다면, 보는 사람도 편하고, 작성하기도 수월할겁니다.

이처럼, 상속은 기본적인 정보를 가지고 있는 클래스(상위 클래스[super])가 있다면, 그 하부 정보를 가지는 클래스(하위 클래스)만들때 상위 클래스를 상속받아서 제작하기 편하게 하기 위한 방식을 뜻합니다.

여기서 루비는 < 를 상속으로 사용합니다.


여기서 저는 Window_Test의 생성자를 정의 내리겠습니다.

  def initialize

    super(0, 0, 160, fitting_height(1))

    refresh

  end

위치는 (0,0)이고, 넓이는 160이며, 높이는 48입니다.


이렇게 하고 new Game을 눌렸을때, 창을 띄우기 위해서 다음과 같이 정의를 내립니다.


Scene_Title클래스에서 command_new_game에

  def command_new_game

@windows = Window_Test.new

  end


이렇게 적용하시면 다음과 같게 됩니다.

정적 윈도우.jpg


여기서 창이 띄워졌습니다.

여기서 문제는 이렇게 되고, 키가 안먹힙니다.

왜냐면, Window_Test가 생성되면서 Window_Test가 활성화된 창이 되어져 있기 때문입니다.

그런데 정의에서 키 입력에 관련된 설정을 하지 않았기 때문에 창만 띄워지고, 아무 반응도 하지 않고 작동하지 않는 것 처럼 보이게 됩니다.


이 강의에는 활성화된 창에 키입력을 넣는 것을 알려주기 위한 것이 아니기 때문에, 메뉴창을 다시 활성화 시키도록 하겠습니다.


활성화를 변경하는 것은 다음과 같습니다.


Scene_Title클래스에서 command_new_game에

  def command_new_game

@command_window.activate

@windows = Window_Test.new

  end


여기서 command_window는 전 강의의 Title 장면의 클래스가 가지고 있는 변수를 뜻합니다.

이 변수를 activate의 함수를 실행 시키게 되면, 활성화가 command_window 즉, Title의 선택창에게 주게 됩니다.


하지만, 이것을 하고 new game을 계속 누르게 되면,

정적 윈도우.jpg

윗 그림처럼 윈도우가 계속해서 생성되어 겹쳐져서 보이게 됩니다.

이제, new game을 눌렸을시엔 창이 띄워지고, 한번더 누르면 꺼지게 만들어 보겠습니다.



  def command_new_game

@command_window.activate

if !(@windows.nil?) and !(@windows.close?)

@windows.close

else

@windows = Window_Test.new

end

  end


이렇게 하면, 메뉴에서 new game을 맨처음 누르면, 창이 띄워지고, 다시 한번더 누르면 닫혀지게 됩니다.


이제 Window_Test를 꾸며보도록 하겠습니다.


Window를 만드는 것은 그림을 그리는 것과 유사합니다.

윈도우에서 사진을 붙이거나, 윈도우에서 글을 붙이는 과정은 전부다 그림(그래픽)과정이기 때문입니다.

그리고 그 그림을 그리는 함수를 refresh라는 함수로 정의하면, 새로 그리거나, 변화가 있을때 적용이 됩니다.

 하지만, 선택이나 윈도우 창을 변화를 주지 않기 때문에 변화가 있는지 알기 어렵습니다.

 그냥 그림을 그리기 위해서 정의를 내리겠습니다.


저는 다음과 같이 만들었습니다.

  def refresh

    contents.clear

    draw_text(0, -10, 200, fitting_height(1), "Test")

    draw_text(120, -10, 200, fitting_height(1), "G")

  end


draw_text는 window_base에 정의 내려져 있는 것으로,

Window에 정의 내려져있는 Bitmap인 contents에 draw_text를 정의 내린것입니다.


contents.draw_text(0, -10, 200, fitting_height(1), "Test")

contents.draw_text(120, -10, 200, fitting_height(1), "G")


라고 해도 상관 없습니다.


여기서 draw_text는 (x축 값, y축 값, 넓이, 높이, 글자 값)으로 구성되어 있습니다.


결과는 다음과 같습니다.

정적 윈도우.jpg  


여기서 윈도우 스킨을 변경 하고 싶으시다면,

기본적으로 정의된 Window의 windowskin을 이용하면 됩니다. windowskin은 Bitmap구조로 되어 있습니다.

투명으로 하는 방법은 다음과 같습니다.


  def refresh

    contents.clear

self.windowskin = nil

contents.draw_text(0, -10, 200, fitting_height(1), "Test")

contents.draw_text(120, -10, 200, fitting_height(1), "G")

  end


이렇게 하면 결과는

정적 윈도우.jpg

투명 화면이 띄워지게되고,

만약 다른 그림을 붙이길 원한다면,


  def refresh

  contents.clear

    self.windowskin=Cache.tileset("Dungeon_A1")

contents.draw_text(0, -10, 200, fitting_height(1), "Test")

contents.draw_text(120, -10, 200, fitting_height(1), "G")

  end


이렇게 하시면 됩니다.(결과물은 최초의 그림을 참조해주시면 됩니다.)


여기서 알아야 될 것은,

Window를 상속받아서 모든 윈도우가 구성이 되어져있다는 점과

그림을 그릴때 refresh를 이용해서 그림을 다시 그리게 만들어야 된다는 점입니다.


여기까지 글자를 띄우는 윈도우를 설명 드렸습니다.


유동적인 그림이 아닌 방법으로 띄우게 하는 방법은

Bitmap을 이용하는 것으로


Window_Base의 등장인물 얼굴을 그리는 부분을 예로 들면


  def draw_face(face_name, face_index, x, y, enabled = true)

    bitmap = Cache.face(face_name)

    rect = Rect.new(face_index % 4 * 96, face_index / 4 * 96, 96, 96)

    contents.blt(x, y, bitmap, rect, enabled ? 255 : translucent_alpha)

    bitmap.dispose

  end


Bitmap로 사진 정보를 가져오고, rect로 크기를 정의한 후 contents가 Bitmap으로 구성 되어있다고 했으니, Bitmap에 있는 메소드인 blt를 이용해서 얼굴을 넣습니다.


이 Window는 정적인 것으로 플레이어의 입력에 따라서 움직이거나 하질 않습니다.

입력을 받기 위해선 입력을 받는 함수를 정의를 내려줘야 하고, 이걸 위해선 기본적으로 정의 내려진 Input Class와 그 입력에 따른 값의 변하는 함수를 정의 내려야합니다.

그것은 차후에 할 예정입니다.


긴 글 읽어 주셨어 감사합니다.



[첨부파일 정적 윈도우.jpg 다운로드]

[첨부파일 정적 윈도우.jpg 다운로드]

[첨부파일 정적 윈도우.jpg 다운로드]

[첨부파일 정적 윈도우.jpg 다운로드]

[첨부파일 정적 윈도우.jpg 다운로드]
?
  • ?
    제피 2014.10.16 03:16
    좋은 글이네요.
    도움이 많이 되었습니다.
  • ?
    JunkMan 2014.10.16 03:33
    도움되었다니 기분이 좋네요.
  • ?
    잉여로운 삶 2016.01.19 23:48
    잘보고가요! 정말유용하네요!

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수 추천 수
공지 초급강의실 게임제작강좌 A-Z 색인 (2016.1.24 ver) 2 file 천무 2016.01.12 7372 1
112 중급강의실 [상급강좌]VX 폰트 변경하기 1 양쭌 2015.07.12 1792 0
111 중급강의실 초보의 게임제작 도전기 #1-1[데이터 베이스 둘러보기] 2 치와도라 2015.05.05 1404 2
110 중급강의실 초보의 게임제작 도전기! #0 [RPG 만들기?] 치와도라 2015.05.05 1358 1
109 중급강의실 픽쳐 서서히 등장! 픽쳐 서서히 퇴장! 4 치와도라 2015.04.29 965 2
108 고급강의실 VX ACE XAS로 액션 RPG를 만들어보자! - 1. 개요 데크크래프트 2015.04.01 3964 0
107 중급강의실 VX Ace 픽쳐 메뉴 예제(V1.01) 2 APED 2015.03.18 1053 0
106 고급강의실 그림표시50개끝? 51개 해보자. 2  운 2014.12.01 1190 1
105 고급강의실 RPG Maker VX Ace - 선택지 윈도우 만들기 2 JunkMan 2014.10.16 1795 2
» 고급강의실 RPG Maker VX Ace - 윈도우 만들기 3 JunkMan 2014.10.16 2537 2
103 고급강의실 RPG Maker VX Ace - RPG Maker Title 장면(Scene) 수정하기. JunkMan 2014.10.15 1658 1
102 고급강의실 RPG Maker VX ACE - System 데이터 구조 JunkMan 2014.10.15 1056 0
101 고급강의실 RPG Maker VX ACE - CommonEvent 데이터 구조 JunkMan 2014.10.15 701 0
100 고급강의실 RPG Maker VX ACE - Animation 데이터 구조 JunkMan 2014.10.15 707 0
99 고급강의실 RPG Maker VX ACE - State 데이터 구조. JunkMan 2014.10.15 679 0
98 고급강의실 RPG Maker VX ACE - Troop 데이터 구조. JunkMan 2014.10.15 627 0
97 고급강의실 RPG Maker VX ACE - Enemy 데이터 구조. 1 JunkMan 2014.10.15 686 0
96 고급강의실 RPG Maker VX ACE - Armor 데이터 구조. JunkMan 2014.10.15 557 0
95 고급강의실 RPG Maker VX ACE - Weapon 데이터 구조. JunkMan 2014.10.15 848 0
94 고급강의실 RPG Maker VX ACE - Item 데이터 구조. JunkMan 2014.10.14 834 0
93 고급강의실 RPG Maker VX ACE - Skill 데이터 구조. JunkMan 2014.10.14 1156 0
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 Next
/ 10






[개인정보취급방침] | [이용약관] | [제휴문의] | [후원창구] | [인디사이드연혁]

Copyright © 1999 - 2016 INdiSide.com/(주)씨엘쓰리디 All Rights Reserved.
인디사이드 운영자 : 천무(이지선) | kernys(김원배) | 사신지(김병국)