Ios 在Xcode中生成无限多的对象
我现在正在做一个游戏,在这个游戏中,每秒钟,我都要创建x个新的UIImage对象,从屏幕顶部开始。在它们被实例化之后,我希望它们自动落下,直到它们到达屏幕底部,此时我不再使用它们 它几乎就像雨滴——每秒产生X个雨滴,它们以不同的速度落下 我真的很困惑我该如何设计我的程序来实现这一点Ios 在Xcode中生成无限多的对象,ios,xcode,timer,uiimage,Ios,Xcode,Timer,Uiimage,我现在正在做一个游戏,在这个游戏中,每秒钟,我都要创建x个新的UIImage对象,从屏幕顶部开始。在它们被实例化之后,我希望它们自动落下,直到它们到达屏幕底部,此时我不再使用它们 它几乎就像雨滴——每秒产生X个雨滴,它们以不同的速度落下 我真的很困惑我该如何设计我的程序来实现这一点 任何帮助都将不胜感激。谢谢。查看WWDC 2011,接近尾声时有一个关于“Replicators”的内容,听起来和您想要的完全一样。它们是同一图像的所有副本,还是在有限的一组图像中至少有一个的副本? 对于这样的游戏,
任何帮助都将不胜感激。谢谢。查看WWDC 2011,接近尾声时有一个关于“Replicators”的内容,听起来和您想要的完全一样。它们是同一图像的所有副本,还是在有限的一组图像中至少有一个的副本? 对于这样的游戏,图形密集型的应用程序,我会认真考虑使用OpenGL ES,虽然学习曲线是陡峭的人熟悉UIKIT只。幸运的是,有第三方的开源库,如Cocos2d,可以使高效的二维图形几乎像UIKit一样易于编码 特别是关于你的问题,我没有看过@ctrahey提到的视频,但我能想到这些模式:
希望它能帮助你供参考:找到了一个非常好的资源来处理这个确切的场景。它确实要求您使用cocos2d,但它以一种非常清晰易懂的方式对其进行了解释
步骤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];
}];
}
}
-(无效)发送一些雨滴
{
对于(int i=0;i<5;i++){
UIImageView*视图=[[UIImageView alloc]initWithImage:[UIImageName:@“safari.png”];
CGFloat半高=view.frame.size.height/2;
CGFloat x=arc4random()%(int)self.view.frame.size.width;
view.center=CGPointMake(x,-半高);
[self.view addSubview:view];
NSTimeInterval duration=10+arc4random()%10;
[UIView animateWithDuration:持续时间延迟:0选项:UIViewAnimationOptionCurveEaseIn动画:^{
float endY=self.view.frame.size.height+半高;
view.center=CGPointMake(x,endY);
}完成:^(布尔完成){
[视图从SuperView移除];
}];
}
}
谢谢。我现在想做的是将每个新的UIImage对象放入一个NSMutableArray,然后以某种方式删除掉屏幕上的对象。这样,也许我也可以同时更新NSMutableArray中的每个元素。你肯定希望所有的“地图对象”(也使用游戏术语)都在一个数组中,以便轻松管理它们-makeObjectsPerformSelector:
很方便。您可能需要检查每个粒子的“高度”(例如每个帧),并删除/重用到达底部的粒子。我强烈建议重用,而不是对每一帧进行大量的alloc/init
和dealloc
s。但是UIImage
在使用最近使用的图像创建新实例时会缓存纹理(图像)数据,因此不应该出现这样的问题。