मैं चारों ओर CAEmitterLayer साथ खेल रहा हूँ के लिए फेंकना और मैं कुछ समस्याओं का सामना करना पड़ता है अब :(CAEmitterLayer कैसे थोड़े समय के बार-बार
मैं एक छोटी कण प्रभाव की जरूरत है - एक हिट या विस्फोट की तरह - उदाहरण के लिए एक स्थान पर (तो मेरे पास इस जगह पर छोटा UIView है)। मुझे यह कैसे करना चाहिए?
1, मुझे एक विचार था - emitterLayer को इसके कणों के साथ बनाएं और जीवन को 0 पर सेट करें। और जब मुझे इसकी आवश्यकता हो तो मैंने जीवन समय निर्धारित किया उदाहरण के लिए 1 और थोड़ी देर बाद मैं इसे 0 पर सेट कर सकता हूं - लेकिन यह कुछ भी नहीं कर रहा है :(
2, दूसरा विचार हर बार जब मुझे इसकी आवश्यकता होती है और इसे परतों के उपन्यास के रूप में जोड़ना होता है तो [CAEmitterLayer परत] बनाना था। लेकिन मैं सोच रहा हूं कि जब मैं इसे दो बार उदाहरण के लिए दोहराता हूं तो क्या होता है ... मेरे पास एक जीवित और 9 "मृत" के साथ 10 sublayers है? सामान्य रूप से उत्सर्जित करना बंद कैसे करें? मैंने कुछ समय बाद जीवनकाल को 0 और अन्य चयनकर्ता को लंबे समय तक अंतराल के साथ सेट करने के लिए चयन किया है ... लेकिन यह इतना सुंदर नहीं है क्योंकि मैं इसे प्राप्त करना चाहता हूं :(क्या कोई और "उचित" तरीका है?
मुझे लगता है बहुत से sublayers मेरी दूसरी समस्या से संबंधित है ... मैं सिर्फ एक कण उत्सर्जित करना चाहता हूं। और जब मैं ऐसा करता हूं यह काम करता है। लेकिन कुछ बार यह तीन कणों को छोड़ देता है, कभी-कभी दो ... और यह मुझे इसके बारे में पागल बनाता है। जब मैं emitter को नहीं रोकता यह हर बार कणों की सही संख्या ...
तो सवाल दे रही है ...
कैसे थोड़े समय के लिए कणों फेंकना कैसे उन लोगों के साथ काम करने के लिए -। सेंट की तरह सेशन, माता पिता परत से निकालने के लिए, ... कैसे कणों
का सिर्फ सही संख्या फेंकनासंपादित करें:
emitter = [CAEmitterLayer layer];
emitter.emitterPosition = CGPointMake(self.view.bounds.size.width/2, self.view.bounds.size.height/2);
emitter.emitterMode = kCAEmitterLayerPoints;
emitter.emitterShape = kCAEmitterLayerPoint;
emitter.renderMode = kCAEmitterLayerOldestFirst;
emitter.lifetime = 0;
particle = [CAEmitterCell emitterCell];
[particle setName:@"hit"];
particle.birthRate = 1;
particle.emissionLongitude = 3*M_PI_2;//270deg
particle.lifetime = 0.75;
particle.lifetimeRange = 0;
particle.velocity = 110;
particle.velocityRange = 20;
particle.emissionRange = M_PI_2;//PI/2 = 90degrees
particle.yAcceleration = 200;
particle.contents = (id) [[UIImage imageNamed:@"50"] CGImage];
particle.scale = 1.0;
particle.scaleSpeed = -0.5;
particle.alphaSpeed = -1.0;
emitter.emitterCells = [NSArray arrayWithObject:particle];
[(CAEmitterLayer *)self.view.layer addSublayer: emitter];
इस मुझे क्या करना तो विधि में बटन के साथ जुड़ा हुआ:
emitter.lifetime = 1.0;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.9 * NSEC_PER_SEC), dispatch_get_current_queue(), ^{
emitter.lifetime = 0;
});
संपादित और अपडेट @ डेविड रोन्न्क्विस्ट रवैये में बदलने के बाद
CAEmitterCell *dustCell = [CAEmitterCell emitterCell];
[dustCell setBirthRate:1];
[dustCell setLifetime:1.5];
[dustCell setName:@"dust"];
[dustCell setContents:(id) [[UIImage imageNamed:@"smoke"] CGImage]];
[dustCell setVelocity:50];
[dustCell setEmissionRange:M_PI];
// Various configurations for the appearance...
// This is the only cell with configured scale,
// color, content, emissionLongitude, etc...
[emitter setEmitterCells:[NSArray arrayWithObject:dustCell]];
[(CAEmitterLayer *)self.view.layer addSublayer:emitter];
// After one burst, change the birth rate of the cloud to 0
// so that there is only one burst per side.
double delayInSeconds = 0.5; // One cloud will have been created by now, but not two
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void) {
[emitter setLifetime:0.0];
[emitter setValue:[NSNumber numberWithFloat:0.0]
forKeyPath:@"emitterCells.dust.birthRate"];
});
आप सेब नमूना कोड को देखा है ([पटाखे ] (http://developer.apple.com/library/mac/#samplecode/Fireworks/Listings/ReadMe_txt.html)) इसके लिए? वे मूल रूप से करते हैं जो आप करने की कोशिश कर रहे हैं (कणों का एक छोटा विस्फोट) –
हाँ, मेरे पास है। लेकिन ऐसा लगता है कि यह छोटा उत्सर्जन करता है। आम तौर पर जागने के बाद एक परत (एमिटर के साथ) दृश्य में जोड़ा जाता है और फिर यह "आतिशबाज़ी" को गोल और गोल करता है। लेकिन स्थिति की कल्पना करें जब आप बटन को टैप करते समय केवल एक आतिशबाजी शुरू करना चाहते हैं। आप वह कैसे करेंगें? यही वही है जो मैं इंगित कर रहा हूं। – D33