글 작성자: Doublsb

이전 시간까지는 타이틀 씬과 맵 씬 스크립트의 내용을 해부하고, 응용해 보았다.

그러나 이번 시간부터는 씬 스크립트를 해부하지 않고, 윈도우 스크립트를 응용해보는 시간을 갖도록 하겠다.

이유는, 더 이상 다른 씬 스크립트를 해부하더라도 윈도우 스크립트의 내용이 받쳐주지 않으면 내용을 알 수 없기 때문이다.

또한 이번 글 부터는 형식을 조금 바꾸려고 한다. 스크립트 전문을 모두 보고 넘어가기보다, 중요한 메소드만 짚고 응용해보는 식이다.


윈도우 베이스는 어떤 것을 다루는 스크립트일까? 바로, 모든 윈도우의 근간이 되는 스크립트이다. 단순히 골드를 표시하는 골드 윈도우부터, 선택지를 고르도록 하는 커맨드 윈도우까지 모든 윈도우를 만들 수 있도록 하는 것이 바로 윈도우 베이스다.

이 윈도우 베이스 스크립트를 마스터하고 나면 자유자재로 원하는 위치에 윈도우를 만들어낼 수 있게 될 것이다.




initialize


 

  def initialize(x, y, width, height)

    super

    self.windowskin = Cache.system("Window")

    update_padding

    update_tone

    create_contents

    @opening = @closing = false

  end



initialize는 새로운 윈도우를 만들 때 초기화하는 역할을 맡고 있다.

initialize 옆의 괄호는 최초로 윈도우를 만들 때 어떤 정보를 포함해야 하는지 명시하고 있다. 내용은 x, y, width, height인데, 이는 각각 가로 위치, 세로 위치, 가로 길이, 세로 길이를 의미한다.

만약 새 윈도우를 화면 왼쪽 끝에 100 길이의 정사각형 형태로 만들고 싶다면, 다음과 같이 선언하면 된다.


@윈도우 이름 = Window_Base.new(0, 0, 100, 100)


어떻게 선언해야 할 지 알았으니 initialize 메소드의 내용을 자세히 살펴보도록 하자. 우리가 주의깊게 봐야 할 내용만 보도록 하겠다.


1) self.windowskin = Cache.system("Window") 라는 구문은, 윈도우 스킨 파일을 사용할 때 System 폴더의 Window라고 이름붙은 파일을 사용한다는 내용이다. 만약 괄호 안의 Window라는 내용을 다른 이름으로 수정하게 되면, System 폴더의 변경한 이름 파일을 윈도우 스킨 파일로 가져오게 될 것이다.


이후는 다른 메소드를 호출하고, 이 윈도우는 열리는 중도, 닫히는 중도 아니라고 표시한다는 내용이다.




line_height


 

    def line_height

      return 24

    end



line height는 텍스트 한 줄의 높이를 얼마로 잡을 것인지를 결정하는 역할을 맡고 있다.

제작자가 24의 수치를 이것보다 적게 설정한다면 텍스트 한 줄 사이가 가까워 질 것이고, 크게 설정한다면 텍스트 한 줄 사이가 멀어지게 될 것이다. 직접 수정해서 이벤트의 Show Text를 확인해 보면, 그 차이를 알 수 있을 것이다.





standard_padding


 

    def standard_padding

       return 12

    end



Padding은 안쪽 여백을 의미한다. standard padding은 윈도우의 기본 안쪽 여백을 얼마로 잡을 것인지 결정하는 역할을 맡는다.

제작자가 12보다 적게 설정하면 윈도우의 안쪽 여백은 줄어들 것이고, 크게 설정한다면 안쪽 여백이 늘어나게 될 것이다. 이것 또한 마찬가지로 직접 수정하여 그 차이를 느끼면 쉽다.





draw_text


 

  def draw_text(*args)

    contents.draw_text(*args)

  end



draw_text는 윈도우 안에 텍스트를 써 넣을 수 있는 기능을 가지고 있다. *args는 Bitmap의 draw_text와 동일한데, 내용은 다음과 같다.

draw_text(x, y, width, height, str[, align]) 
str은 텍스트 내용을 의미한다. align에 대괄호가 쳐져 있는 것은 있어도 되고 없어도 되는 항목이라는 뜻이다. align은 텍스트 정렬 방식을 의미하는데, 0은 왼쪽 정렬, 1은 가운데 정렬, 2는 오른쪽 정렬을 의미한다.
만약 윈도우에 '안녕'이라는 텍스트를 가운데 정렬 형태로 써 넣고 싶다면, @윈도우 이름(가로위치, 세로위치, 가로길이, 세로길이, "안녕", 1)이라고 쓰면 된다.



draw_text_ex

 

  def draw_text_ex(x, y, text)

    reset_font_settings

    text = convert_escape_characters(text)

    pos = {:x => x, :y => y, :new_x => x, :height => calc_line_height(text)}

    process_character(text.slice!(0, 1), text, pos) until text.empty?

  end



draw_text_ex는 draw_text와는 달리 윈도우 규격에 맞춰 텍스트를 써 넣는 기능을 가지고 있다. draw_text는 텍스트가 그려질 width, height를 추가로 입력해야 글자를 써 넣을 수 있는데, draw_text_ex는 글자의 위치만 지정하면 자연스럽게 윈도우 안으로 글씨가 써 넣어지는 장점을 가지고 있다.

또한 draw_text_ex를 사용하면 줄을 변경하거나 글자를 크게 만드는 등, 다양한 기능을 사용할 수 있다. 이 때 기능은 이벤트에서 문장의 표시를 입력할 때 특수 기호를 사용하는 방법과 동일하다.

메소드의 내용은 기본 폰트 세팅으로 리셋시킨 후, text를 convert_escape_characters 메소드에 넣어 변환한다. 그 후 텍스트의 줄 높이 등을 계산하여 텍스트를 그리게 된다.


이러한 장점이 있기 때문에 보통 draw_text보다는 draw_text_ex를 사용하게 된다.




첫번째 글에서는 글씨를 윈도우에 쓰는 방법에 대해 살펴 보았다. 다음 글에서는 윈도우에 액터의 얼굴을 띄우거나, 액터의 정보를 띄우는 방법을 살펴 보도록 하겠다.


반응형