질문과 답변

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 12387
이벤트 작성 RMVX 몇번 이상 죽었을 때 이벤트 나오게하기 1 탓탓타이탄 2022.07.13 128
이벤트 작성 RMMV 그림표시를 루프하고싶습니다. 2 Graper 2022.07.12 116
스크립트 작성 RMVX 선택지 개수 확장하는 법 1 탓탓타이탄 2022.07.08 159
라이선스 기타 동양풍 호러게임 BGM 쬬릿스 2022.06.27 234
턴제 전투 RMMV 전투 시작 시 나오는 화면전환 효과를 바꾸고 싶습니다. 마이럼 2022.06.27 203
턴제 전투 RMMV 전투 화면에서 나오는 대사 위치를 수정하고 싶습니다. file 마이럼 2022.06.27 192
이벤트 작성 RMMV 선택지를 하나하나 삭제해나가고 싶습니다. 4 쬬릿스 2022.06.27 315
기타 기타 게임에다 바람을 만들었는데 1 무명시절 2022.06.26 183
플러그인 사용 RMMV 대화창의 위치를 마음대로 지정하고 싶습니다 file 납작만두 2022.06.24 152
기본툴 사용법 RMMV 맵 만들때 타일 질문 드립니다. 1 Graper 2022.06.23 85
기타 RMMV 다들 처음 공부 하실 때 2 도리도리도리 2022.06.22 161
기타 RMMV 아이템창 글씨 정렬 file 마이럼 2022.06.22 98
기본툴 사용법 RMMV 메뉴에 로드 버튼을 만들고싶습니다. 3 Graper 2022.06.21 203
기타 RMMV 뉴비입니다 7 도리도리도리 2022.06.21 115
이벤트 작성 RMMV 스위치 ON 상태일때 이벤트가 안나오게 하고싶습니다. 2 file Graper 2022.06.20 109
이벤트 작성 RMMV (MV) 캐릭터를 특정 장소를 다 확인하고 돌아오면 나타나게 할 수 있나요? 2 병아리모험 2022.06.18 111
기본툴 사용법 RMMV (MV) 아이템 흭득시 화면에 무슨 아이템 흭득했는지 나오게 하는거 어떻게하는건가요? 1 병아리모험 2022.06.17 103
이벤트 작성 RMMV (MV) 하나의 이벤트를 여러군데에 넣을 수 있나요? 4 병아리모험 2022.06.17 140
기본툴 사용법 RMMV 욕조나 변기 이런건 dlc로 구매해야만 있는건가요? 2 병아리모험 2022.06.17 174
기본툴 사용법 RMMV 이벤트 자동실행후 종료를 어떻게 해야하나요? 4 file 병아리모험 2022.06.16 129
Board Pagination Prev 1 ... 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ... 516 Next
/ 516