조회 수 456 추천 수 4 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 수정 삭제
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 수정 삭제
커맨드라는 클래스는 샐랙터블이나 베이스처럼 새로운 윈도우를 만드는
슈퍼클래스 용으로 만들다기 보다는, 선택지를 만드는 메소드라고 봐도
무방합니다. 클래스 취급은 물론이고, 겨우 메소드 취급을 받는
이 커맨드는, 사실 응용할수가 없기 때문에 거의 대부분 버려집니다....
하지만 저는 좋아합니다. 왜냐면 샐랙터블은 행, 열으 마음대로 지정할수
있고, 페이지도 있고, rl키 사용은 물론, 배치 자유 등 완벽한것을
할수 있는 반면, '귀찮다'라는 단점을 가지고 있습니다. 하지만
커맨드는 쉽고 간편하고, 무엇보다도 '안 귀찮'습니다.....

좀더 화려하고 완벽한 윈도우를 만드실 분은 제 강의 4-1탄을 읽으시던지,
아니면 샐랙터블을 독학하셔요.....


윈도우 커맨드. 일단 왜 클래스 취급을 못받냐를 설명하겠습니다.

class Window_Command < Window_Selectable
  def initialize(width, commands)
    # 커멘드의 개수로부터 윈도우의 높이를 산출
    super(0, 0, width, commands.size * 32 + 32)
    @item_max = commands.size
    @commands = commands
    self.contents = Bitmap.new(width - 32, @item_max * 32)
    refresh
    self.index = 0
  end
  def refresh
    self.contents.clear
    for i in 0...@item_max
      draw_item(i, normal_color)
    end
  end
  def draw_item(index, color)
    self.contents.font.color = color
    rect = Rect.new(4, 32 * index, self.contents.width - 8, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    self.contents.draw_text(rect, @commands[index])
  end
  def disable_item(index)
    draw_item(index, disabled_color)
  end
end

이게 지금 설명할것인, 커맨드윈도우 입니다. 맨 윗부분을 보면
윈도우 설정이 있습니다. 폭이 있고 문자열을 설정하게 되어있는데요,
그것만 끝내면 다음부터는 알아서. 그리고 그 아래의 메소드는 전부
문자열에 대한 것인데, 이것은 메소드를 사용하는 형식으로 써야지,
클래스 내에서는 별로 의미가....draw_item 메소드는 refresh와
함께 자동으로 슉슉이고, disable_item 메소드는 특정 조건이없다면
무조건 침묵 꼴까닥 입니다. 즉, 클래스로써는 의미가 없다는 것이죠.

이건 제 억지......라고 해야하나...? 개인적으로 생각하기에, 역시 이 강의는
커맨드의 완벽한 이해보다는 사용법을 써 놓는 것이 좀더 유용하다고 생각 됩니다.

그럼 사용 방법입니다.


커맨드의 사용법으로써, 커맨드 윈도우를 사용한 곳을 찾아 봅시다.
초기 RXP가 나왔을때, 텍스트 어쩌고 저쩌고 하면서 계속 만지작 거렸던
Scene_Title! 살포시 한번만 눌러주시면 다음과 같은 것이 보일것입니다.

s1 = "시작하3"
s2 = "계속하3"
s3 = "끝이3"
@command_window = Window_Command.new(300, [s1, s2, s3])

s1, s2, s3는 무엇인지 아시리라 믿습니다. s1라는 이름의 변수를 "시작하3"이라는
스트링으로 대입하는 것이죠.
그리고 또 다른 변수가 있습니다.

@command_window = Window_Command.new(300, [s1, s2, s3])

이건 변수? 는 맞지만, 보통 「변수=클래스.new」와 같은 형태를
오브젝트(@command_window)를 클래스(Window_Command)에 포함? 삽입?
시킨다....라고 합니다. 엑사포에 있는 설명을 빌리자면, 클래스는 반(2-1, 2-2)이고,
오브젝트는 학생(뷁놝첧, 김박규 등)이라고 생각하시면 됩니다.

자세한 설명은 엑사포에서....

이렇게 함으로써, 오브젝트는 클래스의 메소드(방법이나 처리할 일 등)를 사용할수
있습니다. 사용법은 오브젝트.메소드 인데, 자세한 것은 역시 엑사포에서....

여하튼 본론으로 돌아가서, 커맨드 윈도우의 initialize 설정이 (가로, 배열)이였습니다.
그러니까 Window_Command.new(300, [s1, s2, s3])와 같은 형태로 쓰면,
300의 width와 [배열이 3개 * 32 + 32]의 height를 갖는 윈도우가 생성 됩니다.

배열에 관한 설명 또한 엑사포에서....

계산 공식을 만들어서 표로 정리한 뒤, 페이지로 나누던 셀랙터블과 달리, 커맨드는
가로 길이와 문자 배열만 있으면 세로가 완성 되고, 그 항목에 문자가 자동으로
삽입됩니다. 거기서 index만 참조해서(즉, 키 커서) 메소드를 부르거나, 다른 것을
소환하면 됩니다.

....까지가 이론이고, 실제 사용법은 대충 이러 합니다.

@오브젝트 = Window_Command.new(가로 크기, [문자 배열1, 문자 배열2])

이렇게만 쓰시면, 문자 배열1과 2가 선택지로 표시된 윈도우를 보실수 있을것입니다.
물론 선택은 불가능 하죠.
선택을 하게 하려면 @오브젝트.update를 사용하셔야 합니다. 그렇다면 위 아래로
움직일때 마다 뚝뚝 소리가 나옵니다.


이왕 설명이 여기까지 나온거, Scene_Title에서 커맨드 윈도우를 어떠한 원리로
사용하는가까지 설명해 버리겠습니다.

일단 씬은 기본적으로 main으로 구성되어 있습니다. 거기에 따른 그래픽이 있고
그 외에 여러가지가 추가되면서 하나의 씬이 완성됩니다.

그 중에서 기본중에서의 기본인 main에서 커맨드 윈도우를 만들고

s1 = "시작하3"
s2 = "계속하3"
s3 = "끝이3"
@command_window = Window_Command.new(300, [s1, s2, s3])

업데이트(loop에 의해, 0.1초당 갱신되는 것)가 되었을때의 메소드 속에서

def update

자동적으로 커맨드 윈도우의 활성화를 시킵니다. 활성화는 오브젝트.update로
할수 있으며, 원래는 특정 조건이 주어질때(메뉴처럼) 활성화를 시키지만,
타이틀 씬에서는 그럴 필요가 없죠. 처음부터 시작, 계속, 끝을 골라야
시작되니까, 애초에 활성화를 시켜 놓고 하는 것입니다.

@command_window.update

활성화가 되었으니, 커맨드를 사용해야 겠죠? 앞에서 설명했듯이, 샐랙터블류
(샐랙터블, 커맨드)는 오브젝트.index(커서)로 참조를 합니다.

if Input.trigger?(Input::C)
C버튼을 눌렀을때

case @command_window.index
현제 커서를 분기하여

when 0
(1번째 = 0, 2번째 = 1....)
인덱스를 참조해서

command_new_game
메소드를 부릅니다. 이 메소드는 자기가 설정하는 것입니다. 꼭 메소드를 부르지 않아도,
여기다가 메소드의 내용을 넣으면 똑같이 실행됩니다. 그저, 메소드가 수정이나
조건 추가에 더 편리할 뿐....



대충 이렇게가 타이틀 씬의 커맨드 사용 원리입니다.
대충 대충 설명 했으니, 아마 이해가 안가실 것입니다.

대충(제가 좋아하는 말입니다.) 알고리즘으로 풀이 하자면...


타이틀 씬 -> 커맨드 윈도우 제작 -> 활성화 -> 커서에 따른 C 트리거의 분기 ->
분기된 것의 독립된 행동

이정도....? 입니다. 원래는 5탄에서 다룰 내용이였으나, 이왕 나온거, 설명해 버린겁니다.




지금까지는 윈도우에 대한 이론적 이해였습니다.
윈도우가 어떤 것이고, 각 윈도우에 따른 특징이 어떠하고....그렇한 이론이였으나,
5탄에서는 지금까지 이론만 배웠던 윈도우를 응용하는 방법을 설명하겠습니다.

저는 이것저것 만지면서 응용을 먼저 배우고, 이론을 나중에 독학하여 터득했지만,
이제 막 시작한 RXP 유저들은 제 윈도우 강의를 하나도 모를것입니다.....
제 생각에도 순서가 약간 잘못되었다고 생각 한달까나요...

그래도 일단은 각 윈도우 별로 정의와 특징, 그리고 사용법등을 이론이나마 써 놨으니,
5탄을 좀더 후련한 마음으로 쓸수 있을것 같습니다.

5탄에서는 응용만 다룰것이기에, 윈도우 제작이나 특이 사항들은 1~4탄을
읽으시면 아실수 있을것입니다.


저는 원래 교사 타입이 아니라, 남을 가르치거나 강의하는 것에는 소질이 없습니다.
그러니 4-1탄이나 4-2탄은 제 설명 보다는 독학하시는것을 더 추천합니다.
강의를 쓰면서 저도 약간 헷갈리는 부분도 있었고,
이러한 부분을 어떻게 설명해야 할지도 고민이여서

왠지 자랑스럽게 내밀수가 없다.....라는 생각이 들거든요...


그래도 일단은 이론편은 완료 입니다.
다음 탄을 기대해 주세요.


그리고 다음 부터는 강의를 싸다가 공부한다며 중간을 잘라먹는일은
하지 않도록 하겠습니다.
?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
156 RPG Maker [MiNi'M']무한RPG를 만들어보자-일편:기획 *RPG2000 MiNi'M' 2006.05.11 376
155 RPG Maker 커맨드 - '변수의 조작' 익히기 Ark。 2006.05.09 533
154 RPG Maker ***특명*** rpg2k로 srpg를 만들어라!(1) 길모나 2006.05.09 347
153 RPG Maker ☆★특명★☆ rpg2k로 srpg 만들기(1) 길모나 2006.05.09 1053
» RPG Maker [RXP]윈도우 만들기 4탄-스페셜 윈도우(커맨드) 『연금술사』 2006.05.05 456
151 RPG Maker 재가 생각하는 몇가지 게임 아이디어 [몇가지 추가] mr.hyowon 2006.04.28 634
150 RPG Maker 좌표간 거리구하기 알아두면 좋다! 다크아머 2006.04.22 1075
149 RPG Maker 똑같은 게임은 이제 그만.... 1 다크아머 2006.04.19 715
148 RPG Maker 자질구레팁1] 0.75배속/1.5배속/3배속으로 이벤트를 움직이게 해보자. 파파 곤잘레스 2006.04.18 479
147 RPG Maker 맵ID 사용법 하나 발견;; 다크아머 2006.04.18 296
146 RPG Maker 변수에 대한 정의 히나레인 2006.04.17 433
145 RPG Maker [겜살 프로젝트..?] 200X 포트리스 재탕...(스크롤압뷁) [S's-S] 2006.04.13 285
144 RPG Maker [겜살 프로젝트..?] 200X 포트리스 재탕...(스크롤압뷁) file [S's-S] 2006.04.13 290
143 RPG Maker [겜살 프로젝트..?] 200X 포트리스 재탕...(스크롤압뷁) file [S's-S] 2006.04.13 245
142 RPG Maker 랜덤 시점..이란건 어떨까요. shelphie 2006.04.13 514
141 RPG Maker Trpg에 대하여 조금 자세히 분석하자!! 블레이드 마스터 2006.04.09 522
140 RPG Maker RPG2x툴에서 %계산. !! phoenix 2006.04.08 694
139 RPG Maker 기존의 마법 속성에서 벗어나자 미카엘net 2006.04.03 534
138 RPG Maker 노가다가 필요 없는 무기 RPG 형식.[액션 알피지]Rpg2k 페라도 2006.03.31 777
137 RPG Maker 알툴 2k 에서의 SRPG 구현에 대한 고민 1 하로우 2006.03.19 1226
Board Pagination Prev 1 ... 3 4 5 6 7 8 9 10 11 12 ... 15 Next
/ 15






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

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