2013-10-24 27 views
5

當我第一次設立了發射器,我可以做到這一點:發射後改變CAEmitterLayer的CAEmitterCell性出發

self.cell = [CAEmitterCell emitterCell]; 
self.cell.yAcceleration = 20; 
... 
self.emitter.emitterCells = [NSArray arrayWithObjects:self.cell,nil]; 

但說我創建了火災5秒後定時器,我這樣做:

- (void)timerFired 
{ 
    self.cell.yAcceleration = -10; 

} 

定時器會觸發,但CAEmitterCell的yAcceleration不會被更改。或者屏幕上的粒子發射至少沒有變化。我怎樣才能讓CAEmitterCell尊重我對其屬性所做的更改?

回答

6

這不是真正的很明顯,但這裏的解決方案:

[self.emitter setValue:[NSNumber numberWithFloat:-10.0] 
       forKeyPath:@"emitterCells.cell.yAcceleration"]; 

其中「細胞」是這裏給出的名稱:

​​
+0

我很困惑。 [self.cell setName:@「cell」]行的位置在哪裏,以及上面引用了哪個位置?你的意思是說它應該是[self.cell setName:@「NAME」];然後[self.emitter setValue:... forKeyPath:@「emitterCells.NAME.yAcceleration」];答案寫的很混亂,因爲單元格是一個通用術語,我想知道你是否在修改關鍵路徑? – Cindeselia

+0

@Cindeselia後面的部分只是爲了澄清在他們的案件的細胞名稱是細胞。如果你分配了你的名字「foo」,那麼keyPath就是「emitterCells.foo.yAcceleration」。 – Warpling

0

當你用新電池初始化的​​中,對象將被保留,所以..當您用計時器更改cell.yAcceleration時,​​的單元格不能更改,self.cell.yAcceleration已被更改。因此,您應該使用​​的關鍵路徑。