adsense



[cocos2d-x] 노드의 소실을 탐지하기

예를 들어 아래와 같은 경우를 가정합니다.

디펜스 게임입니다.

스프라이트(Sprite)를 상속한 Unit 클래스를 만들었습니다.
Unit의 객체 A는 역시 Unit 객체인 B를 공격합니다.

이때 A는 자기가 누굴 공격할지 알기 위해 Unit* target; 이라는 정보를 갖고, target에는 B의 포인터가 들어가 있습니다.

그런데, B가 다른 적의 공격을 받고 remove되었습니다.

이때 A의 target에는 기존의 B의 '주소'가 저장되어 있습니다.
즉, B가 remove되었어도, target은 특정 메모리를 여전히 가리키고 있습니다.

하지만 B가 remove되면서 해당 메모리는 다른 값이 들어가 있거나 할당되지 않은 메모리가 되었습니다.
A가 target의 멤버를 억세스하면 당연히 프로그램은 크래시합니다.

어떻게 하면 A는 B가 삭제되었다는 것을 인식할 수 있을까요?


A와 B가 같은 Node 위에 add되어 있다고 하면 다음과 같이 A는 target B가 소실되었음을 인식할 수 있습니다.

if (getParent()->getChildren().getIndex(target) == CC_INVALID_INDEX)
{
//target을 잃은 처리
}




덧글

  • 펭귄대왕 2019/01/17 16:51 # 답글

    target B 소실 여부를 확인하는 코드를 만나기 전에, 다른데서 생성된 새로운 Unit이 하필 딱 target 주소 위치에 들어가는 바람에 이 코드로 검출이 안되는 일이..
댓글 입력 영역


Books

Geek라이프

게임 매니악스 슈팅 게임 알고리즘
마츠우라 켄이치로,츠카사 유키 공저/손정도 역/박민근,Pope Kim 감수

게임 매니악스 퍼즐 게임 알고리즘
마츠우라 켄이치로,츠카사 유키 공저/김병국 역

핵심강좌! Cocos2d-x
이재환 저

될 수 있어! SE 13
나츠미 코지 저/Ixy 그림/김경훈 역
예스24 | 애드온2