질문과 답변

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

 

 


Who's 아이미르

?

허루쿠... 임용고시 공부해야되는데 이러고 있다....

 

알만툴의 중독성은 쩔어준다는;;;

Comment '2'
  • ?
    허걱 2012.08.09 00:06
    해결이 됐나요? 제가 볼때는 여전히 같이 변할것 같은데...

    아무튼, 그렇게 같이 연동되는 이유는 배열이나 해쉬같은 집합의 경우
    변수에 대입을 해줬을 때 내용이 복사되는게 아니라 주소값이 할당되는걸로 알고 있습니다.

    예를들어 위와 같은 경우처럼 var = IMIR_SHOP::SHOP 이라고 해줬을 때
    var 은 [...] 이라는 내용이 들어가는게 아니라 IMIR_SHOP::SHOP 을 나타낸다고 할 수 있죠.

    음...비슷하게 들릴지도 모르겠지만...;;;
    결론을 말하자면 배열등을 변수에 대입할 때는 내용이 아니라 주소가 할당되게 됩니다.
    (같은 소리를...ㄷㄷ;)

    주소가 아니라 내용을 대입하고 싶은 경우는 .dup 라는 메소드를 사용하면 됩니다.
    var = IMIR_SHOP::SHOP.dup
    이와 같이 해주면 var 에 IMIR_SHOP::SHOP 가 가지고 있는 내용이 대입되게 됩니다.

    (일단 결론을 말하긴 했는데 이해가 안가면 다시 댓글달아 주시면 다시 알려드릴께요)
  • ?
    아이미르 2012.08.09 18:04
    음.. 저 방법도 완전 해결은 아니었습니다. 저장하고 새로 불러오기하면 초기치를 유지하는 데 작성한 직후나 작성한 뒤 타이틀로 이동하고 끄지 않은 채로 바로 새게임을 시작하면 같은 값이 따라다니네요.

    가르쳐 주신 대로 IMIR_SHOP::SHOP.dup나 IMIR_SHOP::SHOP.clone ( 도움말에서 찾았습니다 )을 실험해봤지만 이번에는 배열 내부의 nil값에서 데이터가 꼬이더군요;;; nil값일 때 정의되지 않았다나 어쨌다나;;

    그래서 무식하게 해결했습니다..

    for i in 0..IMIR_SHOP::SHOP_MAX
    @com_list[i] = []
    @com_list[i][0] = []
    @com_list[i][1] = []
    @com_list[i][2] = []
    for j in 1..IMIR_SHOP::ITEM_MAX
    @com_list[i][0][j] = []
    @com_list[i][0][j][0] = @commodity[i][0][j][0]
    @com_list[i][0][j][1] = @commodity[i][0][j][1]
    end
    for j in 1..IMIR_SHOP::WEAPON_MAX
    @com_list[i][1][j] = []
    @com_list[i][1][j][0] = @commodity[i][1][j][0]
    @com_list[i][1][j][1] = @commodity[i][1][j][1]
    end
    for j in 1..IMIR_SHOP::ARMOR_MAX
    @com_list[i][2][j] = []
    @com_list[i][2][j][0] = @commodity[i][2][j][0]
    @com_list[i][2][j][1] = @commodity[i][2][j][1]
    end
    end

    이렇게요;;;; 가르쳐 주신 게 배열은 변수처럼 등호로는 대입이 안되니까
    아예 배열 값 하나하나 대입하게 만들었네요.

List of Articles
종류 분류 제목 글쓴이 날짜 조회 수
공지 묻고 답하기 가이드 습작 2014.06.14 12448
스크립트 작성 RMMV 변수에 따라 표시이미지를 다르게 띄우고 싶습니다 1 file 도Vㅏ킨 2024.06.23 14
스크립트 추천 RMVXA 미니게임을 하는동안 위에 점수판을 띄워주고싶은데 방법이 없을까요? 홍홍이1 2024.02.07 15
이벤트 작성 RMVXA 스위치가 꺼질 경우 이미지를 끄게 하고 싶습니다. 1 Payroy 2024.01.05 16
에러 해결 RMMV bgm파일이 뜨지를 않아요 1 초본 2024.01.10 16
이벤트 작성 RMMV 보트가 움직여지지 않습니다. 3 file pokapoka 2024.02.19 17
맵배치 RMXP 맵칩 버그 ssplokks 2023.10.20 18
에러 해결 RMVXA rgss301파일이 복사 붙여넣기가 안됩니다 다크크리에이터 2023.11.16 18
액션 전투 RMMV 메인 메뉴 혹은, 현재 메뉴 화면을 새로고침 할 수 있는 방법이 궁급합니다. 니노미야 2023.11.20 18
퀘스트 작성 RMVXA 연타 이벤트가 안 작동되어요... 1 file tokki 2023.12.24 18
기본툴 사용법 RMVXA 특정 맵에서 플레이어가 움직이지 않습니다. 유_ 2023.12.25 19
기타 RMVXA 대사 글꼴 바꾸는법좀 알려주세요 ㅠ 극세사이불 2024.02.26 20
기본툴 사용법 RMMV 분명히 배경음악 m4a+ogg 파일 둘 다 넣었는데 게임 툴에서 인식을 못합니다 파트로클로스 2023.12.08 21
기타 RMMV 색조변경이 적용되지 않는 이벤트 무명시절 2023.01.08 21
스크립트 사용 RMVXA 전투 개시시 상태 부여 스크립트 질문 AAAA. 2023.11.14 21
기타 RMMZ 그림을 클릭하면 이벤트 발생 1 Sian 2024.02.07 22
이벤트 작성 RMVXA 대화 중 이벤트 멈춤 해결 방안 질문 1 이름뭐하지 2024.05.19 22
게임 배포 RMMZ 여러분들 게임 파일 단일화 어떤 프로그램으로 하시나요? 하라아아암 2023.11.22 22
에러 해결 RMXP BGM을 발견못하는 오류 file wombat 2024.01.31 22
기타 RMMV 플레이어가 팔로어를 바라보고 있다라는 스크립트를 찾고 있습니다 무명시절 2024.01.04 23
스크립트 작성 RMMV 조건분기에서 마우스 클릭 인식은 어떻게 설정하나요? 2 김신아 2024.05.26 23
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 516 Next
/ 516