2011-01-27 8 views
0

내 스프라이트의 좌표를 배열로 만들 필요가있다. 스프라이트가 배열에서 좌표를 가지면 좌표를 제거하고 싶다. 다른 스프라이트를 원하지 않기 때문이다. 같은 좌표, 나는 그것을 작동시킬 수없는 것, 오류가없고 디버깅 할 때 nsexception과 종료라고합니다. 내가 뭘 잘못하고 배열을 할당 취소합니까? 내가 dealloc에서 그것들을 릴리즈 할 때 선언 할 필요가 있다고 말합니다.배열에서 정수를 제거

CGPoint cg1 = CGPointMake(33,33); 
NSValue *cg1obj = [NSValue valueWithCGPoint:cg1]; 

CGPoint cg2 = CGPointMake(33,97); 
NSValue *cg2obj = [NSValue valueWithCGPoint:cg2]; 

NSMutableArray *numberxy = [[NSMutableArray alloc] init]; int pointcount = 0; 
[numberxy insertObject:cg1obj atIndex:pointcount++]; 
[numberxy insertObject:cg2obj atIndex:pointcount++]; 

NSMutableArray *sprites = [[NSMutableArray alloc] init]; int spritecount = 0; 
[sprites insertObject:red1 atIndex:spritecount++]; 
[sprites insertObject:red2 atIndex:spritecount++]; 

for (int i=0; i<3;i++) { 
    int rpoint = arc4random() % 3; 
    int rsprite = arc4random() % 3; 

    CGPoint point = [[numberxy objectAtIndex:rpoint] CGPointValue]; 

    CCSprite *sprite1 = [sprites objectAtIndex:rsprite]; 

    sprite1.position = ccp(point.x,point.y); 

    if (sprite1.position.x == point.x && sprite1.position.y == point.y) { 
     [numberxy removeObjectAtIndex:rpoint]; 
     [sprites removeObjectAtIndex:rsprite]; 
    } 
} 

답변

1

코드가 이상합니다. 사용 후 xValue이 정의 된 이유는 무엇입니까? 이전에 동일한 방법으로 xValue을 정의한 경우 누수가 발생할 수 있으며 이제 xValue을 다시 정의합니다. X이 새 xValue에 있는지 확인합니다. 새 xValue에는 아무 것도 없으므로 if 문은 false로 평가되므로 아무 것도 제거되지 않습니다.

NSNumber *X = [NSNumber numberWithInt:randomNumberx]; 
[xValue containsObject: numberx]; 

xValue = [[NSMutableArray alloc]init]; 
if ([xValue containsObject:X]) { 
    [numberx removeObject:X]; 
} 

또한 if 문의 [xValue containsObject: numberx]; 외부의 점은 무엇인가? 그것은 목적이 없습니다.

+0

이상하지 않습니다 - 말도 안돼. Dangermouse의 코드는 의미가 없으며 객체 참조의 포인터에 대한 이해가 부족함을 나타냅니다. 내 제안은 Objective-C 가이드를 읽고 해당 코드로 컴퓨터를 재생하는 것입니다. 모든 코드 행이 무엇을하는지 설명하십시오. – bbum

+0

@David - 죄송합니다. 두 개의 다른 프로그램의 코드를 하나의 코드로 복사 한 결과, 두 개의 프로젝트가 열렸습니다. 코드를 편집합니다. – Dangermouse

+0

@Dangermouse, 업데이트 된 코드가 잘 보입니다. 작동합니까? – David

관련 문제