2011-07-24 47 views
0

这里是我的代码:问题的UIImageView的动画:动画停止

-(void) createNewBall { 

    UIImage * image = [UIImage imageNamed:@"bulle_03.png"]; 
    bulleBouge = [[UIImageView alloc] initWithImage:image]; 

    [bulleBouge setCenter:[self randomPointSquare]]; 
    [[self view] addSubview:bulleBouge]; 

} 

-(void)moveTheBall{ 

    bulleBouge.center = CGPointMake(imageView.center.x + X, imageView.center.y + Y); 

} 

createNewBall被称为每两秒钟。我的问题是,创建的每个bulleBouge都会在两秒后停止移动。我不知道为什么。

我该如何解决这个问题?

回答

3

它停止移动B/C正在初始化新bulleBouge每两秒钟。你也在记忆中泄漏,因为在给它赋予新的价值之前,你永远不会放弃它。所以会发生的是,在你创建imageView之后,你只保留对最后一个实例的引用,因此只有最后一个实例正在改变位置。为了解决这个问题,将所有新的uiImageViews存储在一个数组中,并在两秒钟后随机移动它们。

-(void) createNewBall { 

    UIImage * image = [UIImage imageNamed:@"bulle_03.png"]; 
    UIImageView *bulleBouge = [[UIImageView alloc] initWithImage:image]; 
    [bulleBouge setCenter:[self randomPointSquare]]; 

    [bulleBougeArray addObject:bulleBouge]; 

    [[self view] addSubview:bulleBouge]; 

    [bulleBouge release]; 

} 

-(void)moveTheBall{ 

    for(int i=0; i< [bulleBougeArray count];i++){ 
    UIImageView *bulleBouge = [bulleBougeArray objectAtIndex:i]; 
    bulleBouge.center = CGPointMake(imageView.center.x + X, imageView.center.y + Y); 
    } 

} 
+0

但如果我想无限数量的uiimageViews我将无法将它们存储在一个数组中。 –

+0

检查我的代码编辑。至于无限,没有这样的东西,你不能够在任何地方存储无限的东西,但你可以通过移除已经超出视图范围的对象来处理重载。 – Cyprian

+0

所以在.h我声明“NSArray * imageViewArray;”然后用你的代码我有两个警告,第一个NSArray可能不会响应addObject,第二个“bulleBouge隐藏实例变量的本地声明”UIImageView * bulleBouge = [bulleBougeArray objectAtIndex:i];。这段代码似乎不起作用,我试了一下,它不起作用 –

0

Cyprian是正确的。用更简单的形式,您可以每两秒钟在同一个变量下创建一个新的bulleBouge。该计划已经有一个,但由于你告诉它在同一个伊瓦尔下创建一个新计划,它会忘记旧计划,因此不会移动它。您需要一个数组,以便每个球可以分别记住,并因此可以单独移动,如他发布的示例代码中所示。

+0

我使用他的代码,但它不工作,我不知道为什么?我从来没有使用过数组,但我认为他的代码中缺少某些东西? –

+0

你将无法完全复制他的代码,因为人们会在你身上皱眉,而且他没有在代码片段中分配数组。在这里看到关于添加和动画多件事的教程。 http://maniacdev.com/2010/08/beginners-iphone-action-game-tutorial/3/ –

+0

是的,但如果我想拥有100个球,我不会把它们放在一个数组中。实际上我想要的是拥有100个球,并且都是一样的 –