질문과 답변

Extra Form

자바스크립트에서 객체가 담긴 주소를 비우고 참조중인 식별자들을 모두 삭제하고싶어요. 

가능한가요?

비슷한 거라도 괜찮습니다.


목적은  생성자 Game_Event로 부터 생성된 객체를 참조하고 있는 식별자를 모두 제거하여 완전한 이벤트 객체의 소멸 입니다.


$gameMap._events[n] 을 undefiend로 변경하였으나 이벤트 객체가 사라지지 않고 쌓여 렉이 발생하는 것을 보고

이벤트 객체를 모두 비워버리고 $gameMap._events[n]에 undefined를 대입하니 Sprite 쪽에서 버그가 생기더라고요.(객체의 프로퍼티를 모두 비워버린 것이 원인. 이미 활용이 끝난 객체가 아직도 참조되고있는 것이 문제.)

아마 이벤트를 매 프레임마다 그리기 위해 이벤트 객체를 참조하는 것 같은데 그 식별자를 도저히 못찾겠습니다.

읽어오는 부분이 아마 $gameMap.events 는 아닌 것 같습니다.


Sprite_Character.prototype.setCharacterBitmap = function() {
this.bitmap = ImageManager.loadCharacter(this._characterName);
this._isBigCharacter = ImageManager.isBigCharacter(this._characterName); //이벤트 객체의 _characterName
}; //읽어오는 것 예상


Spriteset_Map.prototype.createCharacters = function() {
this._characterSprites = [];
$gameMap.events().forEach(function(event) {
this._characterSprites.push(new Sprite_Character(event)); //이 부분에서 this._characterSprites 가
}, this); //이벤트 객체를 읽거나 참조하는 것 예상
$gameMap.vehicles().forEach(function(vehicle) {
this._characterSprites.push(new Sprite_Character(vehicle));
}, this);
$gamePlayer.followers().reverseEach(function(follower) {
this._characterSprites.push(new Sprite_Character(follower));
}, this);
this._characterSprites.push(new Sprite_Character($gamePlayer));
for (var i = 0; i < this._characterSprites.length; i++) {
this._tilemap.addChild(this._characterSprites[i]);
}
};

 

Scene_Map.prototype.createSpriteset = function() {
this._spriteset = new Spriteset_Map(); //결국 참조하고 있는 식별자를 알아내지 못했습니다.
this.addChild(this._spriteset); //Scene_Map은 SceneManager.goto 를 통해서만 객체를 생성하는 것
}; //같은데 다시 프로토타입을 따라 올라가고 있는 저를 발견하였습니다...

 

 객체 삭제 아니면 저 망할 이벤트 객체(Game_Event로 생성된 객체)를 어떻게든 없애버리고 싶습니다.


Sprite_Character  생성자로 생성된 객체를 참조하는 식별자가 무엇인지 알려주셔도. 좋습니다.


질문이 여러개로 나뉘어졌는데 답변이 확정되면 수정하겠습니다.

■ 질문전 필독!
  • 질문할 내용이 이 게시판이나 강좌에 이미 있는지 확인합니다.
  • 하나의 게시물에는 하나의 질문만 합니다.
  • 제목은 질문의 핵심 내용으로 작성합니다.
  • 질문 내용은 답변자가 쉽게 이해할 수 있도록 최대한 상세하게 작성합니다.
  • 스크립트의 전문이 필요할 경우 txt 파일 등으로 첨부해 주시기 바랍니다.
  • 답변받은 게시물은 삭제하지 않습니다.
  • 답변이 완료된 경우 해당 답변해주신 분들께 감사의 댓글을 달아줍니다.
    • 처음 오신 분들은 공지 게시물을 반드시 읽어주세요!

※ 미준수시 사전경고 없이 게시물을 삭제합니다.

Who's A구몽

profile

닉네임 변경

6º   ->  A구몽

Comment '5'
  • profile
    러닝은빛 2018.09.17 21:42

    _characterSprites에 저장하는 게 아닌 애초에 다른 배열에 저장 & 관리한 후, 삭제하는 방법.

    아니면 _characterSprites의 .forEach로 열거해서 Sprite_Character의 _character 변수를 비교해서 정확한 값을 찾아서 지우는 방법이 있습니다.

    지우려면 tilemap 객체에서 .removeChild(child)를 호출해서 지우면 됩니다.

  • profile
    A구몽 2018.09.19 22:06
    감사합니다. 해보겠습니다.
  • profile
    A구몽 2018.09.21 19:02

    콘솔로 확인하려는데 혹시 객체 포함관계를 알고계시나요?
    처음에 어디로 들어가야 할지를 모르겠네요. 그걸 찾다가 포기한지라.


    아, 일부로 시간들여서 찾아주시진 않아도 괜찮습니다.

    최근 이벤트 재활용 방안으로 문제해결이 확정된 상태라서요...


    이 질문은 7일 내에 삭제 또는 수정하겠습니다.

  • profile
    러닝은빛 2018.09.22 16:07

    소스 파일을 열어서 확인이 가능합니다. 모든 스프라이트는 하나의 컨테이너이며 자식 객체를 가질 수 있습니다. 이때 자식 객체는 부모의 위치를 기준으로 상대 좌표입니다.

    SceneManager._scene._spriteset.children를 호출하면 자식 객체가 나오고, 콘솔에선 자식 객체의 자식들(children)까지 모두 펼쳐서 볼 수 있습니다.

    전체 순서를 확인하고 싶다면 아래를 보면 되고,

    SceneManager._scene._spriteset._baseSprite.children

    Z 오더로 만들고 싶을 땐, SceneManager._scene._spriteset._tilemap에 추가합니다. 타일맵의 자식 객체로 추가하면 z 속성에 따라 children 배열을 재정렬 합니다. 이 역시 children으로 확인이 가능합니다.


    SceneManager._scene._spriteset._tilemap.children


    애초에 SceneManager._scene 만 호출해도, 다 확인할 수 있습니다. 아니면, 크롬 확장 스토어에서 PIXI 치면, 더 편하게 볼 수 있는 게 있긴 한데 v3 용이라 가끔 v4에서 오류나니 그냥 콘솔로 확인하세요.

    https://chrome.google.com/webstore/detail/pixijs-devtools/aamddddknhcagpehecnhphigffljadon?hl=ko


    로드 하는 법은 제 블로그에 올린 적이 있던 것 같네요. 다만 비추천입니다.


    https://biud436.blog.me/221262821805

  • profile
    A구몽 2018.09.23 04:53

    찾았습니다. 하지만 메모리 누수의 일부였습니다. 렉이 발생하는 시간이 5분에서 10분으로 연장되었습니다.
    갈길이 머네요.
    이번에도 많이 알아갑니다.


    이 질문의 답변은 SceneManager._scene._spriteset._characterSprites[n]._character 가 되겠네요.


List of Articles
종류 분류 제목 글쓴이 날짜 조회 수
공지 묻고 답하기 가이드 습작 2014.06.14 12397
RMVX 메세지박스 바꾸는 법좀요... 1 dlwog2 2014.06.01 531
알만툴 MV버전 게임 한글화에 필요한 AT코드는 아직 없나요? 리니스 2016.04.19 531
RMXP RPGXP 접속애러 가나다수방수 2010.10.04 532
RMMV 대화창에 캐릭터 이미지 띄우는 방법들에는 어떤 게 있을까요? 비둘기팀장 2019.02.13 532
RMVXA 플레이 내에서 게임 시스템에 영향을 주게하는 방법은 없나요 2 언더마인드 2014.09.28 532
RMXP 아이템 색 바꾸는 스크립트 적용법.. 윌리스 2014.02.01 532
RMVXA 지형레이어가 아닌 레이어 위에 다른 타일로 덮어쓰게 하는 방법이 없나요? 4 repola 2014.05.22 532
RMVXA 크리티컬 발생 시 데미지 수치 변경을 어떻게하나요? 2 작삼 2014.05.25 532
RMVXA 저장 변수 출력 은호 2014.06.08 533
RMXP 맨처음 스토리 설명에 대해서 4 file 제프 2014.05.04 533
RMXP 정해논 방향키클릭시 소리 3 크루즈 2011.02.12 534
RMVX 특정 스크립트를 같이 넣으면 오류가 생깁니다. MMM 2014.07.29 534
RMMV 게임 시작하자마자 텍스트창 같은 이벤트를 띄우고 싶습니다 3 najongjine 2016.12.20 534
RMVX 전투시 공격 기술과 스킬기술 알3 2011.01.09 535
RMVX 문장이 나오지 않습니다... 7 file 천둥번들 2014.05.05 535
RMVX 이미지를 밑으로 이동해서 사라지게 어덯해 하나요? 1 RPG깐쥐남 2010.12.01 536
RMXP 버튼눌러서 빨라지게 하기 2 메딕 2011.01.02 536
RMVX 질문이요 ;; 2 단풍 2011.01.03 536
RMXP 아... 아이콘 이미지 오류... 1 크라이소르 2011.01.03 536
RMVX 적을 쓰러뜨려도 배틀러 이미지가 사라지질 않습니다. MMM 2014.07.23 536
Board Pagination Prev 1 ... 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 ... 516 Next
/ 516