조회 수 495 추천 수 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
번호 분류 제목 글쓴이 날짜 조회 수
296 RPG Maker 물체 밀어서 움직이는 이벤트 조금 더 쉽게 하는 법 zero? 2018.01.02 644
295 RPG Maker rpg vxa 로 겜만들때 데미지 설정 공식[링크] 준E 2017.06.08 740
294 RPG Maker [꿀팁] 간단하게 만들 수 있는 실시간 전투 시스템 1 file 준E 2017.03.31 2019
293 RPG Maker RPG MV에서 플러그인 오류의 원인에 대하여 1 title: 댓글러lklslel 2016.07.08 2359
292 RPG Maker RPG MV 게임 도중에 윈도우 스킨 파일 자체를 통째로 바꿔버리는 방법 (출처: HIME) 최저 2016.07.08 1627
291 RPG Maker 텍스트 대화 도중 메뉴 여는 방법을 알아냈습니다! 2 file 정궈니 2016.03.12 2938
290 RPG Maker rpgmv 마우스 지원과 터치 지원이 되니. 2 팡소리 2015.10.25 1011
289 RPG Maker RPG Maker MV 와 AJAX를 이용한 웹통신 관련 영상. 2 HT9MAN 2015.10.25 2246
288 RPG Maker [RPG2000/3 팁] 간편한 이벤트 단축키 title: 자게이하앵 2015.04.06 1833
287 RPG Maker [RPG2000/3 팁] 간편한 이벤트 단축키 1 file title: 자게이하앵 2015.04.05 748
286 RPG Maker 알만툴이 아닌 새로운 툴강좌 (이클립스 강좌) 이클립스 2014.10.07 1407
285 RPG Maker 이클립스 강좌 1 AVD생성 밑 실행 이클립스 2014.10.07 949
284 RPG Maker [XP, VX, VXA] 시야제한 만들기 17 빙냥이 2014.08.16 2699
283 RPG Maker 처음 제작하시는분들 흔히 일어나는 실수 8 지브릴 2014.07.12 1987
282 RPG Maker 게임제작 시작하시는분들을위한 강좌!(외부링크) diget 2013.09.23 1817
281 RPG Maker [정보] 일본의 RPG만들기 관련 커뮤니티 1 비형랑 2012.10.01 1219
280 RPG Maker 꼬마 캐릭터 쯔 꾸르 비형랑 2012.10.01 2647
279 RPG Maker rpg2003 액션알피지 간단한 예제 1 아자2™ 2012.09.03 1156
278 RPG Maker SRPG95에서 MP 0 소모 마법의 활용. 3 협객 2012.06.30 1559
277 RPG Maker [쯔꾸르] 애기들 따라다니게 만들기 1 file 2012.06.26 1468
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 15 Next
/ 15


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

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