Я создал простую игру cocos2d для iPhone, в которой есть излучатель CCParticleSystemQuad, который испускает частицы по всей сцене в форме листьев, создавая иллюзию ветра.
Прямо сейчас, ветер (сила тяжести) дует через сцену справа налево. В настоящее время я застрял, пытаясь выяснить, как обновить emitter.gravity для переключения с (-500, 80) на (500, 80), надеюсь, без удаления уже нарисованных частиц.
В этом примере я хотел бы, чтобы переключение происходило при сенсорном событии, происходящем в любом месте экрана.
Как должно выглядеть мое сенсорное событие?
Как обнаружить касание, которое происходит в любом месте на экране?
Я также никогда не реализовывал цикл обновления по расписанию. Это то направление, о котором я должен думать? И я полагаю, что более простой вопрос заключается в том, правильно ли я поступаю?
Вот код, который я получил до сих пор:
Мой инициал:
-(id) init
{
if( (self=[super init])) {
CCSprite * sky = [CCSprite spriteWithFile:@"sky.png"];
[self addChild:sky z:0 tag:1];
windDirection = -200;
[self leaveEmitters];
}
return self;
}
Функция My LeaveEmiiters
-(void) leaveEmitters{
NSLog(@"The wind is :%i", windDirection);
CCParticleSystemQuad * emitter;
emitter = [[CCParticleSystemQuad alloc] initWithTotalParticles:100];
emitter.texture = [[CCTextureCache sharedTextureCache] addImage: @"particlesLeaves.png"];
emitter.emitterMode = kCCParticleModeGravity;
emitter.duration = -1;
emitter.gravity = ccp(windDirection, -80);
emitter.angle = 0;
emitter.angleVar = 360;
emitter.speed = 10;
emitter.speedVar = 100;
emitter.radialAccelVar = 0;
emitter.tangentialAccel = 0;
emitter.tangentialAccelVar = 0;
emitter.life = 10;
emitter.lifeVar = 0;
emitter.startSpin = 0;
emitter.startSpinVar = 360;
emitter.endSpin = 0;
emitter.endSpinVar = 720;
ccColor4F startColorVar = {255, 100, 0, 0};
ccColor4F startColor = {0, 240,0, 255};
emitter.startColor = startColor;
emitter.startColorVar = startColorVar;
emitter.endSize = emitter.startSize;
emitter.startSize = 60.0f;
emitter.emissionRate = 3;
emitter.blendAdditive = NO;
emitter.position = ccp(500,250);
[self addChild: emitter z:10];
emitter.autoRemoveOnFinish = YES;
CCParticleSystemQuad * emitter2;
emitter2 = [[CCParticleSystemQuad alloc] initWithTotalParticles:100];
emitter2.texture = [[CCTextureCache sharedTextureCache] addImage: @"particlesLeaves.png"];
emitter2.emitterMode = kCCParticleModeGravity;
emitter2.duration = -1;
emitter2.gravity = ccp(windDirection, 0);
emitter2.angle = 0;
emitter2.angleVar = 360;
emitter2.speed = 10;
emitter2.speedVar = 100;
emitter2.radialAccelVar = 0;
emitter2.tangentialAccel = 0;
emitter2.tangentialAccelVar = 0;
emitter2.life = 10;
emitter2.lifeVar = 0;
emitter2.startSpin = 0;
emitter2.startSpinVar = 360;
emitter2.endSpin = 0;
emitter2.endSpinVar = 720;
emitter2.startColor = startColor;
emitter2.endSize = emitter.startSize;
emitter2.startSize = 60.0f;
emitter2.emissionRate = 3;
emitter2.blendAdditive = NO;
emitter2.position = ccp(-500,250);
[self addChild: emitter2 z:10];
emitter2.autoRemoveOnFinish = YES;
}
И, наконец, моя функция ccTouchesBegan, которая вообще не работает. Почему?
-(void) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInView:[touch view]];
location = [[CCDirector sharedDirector] convertToGL:location];
int x = location.x;
int y= location.y;
CCSprite * sky = (CCSprite *) [self getChildByTag:1];
sky.anchorPoint = ccp(0, 0);
CGRect skyHitBox = CGRectMake(sky.position.x, sky.position.y, 500, 500);
if (CGRectContainsPoint(skyHitBox, location)) {
NSLog(@"touch accepted: x: %i y:%i", x, y);
}
}
Буду признателен за любую помощь, обратную связь или предлагаемое направление обучения. Большое спасибо!
РЕДАКТИРОВАТЬ: я ответил на мои собственные вопросы примерно через 20 секунд после того, как я опубликовал это ...
Если кто-то захочет опубликовать свои ответы, я оставлю это еще на 7 часов.