2012-09-07 41 views
0

我想在矩形内制作粒子。CAEmitterLayer - kCAEmitterLayerRectangle渲染模式?

这段代码有什么问题?它仅从发射器位置发射,而不是在矩形中的随机位置。

fireEmitter = [CAEmitterLayer layer]; 
[self.view.layer fireEmitter]; 
fireEmitter.emitterPosition = self.view.center; 
fireEmitter.emitterSize =CGSizeMake(100, 100); 
fireEmitter.renderMode = kCAEmitterLayerRectangle; 
fireEmitter.emitterCells = [NSArray arrayWithObjects:fire, nil]; 

回答

2

kCAEmitterLayerRectangle对于renderMode不是有效值。相反,你应该使用这些值

kCAEmitterLayerUnordered 
kCAEmitterLayerOldestFirst 
kCAEmitterLayerOldestLast 
kCAEmitterLayerBackToFront 
kCAEmitterLayerAdditive 

kCAEmitterLayerRectangle值应设置为缺省的emitterShapekCAEmitterLayerPoint之一。这就是为什么你只从一个点发射。有效emitterShapes为:

kCAEmitterLayerPoint 
kCAEmitterLayerLine 
kCAEmitterLayerRectangle 
kCAEmitterLayerCuboid 
kCAEmitterLayerCircle 
kCAEmitterLayerSphere 

请参阅the documentation的含义。

0

正如David已经指出,您使用的值不适用于renderMode。它用于emitterShape。 这可能是一个非常令人沮丧的错误,因为Xcode不会给你一个警告,因为它们是相同类型的(NSString)。即使阅读了documentation,也很容易忽略这样的错误。

使用类似Particle Playground(对于UIKit发射器)或Particle Designer(对于cocos2d发射器)的工具可以提供很多帮助,因为它们只允许文档中指定的值。

它们都允许您在Mac上配置发射器层/单元。粒子游乐场将发射器导出为目标c类,以便在项目中轻松导入。粒子设计器以交换格式导出,可以轻松导入到正确的cocos2d发射器类中。我写了Particle Playground,并且我没有与Particle Designer的任何关系(即使我真的很喜欢,使用并推荐它用于cocos2d项目)。