RMVXA

스크립트 상 변수 문제입니다.

by 아이미르 posted Aug 08, 2012
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form

제가 상점 시세 스크립트 때문에 골머리를 앓고 있습니다.

 

이전에 올렸던 버전은 테스트를 해보니까 명령어가 제대로 안먹히길래 왜 그런가 했더니

 

모듈의 데이터가 클래스의 데이터랑 같이 변동하더라고요;;;

 

무슨 소린고 하니...

 

module IMIR_SHOP
  
  SHOP = [] # 상점 번호에 따른 초기 상품 갯수 자료.
 
  SHOP[0] = []
  SHOP[0][0] = [] # 0 : 아이템
  SHOP[0][0][0] = nil # 0번 아이템은 없으므로 nil 처리
  for id in 1..ITEM_MAX
    SHOP[0][0][id] = [ 0, 100]
  end

end

 

대충 이런 식으로 기초 데이터를 설정하고

 

class Game_Shop
  #--------------------------------------------------------------------------
  # ● 공개 인스턴스 변수
  #--------------------------------------------------------------------------
  attr_accessor :commodity # 상점 상품 목록
 
  #--------------------------------------------------------------------------
  # ● 오브젝트 초기화
  #--------------------------------------------------------------------------
  def initialize
    @commodity = []
    set_commodity
  end
 
  #--------------------------------------------------------------------------
  # ● 자료 초기화
  #--------------------------------------------------------------------------
  def set_commodity
    @commodity = []
    @commodity = IMIR_SHOP::SHOP
  end

end

이런 식으로 클래스의 변수를 초기화 할때 모듈의 데이터값을 @변수에 줬습니다.

 

그리고 자료 초기화 이후에는 원본 자료가 필요할 때 모듈의 데이터값을 가져가다 비교대상으로 써먹었습니다.

 

그러면 제 생각에는 모듈의 데이터는 그대로 있고 클래스의 @변수 값만 변해야 정상일 텐데

 

이벤트의 스크립트를 이렇게...

 

n=$game_shop.commodity[1][0][1][0]
l=IMIR_SHOP::SHOP[1][0][1][0]

$game_variables[2] = n
$game_variables[3] = l

 

이 아래에 변수를 문장의 표시로 나타내게 해봤더니 물건을 구매하니 ( @변수를 건드렸더니 

물론 Scene_Shop에서는 $game_shop.commodity[1][0][1][0]를 움직이게 했습니다)

IMIR_SHOP::SHOP[1][0][1][0]값도 같이 변하더군요.

 

이 부분을 도통 이해할 수가 없네요;;;

 

덤으로 어떻게 안될까... 하고 시행착오를 하다가

 

Game_Temp클래스에다

 

  attr_accessor :commodity               
  #--------------------------------------------------------------------------
  # ● 오브젝트 초기화
  #--------------------------------------------------------------------------
  alias com_ini initialize
  def initialize
    com_ini
    @commodity = []
  end

 

이런 @변수를 만들어서

 

class Game_Shop

  #--------------------------------------------------------------------------
  # ● 자료 초기화
  #--------------------------------------------------------------------------
  def set_commodity
    @commodity = []
    @commodity = IMIR_SHOP::SHOP
    $game_temp.commodity = IMIR_SHOP::SHOP
  end

end

 

이런 식으로 초기화를 시켰더니 $game_temp.commodity는 변하질 않더군요.

즉, 원하던 결과를 얻긴 했는 데 이게 제대로 얻어 걸린 건지... 아니면 이렇게 했을 때 어떤

문제가 발생할런 지 걱정입니다. 가뜩이나 전공 공부한다고 이쪽에 쓸 시간이 없는데,

아이디를 달고 올린 스크립트는 엉망이니 부끄럽기만 하고 ...;;;

 

도대체 클래스의 @변수와 모듈은 어떤 관계이길래 사람을 이렇게 당혹스럽게 하는 건가요;;;

 

oTz