조회 수 661 추천 수 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탄에서 기대해 주세요.


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

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
1004 언어/기타 목에 좋은것들.... 1 켄타 2005.05.17 2070
1003 RPG Maker 좌표대입(ARPG) 사고실험.[이론편] 늑대소년 2005.05.18 1509
1002 언어/기타 스킬데미지를 10000이상 뜨게해보자.(턴알,액알 둘다) Dship 2005.05.18 1888
1001 언어/기타 Fruity Loops에서 FX탭 사용방법 (1) Mr^Lee 2005.05.18 1709
1000 RPG Maker RPG XP 배워보기 <변수를 마스터하자 상편> 1 덩키동크 2005.05.18 2206
999 언어/기타 100%고수강의!(변수이론) 늑대소년 2005.05.18 2470
998 언어/기타 나름대로 - 변수강좌 켈리시 2005.05.18 1624
997 언어/기타 변수(變數)의 기초 바람을 가르는 자 2005.05.19 1270
996 언어/기타 이번에는 오프닝을! 장아찌 2005.05.20 2635
995 RPG Maker 액션RPG 속성무기를 만들어보자!! 천룡수 2005.05.20 1538
994 RPG Maker 아르바이트를 만들자 . - 1 Norid 2005.05.20 1739
993 언어/기타 플레이어가 자기의 이름을 정한다 . [영어] file Norid 2005.05.21 1780
992 언어/기타 레벨업을 하라 . 그리하면 살것이니.. 1 file Norid 2005.05.22 1574
991 [RPG2000] 가이드북 -7- 창조도시 2005.05.22 11106
990 언어/기타 나라의 PHP 초보탈출 - 1편 나라 2005.05.22 1732
989 RPG Maker 경영 RPG만들기[콤플리트판] 늑대소년 2005.05.24 2039
988 [RPG2000] 가이드북 -1- (표지내용무) 창조도시 2005.05.25 14508
987 언어/기타 [c++] 생성자,파괴자 챔피온 2005.05.26 1668
986 언어/기타 《완벽하게 현실적인 게임을 만들려면 해야되는 조작 몇 가지》-[上편] 자이크로 2005.05.27 1852
985 언어/기타 [R2000] 초간단 단거리액알 2 비밀소년 2005.05.27 2521
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 51 Next
/ 51


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

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