移动我的数组中的每个对象?

时间:2009-07-11 18:54:16

标签: objective-c cocoa arrays memory-management

我有一个数组,一个定时器,每隔5秒就向我的数组添加一个新对象,但是遇到了一个小问题。我有一个可重复调用的代码,它移动我的数组中的对象但由于某种原因,当一个新对象生成到我的数组中时,生成的前一个对象将停止移动。如何调用数组中的每个对象,而不是仅生成最后一个对象?

这是我调用移动对象的代码:

for (UIView *astroids in astroidArray) {
    int newX = astroids.center.x + 0;
    int newY = astroids.center.y + 1;
    astroids.center = CGPointMake(newX,newY);
}

编辑抱歉,这是我的数组代码:

// spawn the astroids every few seconds randomly along the x axis
// and remove them once they get off the screen
if ((gameStarted == YES) && (gameOver == NO)) {
    int randomX = arc4random() % 320;

    astroidArray = [[NSMutableArray alloc] init];

    UIImage *astroid = [UIImage imageNamed:@"astroidwhite.png"];
    UIImageView *astroids = [[UIImageView alloc] initWithImage:astroid];

    //set X and Y of the new imageView
    astroids.center = CGPointMake(randomX , -10);

    //add to array
    [astroidArray addObject:astroids];

    //add to the view, so it gets displayed.
    [self.view addSubview: astroids];
    [astroids release];
}

1 个答案:

答案 0 :(得分:2)

看起来每次分配新的小行星时都会分配一个新数组。然后,您将新的小行星添加到数组中,因此它是阵列中唯一的小行星。

因此,当你遍历数组时,它上面只有一个小行星。

<强>更新

那么,为了解决这个问题,请分配一次数组(在游戏启动期间?)。不要每次都创建一个新数组。

这部分:

astroidArray = [[NSMutableArray alloc] init];

...应该只发生一次,而不是每次创建一个新的小行星。