Tôi đang chơi xung quanh với CAEmitterLayer và tôi phải đối mặt với một số vấn đề hiện nay :(CAEmitterLayer làm thế nào để phát ra trong một thời gian ngắn liên tục
Tôi cần một hiệu ứng hạt ngắn - như một hit hoặc nổ - tại một nơi ví dụ (vì vậy tôi có UIView nhỏ ở nơi này) Làm thế nào tôi nên làm điều đó?
1, tôi đã có một ý tưởng - tạo emitterLayer với các hạt của nó và thiết lập lifeTime thành 0. Và khi tôi cần nó tôi đặt lifeTime thành 1 ví dụ và sau một thời gian tôi có thể thiết lập nó trở lại 0. - NHƯNG nó không làm bất cứ điều gì: (
2, ý tưởng thứ hai là tạo [lớp CAEmitterLayer] mỗi lần tôi cần và thêm lớp đó làm lớp con. Nhưng tôi đang nghĩ điều gì xảy ra khi tôi lặp lại nó ví dụ mười lần ... Tôi có 10 lớp con với một acive và 9 "chết"? Làm thế nào để dừng phát ra nói chung? Tôi có performSelector sau một thời gian để thiết lập tuổi thọ là 0 và các bộ chọn khác với khoảng thời gian dài hơn để removeFromSuperlayer… Nhưng nó không đẹp như tôi muốn có nó: (có cách nào khác "thích hợp" không?
Tôi nghĩ rằng quá nhiều lớp con có liên quan đến vấn đề khác của tôi… Tôi chỉ muốn phát ra một hạt, và khi tôi làm nó hoạt động.Nhưng SOMETIMES nó phát ra ba hạt, đôi khi hai… Và nó làm tôi phát điên vì điều đó. nó đem lại cho mỗi lần con số chính xác của các hạt ...
vì vậy, các câu hỏi ...
làm thế nào để phát ra các hạt trong một thời gian ngắn làm thế nào để làm việc với họ -. như st op, loại bỏ từ lớp cha mẹ, ... làm thế nào để phát ra số chỉ chính xác của các hạt
EDIT:
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];
Sau đó, trong phương pháp liên kết với nút Tôi làm điều này:
emitter.lifetime = 1.0;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.9 * NSEC_PER_SEC), dispatch_get_current_queue(), ^{
emitter.lifetime = 0;
});
biên tập và CẬP NHẬT sau khi chuyển sang thái độ @David Rönnqvist
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"];
});
Bạn đã nhìn Táo mẫu mã ([Fireworks ] (http://developer.apple.com/library/mac/#samplecode/Fireworks/Listings/ReadMe_txt.html)) cho điều này? Về cơ bản họ làm những gì bạn đang cố gắng làm (một vụ nổ hạt ngắn) –
Vâng, tôi có. Nhưng nó trông giống như nó phát thải ngắn. Nói chung có một lớp (với emitter) được thêm vào khung nhìn bên trong awakeFromNib và sau đó nó phát ra "pháo hoa" tròn và tròn. Nhưng hãy tưởng tượng tình hình khi tôi muốn bắt đầu chỉ một pháo hoa khi bạn chạm vào nút. Bạn làm điều đó như thế nào? Đó chính là điều tôi đang chỉ ra. – D33