Ну, похоже, вы не можете использовать предопределенный файл sks
для SKEmitterNode
... Я смог понять это, программно создав файл SKEmitterNode
. Причина в том, что это не похоже на то, когда вы инициируете SKEmitterNode
с sks
, он не отвечает на setParticleColor:
, но программно инициирует.
Сегодня, за прошедший час, я впервые возился со SKEmitterNode, так что вам придется терпеть меня, потому что я не мог понять, как добиться идеального эффекта снега, но я уверен, что вы можете просто беспорядок со значениями, которые SKEmitterNode
позволяет вам изменить.
В любом случае, я предполагаю, что SKEmitterNode
представлен в SKScene (это единственный известный мне способ добиться желаемого эффекта).
Сначала вам нужно сделать вас SKEmitterNode
глобальным/свойством/и т. д., потому что вам понадобится доступ к нему позже.
В MyScene.m
:
@implementation MyScene {
SKEmitterNode* leafEmitter;
}
-(id)initWithSize:(CGSize)size {
leafEmitter = [[SKEmitterNode alloc] init];
[leafEmitter setParticleTexture:[SKTexture textureWithImageNamed:@"saFMB.png"]];
[leafEmitter setParticleBirthRate:10];
[leafEmitter setScale:0.5];
[leafEmitter setYAcceleration:-10.0];
[leafEmitter setParticleSpeedRange:100];
[leafEmitter setParticleLifetimeRange:100.0];
[leafEmitter setParticlePositionRange:CGVectorMake(self.size.width, self.size.height)];
[leafEmitter setPosition:CGPointMake(100, 400)];
[leafEmitter setParticleBlendMode:SKBlendModeAlpha];
[self addChild:leafEmitter];
}
Итак, что я сделал здесь, это программно создал эффект частиц, именно здесь вы измените переменные анимации/скорости/и т. д., чтобы получить наилучший эффект частиц, который вы ищете. Я бы посоветовал читать это для более подробной информации.
Теперь помните, как я сказал, что это нужно представить на SKScene? Это потому, что мы воспользуемся преимуществами функции update:(CFTimeInterval)currentTime
, которая идет вместе с SKScene
.
Внутри update:(CFTimeInterval)currentTime
находится место, где мы будем менять цвет SKEmitterNode
. Поскольку эта функция обновления вызывается для каждого кадра, это упрощает изменение цвета без каких-либо причудливых таймеров или чего-то подобного. Не уверен, что это хорошая идея, но это идея, которая имеет значение.
-(void)update:(CFTimeInterval)currentTime {
[leafEmitter setParticleColor:[UIColor colorWithHue:drand48() saturation:1.0 brightness:1.0 alpha:1.0]];
[leafEmitter setParticleColorBlendFactor:1.0];
/* Called before each frame is rendered */
}
В этом случае мы меняем цвет на случайное значение RGB, но я позволю вам выбрать цвета самостоятельно.
Взамен это то, что мой код произвел:
Все это говорит о том, что, к сожалению, вы не можете получить желаемый эффект, используя только интерфейс частиц.
person
John Riselvato
schedule
06.11.2013