조회 수 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 RPG Maker 물체 밀어서 움직이는 이벤트 조금 더 쉽게 하는 법 zero? 2018.01.02 644
1003 언어/기타 [마지막 3명 모집] [취업연계무료교육] VR/AR 게임 콘텐츠 전문가 양성 과정 교육생 모집 file 황금상자 2017.07.14 702
1002 RPG Maker rpg vxa 로 겜만들때 데미지 설정 공식[링크] 준E 2017.06.08 740
1001 RPG Maker [꿀팁] 간단하게 만들 수 있는 실시간 전투 시스템 1 file 준E 2017.03.31 2019
1000 언어/기타 JSON parser 변환데이터 저장시 생기는 Object Too Deep 해결하기 title: 댓글러lklslel 2016.12.24 851
999 언어/기타 앙뜨프리너십에서 해커톤 부트캠프 모집중이네요 file 마나님이 2016.11.08 908
998 RPG Maker RPG MV에서 플러그인 오류의 원인에 대하여 1 title: 댓글러lklslel 2016.07.08 2359
997 RPG Maker RPG MV 게임 도중에 윈도우 스킨 파일 자체를 통째로 바꿔버리는 방법 (출처: HIME) 최저 2016.07.08 1627
996 언어/기타 게임의 버전을 짜 보자! - 유의적 버전 2.0.0 Yanggaeng 2016.06.07 1123
995 RPG Maker 텍스트 대화 도중 메뉴 여는 방법을 알아냈습니다! 2 file 정궈니 2016.03.12 2938
994 RPG Maker rpgmv 마우스 지원과 터치 지원이 되니. 2 팡소리 2015.10.25 1011
993 RPG Maker RPG Maker MV 와 AJAX를 이용한 웹통신 관련 영상. 2 HT9MAN 2015.10.25 2246
992 언어/기타 RPG게임 뻔한요소들. 8 title: 천무천무 2015.10.05 1644
991 언어/기타 자바스크립트와 관련해서 참고할 만한 사이트들 3 MARCO 2015.10.04 921
990 언어/기타 꿀잼이군요! 3 사람님[대회참가] 2015.05.20 873
989 RPG Maker [RPG2000/3 팁] 간편한 이벤트 단축키 title: 자게이하앵 2015.04.06 1833
988 RPG Maker [RPG2000/3 팁] 간편한 이벤트 단축키 1 file title: 자게이하앵 2015.04.05 748
987 언어/기타 [강의링크] 대비법칙-색상대비-밀당의 재미 약한 반대색 설계 title: 천무천무 2015.04.02 636
986 언어/기타 오다 주웠습니다. 9 사람님[대회참가] 2015.03.30 917
985 언어/기타 무료 이미지 사이트 Pixabay! 9 file 나작소 2015.03.28 909
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(김원배) | 사신지(김병국)