질문과 답변

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 12390
RMVXA 쯔꾸르창이 전체화면으로 됩니다... 4 마맨 2014.01.11 29542
에러 해결 RMMV NW.js 프로필 오류 해결법 아시는분 있나요? 2 file MSM 2019.03.05 18735
기타 RPG만들기로 만든 게임은 에디트를 사용못하나요? 5 키키두두키 2011.10.09 13476
RMVXA 요즘 혜성 같이 나타난 RPG VX ACE 치트오메틱에 대해서입니다. 1 g223k 2013.04.10 11963
RMVXA RPG VX ACE 에서 조작키 바꾸는 법 3 째워잉 2013.08.17 10811
RMVX RGSS202.dll좀 주실분 2 알피지매니아스 2010.11.14 10515
RMVX RVDATA2 파일은 어떤 프로그램으로 열어야하나요? 2 글쓰니안쓰니 2013.03.28 10132
RMVX rpgvx계 게임을 받았는데 1 하구하구 2010.11.08 9686
RM2k3 2003 그래픽 (캐릭터,몬스터) xp에서도 사용 가능 하나요? 2 마우리 2012.03.20 8895
RMVX 대화창 스킵하는법 6 kaisis 2013.05.06 8720
RMVXA RPG VX ACE 윈도우 7유저의 한글 깨짐 현상. 3 kila233 2012.07.07 8627
RMVX RGSS202E.dll 이 없어요.. 어디서 구하죠? 2 C1님 2011.04.18 8103
RMVX RPGVX 오류(?) 2 『호┠심』군 2010.12.01 8057
RMVXA RPG만들기 VX ACE 이거에서 rgss3a파일 어떻게 열어요? 2 시에마 2013.07.28 7909
한글이 네모로 뜨며 깨집니다.(해결!) 4 file 꺄훌 2012.11.19 7840
기타 rvdata2 확장자는 무슨 제작툴을 쓴건가요? 6 식인곰푸 2014.06.17 7780
RMMV ~~.rpgmvp가 뭔가요? 2 file 무슨상관이라도 2016.08.25 7392
기타 사이트 이용 사운드 소재 란에 있는 사운드/효과음 소재들은 써도 되는 건가요? 2 jojiwell 2019.11.30 7384
RMVX 뱀파이어 액알에서 Die Self Switch A 어떻게 사용하는 건가요? 3 닉네임은2와20 2012.01.16 7268
RMVX 애니메이션 한 프레임당 초가 몇인지 알고싶습니다. 4 톰소여동생 2012.06.29 7181
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 516 Next
/ 516