2011-01-27 82 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 2011-01-27 17:43:47