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

단축키

Prev이전 문서

Next다음 문서

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

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 수정 삭제
이번 내용은 매우 짧습니다.
저번에 시간 관계상(수정을 귀찮...) 변수에 관한 설명을 못 넣었습니다.
그래서 여기서 설명하려 합니다.

별로 여러울건 못됩니다.

class Window_연금술사 < Window_Base
  def initialize
    super(0, 0, 160, 96)
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh
  end
  def refresh
    @total_sec = Graphics.frame_count / Graphics.frame_rate
    frame_연금술사 = @total_sec % 100
    text_연금술사 = sprintf("%02d", frame_연금술사)
    self.contents.clear
    self.contents.font.color = normal_color
    self.contents.draw_text(4, 0, 128, 32, "연금술사", 0)
    self.contents.font.color = normal_color
    self.contents.draw_text(4, 32, 120, 32, text_연금술사, 2)
  end
  def update
    super
    if Graphics.frame_count / Graphics.frame_rate != @total_sec
      refresh
    end
  end
end

저번 시간에 배운 것을 활용하여 만든 윈도우 입니다.
"연금술사"라는 텍스트와 함께 100까지 카운트 되고 초기화 되는
시계가 표시될 것입니다.


저번시간에, 변수는 C언어와 같은 방식으로 표시할수 있다고 했습니다.
가능 합니다. printf = ("%d", a); 가 C언어의 방식이죠.
이렇게만 하면 거의 모든 변수를 응용할수 있습니다.


그런데....


언어의 변수가 아닌, 게임에서의 변수(=variables)는 어떨까요...?
R2K 시리즈에선 스크립트가 없기 때문에, "변수"라고 하면 이벤트에서
설정되는 variables를 말합니다. 이런것들은 자체가 수치 이기 때문에
스트링으로 받아드릴수 없고, 에러를 뱉어 버립니다.


그런데.....


어째서 문장에서 v[x]라고 치면 x번의 변수가 스트링으로 나올까요?
Window_Message에 해답이 있습니다.

바로 to_s와 to_i.
연구는 해봤지만 두개의 특징에 대해선 명확하게 못 말하겠군요.

일단 to_s는 로컬 변수 등을 스트링화 시킬수 있습니다. 오브젝트.to_s 와 같은
형식으로 말입니다.
말인 즉슨, 1번 변수를 스트링화 시킨다면 이렇게 되겠죠.

$game_variables[1].to_s

이렇게 써 있다면 더 이상 변수로써의 기능(=수치)을 잃게 됩니다.
대신에 스트링으로써 기능을 가지게 되죠. 이러한 것들을
스트링이 위치한 곳에 넣어주시면, 이 변수의 값이 글자로 나옵니다.
스트링화 시켰다는 것은, 대상 자체가 글자가 된다라는 것이기 때문에,
숫자로 받아들일수 없는 것입니다.


그럼 to_i를 살펴봅시다.
Window_Message를 먼저 살펴봐야 겠죠.

text.gsub!(/\[Vv][([0-9]+)]/) { $game_variables[$1.to_i] }

보나마나 아니겠지만, 제 판단으로는 입력된 수치를 받아드릴수 있게
도와주는 것이나, 또는 받아들인후 그 자리에서 스트링화 시킨다,
또는 해시( {}와 같은 형태)에서 불러 들일때, $1에게만 의존 되어 불러
지는 것이다 라고 판정됩니다.

정확한것은 모릅니다. 그래서 전 to_s만 사용합니다.
혹시 to_i에 대해서 아시는 분은 댓글로.......


이렇게 만들어서 변수를 적용 시켜봅시다.
그런데 정작 나오는 수는 바꿔도 안 바꿔집니다.
왜 그럴까요? 저번 시간에 배운적 있을것입니다.
바로...

update

단순한 update로는 안됩니다. 자신이 세운 연립방정식을 대입하여,
update 메소드가 호출일때 그때마다 초기화 시켜 재계산, 재 출력의
작업을 해야합니다.

말은 어렵게 들리나, 알고 보면 간단합니다.

class Window_연금술사 < Window_Base
  def initialize
    super(0, 0, 160, 96)
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh
  end
  def refresh
    @total_sec = Graphics.frame_count / Graphics.frame_rate
    frame_연금술사 = @total_sec % 100
    text_연금술사 = sprintf("%02d", frame_연금술사)
    self.contents.clear
    self.contents.font.color = normal_color
    self.contents.draw_text(4, 0, 128, 32, $game_variables[1].to_s, 0)
    self.contents.font.color = normal_color
    self.contents.draw_text(4, 32, 120, 32, text_연금술사, 2)
  end
  def update
    super
    if Graphics.frame_count / Graphics.frame_rate != @total_sec
      refresh
    end
  end
end

이렇게 만들어 봅시다. 그렇다면 윈도우에 1번 변수와 시간이 표기될 것입니다.
여기서 def update를 주목 합시다.

  def update
    super
    if Graphics.frame_count / Graphics.frame_rate != @total_sec
      refresh
    end
  end

저번 시간에 설명 했죠. 이것은 그래픽을 초기화->재구성을 시킬때 필요한 것입니다.
자세한 설명은 이전 강좌에....
여하튼, 여기에 뭔가를 추가해야 합니다.
그전에 변수를 하나 더 만들어 봅시다. (언어로써의 변수)

@variables_연금술사 = $game_variables[1]

라고 refresh 부분에 추가해 봅시다.
그런후....

update 부분에 이렇게 추가해 봅시다. (super 아래에)

if @variables_연금술사 != $game_variables[1]
  refresh
end

이렇게 추가한 이유는 뭘까요?
자세한 설명은 저번 강의에서 했으나, 간단하게 설명하겠습니다.

refresh에서 한번 대입을 했습니다. 그런데 그 후에 1번 변수가 바꿔졌다면,
바꿔지기 전의 수를 가지고 있을 것입니다. 그래서, 그것이 다를경우,
refresh를 재소환 해서 초기화, 재구성화 시킨것입니다.

결과적으로, update만 해 놓으면 자동으로 초기와->재구성이 되죠.



강의는 여기서 끝나야 마땅하다만, 몇마디만 더 하겠습니다.
변수를 update에서 자동으로 할수 있게 하는 방법은, 솔직히
조금 불편합니다. 한번 바꿀때 여기저기 만져야 하니까요.
그래서 저는 윈도우를 씬이 변경 되거나 커맨드가 들어왔을때마다
새로 만드는 방법을 사용합니다. 그러면 윈도우 내에선
하나만 바꿔도 자동으로 처리가 됩니다.

이것에 대한 자세한 설명은 5탄에서 기대해 주세요.


※프레임을 위와같은 방법으로 하지 않는 이유는, 프레임 표기는
윈도우를 보는 동안에도 바뀌기 때문입니다.
?

  1. [RPG2000,2003]게이지쉽게 만드는법

  2. [Rpg2000,2003]주인공의 나이상승하게 하기

  3. [RPG2000/3 팁] 간편한 이벤트 단축키

  4. [RPG2000/3 팁] 간편한 이벤트 단축키

  5. [rpg2000]페이지의 순서와 이벤트의 출력

  6. [RPG2003] 한단계 도약 : 이중 변수번호의 변수

  7. [rpg2k] 바로가기를 이용해 테스트 플레이 실행하기

  8. [RPG2K~XP] 좌표를 통한 범위공격

  9. [RXP]윈도우 만들기 1탄-윈도우 제작

  10. [RXP]윈도우 만들기 2탄-텍스트 삽입

  11. [RXP]윈도우 만들기 3탄-특이한 텍스트들(변수편)

  12. [RXP]윈도우 만들기 3탄-특이한 텍스트들(프레임편)

  13. [RXP]윈도우 만들기 4탄-스페셜 윈도우(샐랙터블 편)

  14. [RXP]윈도우 만들기 4탄-스페셜 윈도우(커맨드)

  15. [TIP]RXP에서 돈 99999999 한번에 올리기

  16. [VB] SRPG의 이동경로는 어떻게? (1)

  17. [VB] SRPG의 이동경로는 어떻게? (2)

  18. [VX] 메뉴화면에 이어하기를 넣는 스크립트...

  19. [VX] 집안의 블라인드 다듬기 ~2차 블라인드

  20. [VX] 창문으로 빛이 뚫고 나오게 하기 [뽀샵]

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(김원배) | 사신지(김병국)