질문과 답변

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 20448
RMVXA 캐릭터 선택하게 하는법 3 Jmyu 2018.09.18 143
RMMV 게임도중에 몇번 죽었는지 알려주는 플러그인 없나요??? 1 해킹당한해커 2018.09.18 115
사이트 이용 알만툴 혹은 자바스크립트 기초 '유료' 강의 사이트를 찾습니다! 파란소리 2018.09.17 171
RMMV 스프라이트 객체에서 이벤트 객체를 참조하는 식별자 위치 관련. 5 A구몽 2018.09.16 111
RMMV 이미지 불러서 맵에 고정시키는 플러그인 없나요??? 2 해킹당한해커 2018.09.16 198
기타 비영리 목적 취향 게임 배포 심의에 관해 4 라카에 2018.09.16 566
RMMV 이거 무기,장비, 삭제하는 방법 있나요??? file 해킹당한해커 2018.09.16 97
RMMV 내 컴에 DLC 이거 있던데 이거 사용해도 되나요? 3 file 해킹당한해커 2018.09.14 167
RMVXA 가만히 있을 때 체력회복 1 리테 2018.09.12 134
기타 VX게임을 MV로 변경해서 모바일에서 구동 가능하나요? 1 ㅣㅅㄱㄷㄱ 2018.09.12 439
RMMV [스크립트] 파티 멤버 체력 퍼센트 감소시 사망 안하게 하는방법 2 몽롱하다 2018.09.11 107
RMMV 특정 좌표로 점프하게 하는 법 3 고르고르고 2018.09.11 149
RMVXA 대사 스킵 스크립트 어떻게 적용하나요? 1 Mark.0 2018.09.10 173
RMMV mv 트라이얼 연댕 2018.09.09 94
RMMV 마우스 클릭 이동시 대쉬 안하고싶어요. 2 A구몽 2018.09.09 184
RMMV [자바스크립트] 메시지창이 게이지 위에 뜨게하기 6 file 몽롱하다 2018.09.09 212
RMVX 캐릭터의 자동이동 설정 2 시간측정기초시계 2018.09.08 370
알만툴2003 1.09버전 한패를 1.12버전에 부분적으로 적용하는 방법이 없을까요? 지나가던 2018.09.08 99
기타 혹시 맵타일중 XP맵타일크기룰 VX ACE로 바꿀방법없을까요? LWH 2018.09.06 167
RMMV 총만들기 16 초보입니다! 2018.09.04 492
Board Pagination Prev 1 ... 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 ... 518 Next
/ 518