lklslel2016.12.20 20:54
hoguduk님께서 작성하신 부분이 문제가 되는 것은..

Sprite_Character._character = character

와 같은 의미인

this._character = character;

로 작성을 해두시고

character._sprite = this;

로 지정을 해두시고 게임이나 기타 등등의

활동에는 지장이 없을 겁니다만...


이를 데이터로서 저장하려고 JSON문자로

변환하려고 할 때에 문제가 발생합니다...

JSON문자로 변환할 때에 고리형식의

데이터 참조가 이루어질 경우에 이를

몇 회이상 시도하다가 할 수 없다는 판단을

하게 되면 Object Too Deep 에러를 띄웁니다.


이런 경우의 해결책은 해당 Sprite_Character의

식별 ID나 인덱스 번호를 저장하는 것이 바람직합니다.


실제 RPG MV의 스크립트 구조를 살피다 보면

알 수 있는 점입니다만, 직접적으로 데이터에

접속시켜놓은 것이 아닌 ID로 접근하는 방식은

데이터의 저장시 참조하는 외부 데이터로만

취급이 되기에 문제없이 저장이 되는 겁니다.



그러므로 hoguduk님께서도 스크립트를 작성하실

때에 RPG MV상의 암묵적인 시스템의 룰을

지키시는 것이 에러를 적게 발생시키고 최적화도

비교적 쉽게 할 수 있는 지름길입니다.


일반적인 상황에서 javascript로 작성한 후

Object Too Deep 에러를 발생시켜 볼 수 있는

경우는 스스로를 반복적으로 호출하여

목표달성 / 연산을 하는 재귀식 객체접근법에서

찾아볼 수 있습니다.



객체에 접근하여 데이터를 얻기 위해서

여러번 반복적으로 일정 횟수(일정 시간) 이상

경과하게 되면 발생하는데... 일반적으로는

그렇게 작성해서 사용할 방법을 알지 못하기에

RPG MV에서 해당 에러가 발생한 경우는

직접적인 데이터 접근에 따른 고리형태의

데이터 순환이 지속된다고 보시면 되겠습니다.



데이터를 찾으려고 메모리 주소를 따라가지만

같은 곳을 멤도는 무한 루프와도 같은 상황이

발생했을 시에 일어나기 때문에 결코 가볍지

않은 에러이기도 해서 해당 에러를 발생시킬만한

실행 스크립트는 되도록이면 회피하는 것이

바람직하다고 할 수 있습니다.



회피하는 방법 중의 하나는 Id 값을 다음과 같이 집으시면 됩니다.

SceneManager._scene._spriteset._characterSprites[0].spriteId

와 같은 형태로 spriteId를 얻으실 수 있습니다.



hoguduk님께서무엇 때문에 Sprite_Character를

character._sprite로 집으시려는지는 제가 알 수가

없기에 추가적인 정보는 드릴 수 없을 듯합니다.
파일 첨부

여기에 파일을 끌어 놓거나 파일 첨부 버튼을 클릭하세요.

파일 크기 제한 : 0MB (허용 확장자 : *.*)

0개 첨부 됨 ( / )






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

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