2017-12-29 3 views
0

나는 서브 클래스 만들었습니다Swift에서 부모로부터 정확하게 SKSpriteNode의 하위 클래스를 제거 할 수 있습니까 (배열, 화면상의 공간에서 제거해야합니까?)? 나는 코드가 나는 적을 쏠 때 이제</p> <pre><code>let enemy = EnemySprite(imageNamed:"enemy.png") self.addChild(enemy) </code></pre> <p>:

class EnemySprite: SKSpriteNode

을하고이 코드를 사용하여 내 게임 장면에서 적을 추가

enemy.removeFromParent() 

적이 화면에 표시되지 않지만 _enemiesSpritesArray.count은 그대로 유지됩니다. 또한, 내가 적을있는 곳으로 총을 쏠 때, 스프라이트가 같은 지점에있는 것처럼 총알이 거기에서 멈 춥니 다. 여전히 같은

override func removeFromParent() { 
    super.removeFromParent() 
} 

을하지만 : 나는 추가 시도했습니다.

어떻게 스프라이트를 완전히 제거 할 수 있습니까?

답변

2

배열에서 인스턴스를 제거해야합니다.

if let index = enemiesSpritesArray.index(of: enemy) { 
    enemiesSpritesArray.remove(at: index) 
} 
+0

고맙습니다. 그것은 대단한 일이 아니며 :) 자동 카운트의 시대에 릴리즈 할 필요는 없지만 배열에서 수동으로 항목을 제거해야한다고 생각하는 것입니다. – EranKT

+1

어레이에서 제거하는 것은 ARC 및 자동 릴리스와 아무 관련이 없습니다. 배열에 있다는 사실은 객체가 여전히 존재한다는 것을 의미합니다. 충돌 감지가 다소 재미있을 수도 있습니다. –

+1

신속하게 시작하기 전에 Cocos-2d를 사용하여 아이를 제거하고 배열에서 자동으로 제거했습니다. 나는 조금 바뀌 었다고 생각한다 ...;) – EranKT

관련 문제