我正在开发一款游戏,每秒钟,我想创建从屏幕顶部开始的x个新的UIImage对象。在实例化之后,我希望它们自动降落直到它们到达屏幕的底部,此时我不再对它们有任何用处。
它几乎像雨滴 - 它们中的X数每秒都会产生,它们每个都以不同的速度下降。
我真的很困惑,我甚至只是设计我的程序来做这件事。
非常感谢任何帮助。感谢。
答案 0 :(得分:2)
它们是同一图像的副本,还是至少有限图像集中的一个副本? 对于像游戏一样的图形密集型应用程序,我会认真考虑使用OpenGL ES,尽管对于熟悉UIKit的人来说学习曲线很陡峭。幸运的是,有第三方的开源库,如Cocos2d,它们使高效的2D图形与UIKit一样容易编码。
关于你的问题,我没有看过@ctrahey提到的视频,但我能想到这些模式:
拥有可重用对象的(有限)“池”,其大小等于在任何给定时间可能出现在屏幕上的最大实例数。您肯定想要来设置此限制,因为图形性能不是无限的。每当一个物体掉到屏幕外时,“重置”它的状态并重新使用它(从顶部再次)。 UITableView使用表格单元格做这样的事情。
按需创建实例,并在它们离开屏幕后销毁它们(release-> dealloc)。
您必须平衡创建/销毁实例的运行时成本与重置对象的成本/不便。
希望有所帮助
答案 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