하나의 NSMutableArray에서 다른 NSMutableArray로 스프라이트를 복사하려고하는데 첫 번째 NSMutableArray에서 CCSprite를 삭제하면 두 번째 Array에서도 삭제됩니다. 어떻게 방지 할 수 있습니까?copy NSMutableArrays 사이의 CCSprites
init 메서드에서 배열은 아래와 같이 초기화됩니다.
spriteTempArray = [[NSMutableArray alloc] init] ;
myPowerUpArray = [[NSMutableArray alloc] init] ;
이이 화면의 코너로 이동하며 저장된 첫 번째 방법은, 스프라이트 화면 배치 및 스프라이트 터치 드 때
CCSprite *powerUpSprite = [[CCSprite alloc] initWithFile:SpriteFileName ] ;
powerUpSprite.position = ccp(xcenter,ycenter);
powerUpSprite.scale = 0;
[self addChild:powerUpSprite z:20 tag:puTag];
[spriteTempArray addObject:powerUpSprite];
id zoomIn = [CCScaleTo actionWithDuration:0.2 scale:1] ;
id moveTo = [CCMoveTo actionWithDuration:0.2 position:ccp(winSize.width/2,120)];
[powerUpSprite runAction:zoomIn];
[powerUpSprite runAction:moveTo];
다음 화면 어딘가에 애니메이션 된 것이다 다른 NSMutableArray (myPowerUpArray)에 있습니다. 그러나 delete 액션은 두 배열에서 스프라이트를 지 웁니다.
CCSprite *powerUpSprite = [spriteTempArray objectAtIndex:0];
id zoomOut = [CCScaleTo actionWithDuration:0.2 scale:0.35] ;
id moveTo = [CCMoveTo actionWithDuration:0.2 position:ccp(winSize.width - 24,winSize.height -31 * myPowerUps -80)];
[powerUpSprite runAction:zoomOut];
[powerUpSprite runAction:moveTo]
[myPowerUpArray addObject:powerUpSprite];
[self deleteSpriteTempArray];
아래의 스프라이트 삭제 방법.
-(void)deleteSpriteTempArray{
NSMutableArray *filesToRemove = [[NSMutableArray alloc] init];
for (id obj in spriteTempArray) {
[filesToRemove addObject:obj];
[self removeChild:obj cleanup:YES];
}
[spriteTempArray removeObjectsInArray:filesToRemove];
}
나는 화면에서 사라지고 드 스프라이트 이외의 배열을 관찰하지 않았습니다.
일부 코드를 보여줍니다. – YvesLeBorg
디버깅 도움말을 찾는 질문 ("이 코드가 작동하지 않는 이유는 무엇입니까?")에는 원하는 동작, 특정 문제 또는 오류 및 질문 자체에서이를 재현하는 데 필요한 가장 짧은 코드가 포함되어야합니다. 특히 배열을 할당/초기화하는 방법과 복사가 수행되는 방법을 보여주십시오. – LearnCocos2D
질문에 '첫 번째 배열'과 '두 번째 배열'이 다시 나타납니다. 스프라이트가 '두 번째 배열'에서 삭제 된 것을 어떻게 보나요? – YvesLeBorg