질문과 답변

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 플레이어가 이벤트가 있는 방에서 이벤트 일시 삭제를 해놓고 나갔다 들어오면 계속 삭제되게 하는 법 4 엑설런트 2011.01.13 858
이벤트 작성 RMMV 플레이어가 이동할때 미끄러지듯이 이동하게 하는 법 없나요? 5 file 이누_ 2019.06.11 162
RMVXA 플레이어가 이동가능한 타일에서도 이동불가가 됩니다 4 Rocream 2017.08.06 228
RMVX 플레이어가 어떤 대상에 부딫히고 대상이 제거되는 법 1 SteinsGate 2016.06.08 114
RMVXA 플레이어가 설정한 이름 인식 2 Arees 2017.02.27 166
RMVXA 플레이어가 말고 다른 물체가 접촉시 이벤트를 실행시키고싶습니다 4 file 아쳐 2016.01.05 243
이벤트 작성 RMMV 플레이어가 능동적으로 버튼을 눌러서 캐릭터가 공격을 하게 하려면 어떻게 해야 하는지 알고 싶습니다ㅠㅠ(액션 RPG) 1 soul74 2022.11.27 79
RMVXA 플레이어, 동료 스킬 턴 제한 어떻게 하나요 1 신이다1 2018.05.15 118
RMMV 플레이어 캐릭터 크기/ 보행칩 비율 변경 플러그인은 없나요? 2 맥도날덕 2018.02.27 423
이벤트 작성 RM2k 플레이어 캐릭터 변경 4 file 포리차 2020.01.21 366
RMXP 플레이어 초기위치설정에서 캐릭터 방향이 아래로 되어있는 설정은 변경이 불가능 한가요? 배움을원하는자 2018.08.16 82
RMVX 플레이어 초기 위치 방향 바꿀 때 질문 3 file Felix 2015.03.12 296
RMVXA 플레이어 초기 위치 방향 바꾸는 법 질문.. 2 눈팅러 2015.01.25 235
RMVXA 플레이어 처음에 투명으로 어떻게 하나요? 7 포니테일 2014.02.08 799
이벤트 작성 RMMV 플레이어 주위만 밝게 만들 때 문제점 3 file 소녀160 2019.05.20 148
RMVX 플레이어 주변을 어둡게 할 수 없나요? 3 푸른사신 2014.02.28 710
RMVXA 플레이어 접촉 이벤트가 멋대로 실행돼요 4 레노 2018.10.25 140
RMVXA 플레이어 이벤트 편집이 되지 않네요 4 file 큰냥 2013.07.30 1355
RMVX 플레이어 이름바꾸기가 안되네요 4 마차군 2011.12.20 2148
RMVX 플레이어 이동 금지하게 하는방법 3 제갈가롱 2011.05.30 912
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