在Xcode中生成无限数量的对象

时间:2012-08-31 06:13:07

标签: ios xcode timer uiimage

我正在开发一款游戏,每秒钟,我想创建从屏幕顶部开始的x个新的UIImage对象。在实例化之后,我希望它们自动降落直到它们到达屏幕的底部,此时我不再对它们有任何用处。

它几乎像雨滴 - 它们中的X数每秒都会产生,它们每个都以不同的速度下降。

我真的很困惑,我甚至只是设计我的程序来做这件事。

非常感谢任何帮助。感谢。

4 个答案:

答案 0 :(得分:2)

它们是同一图像的副本,还是至少有限图像集中的一个副本? 对于像游戏一样的图形密集型应用程序,我会认真考虑使用OpenGL ES,尽管对于熟悉UIKit的人来说学习曲线很陡峭。幸运的是,有第三方的开源库,如Cocos2d,它们使高效的2D图形与UIKit一样容易编码。

关于你的问题,我没有看过@ctrahey提到的视频,但我能想到这些模式:

  1. 拥有可重用对象的(有限)“池”,其大小等于在任何给定时间可能出现在屏幕上的最大实例数。您肯定想要来设置此限制,因为图形性能不是无限的。每当一个物体掉到屏幕外时,“重置”它的状态并重新使用它(从顶部再次)。 UITableView使用表格单元格做这样的事情。

  2. 按需创建实例,并在它们离开屏幕后销毁它们(release-> dealloc)。

  3. 您必须平衡创建/销毁实例的运行时成本与重置对象的成本/不便。

    希望有所帮助

答案 1 :(得分:2)

第1步:每秒运行一段代码

timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(dispatchSomeRaindrops) userInfo:nil repeats:YES];

步骤2:创建一些粒子,将它们发送到屏幕上,并在它们到达底部时将其清理干净。

- (void)dispatchSomeRaindrops
{
    for (int i = 0; i < 5; i++) {
        UIImageView *view = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"safari.png"]];

        CGFloat halfHeight = view.frame.size.height / 2;
        CGFloat x = arc4random() % (int)self.view.frame.size.width;
        view.center = CGPointMake(x, -halfHeight);

        [self.view addSubview:view];

        NSTimeInterval duration = 10 + arc4random() % 10;
        [UIView animateWithDuration:duration delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{
            float endY = self.view.frame.size.height + halfHeight;
            view.center = CGPointMake(x, endY);
        } completion:^(BOOL finished) {
            [view removeFromSuperview];
        }];
    }
}

答案 2 :(得分:1)

从WWDC 2011中查看the Core Animation video,接近结尾处有一些“Replicators”,听起来就像你所追求的那样。

答案 3 :(得分:0)

仅供参考:找到了处理这种情况的极好资源。它确实要求你使用cocos2d,但它以一种非常清晰易懂的方式解释它。

http://www.raywenderlich.com/352/how-to-make-a-simple-iphone-game-with-cocos2d-tutorial