제가 상점 시세 스크립트 때문에 골머리를 앓고 있습니다.
이전에 올렸던 버전은 테스트를 해보니까 명령어가 제대로 안먹히길래 왜 그런가 했더니
모듈의 데이터가 클래스의 데이터랑 같이 변동하더라고요;;;
무슨 소린고 하니...
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