2011-11-29 21 views
1

好,我想没有OpenGL或cocs2D创建像(雪)的粒子,我发现此示例代码中调用snowfall并在此代码中有这样的:创建没有opengl和cocos2D的粒子。降雪应用

flakeImage = [UIImage imageNamed:@"flake.png"]; 

// start a timet that will fire 20 times per second 
[NSTimer scheduledTimerWithTimeInterval:(0.5) target:self selector:@selector(onTimer) userInfo:nil repeats:YES]; 
} 



// Timer event is called whenever the timer fires 

- (void)onTimer 
{ 


// build a view from our flake image 
UIImageView* flakeView = [[UIImageView alloc] initWithImage:flakeImage]; 

// use the random() function to randomize up our flake attributes 
int startX = round(random() % 320); 
int endX = round(random() % 320); 
double scale = 1/round(random() % 100) + 1.0; 
double speed = 1/round(random() % 100) + 1.0; 

// set the flake start position 
flakeView.frame = CGRectMake(startX, -100.0, 5.0 * scale, 5.0 * scale); 
flakeView.alpha = 0.25; 

// put the flake in our main view 
[self.view addSubview:flakeView]; 

[UIView beginAnimations:nil context:flakeView]; 
// set up how fast the flake will fall 
[UIView setAnimationDuration:5 * speed]; 

// set the postion where flake will move to 
flakeView.frame = CGRectMake(endX, 500.0, 5.0 * scale, 5.0 * scale); 

// set a stop callback so we can cleanup the flake when it reaches the 
// end of its animation 
[UIView setAnimationDidStopSelector:@selector(onAnimationComplete:finished:context:)]; 
[UIView setAnimationDelegate:self]; 
[UIView commitAnimations]; } 
- (void)onAnimationComplete:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context { 

UIImageView *flakeView = context; 
[flakeView removeFromSuperview]; 
// open the debug log and you will see that all flakes have a retain count 
// of 1 at this point so we know the release below will keep our memory 
// usage in check 
NSLog([NSString stringWithFormat:@"[flakeView retainCount] = %d", [flakeView retainCount]]); 
[flakeView release]; 


} 

我想知道如果这个代码可以(可能是因为它使用计时器)?如果我不知道CAReplicator可以用于iPhone,但CAReplicatorDemo仅适用于苹果文档中的mac:/对不起,米法语:/

+0

对NSLog()的调用是错误的(消除了-stringWithFormat:调用)并且使用'retainCount'没有意义。 – bbum

回答

1

当然,这会影响性能。尽管你不会在模拟器中看到它。 UIImageView太重,无法每秒创建20次。您可以尝试使用CALayer -s池(和CAAnimation)。

+0

你能解释更多的CALayer和CAAnimation的使用是否有可能取代我的代码与CALayers和CAAnimation? –

+0

它看起来像你想创造一些视觉的东西(雪?)。你用这个'UI'类。即“用户界面”。你的雪不是用户界面,它不需要处理用户事件(触摸等)。是的,可以通过'CA'完成。这更合乎逻辑。 – debleek63

+0

但是如何有任何代码? –

1

你可以使用CAEmitterLayer在iOS 5上做粒子效果。我以前用它来做火焰和烟雾,但它应该适用于雪。