シンプルなcocos2d iPhoneゲームを作成しました。CCParticleSystemQuadエミッターは、風の錯覚を与えるために、葉のような形をしたシーン全体に粒子を放出します。CCParticleSystemQuad on touchイベントでemitter.gravityを更新する
今のところ、風(重力)が右から左に向かって吹いています。私は現在、既に描画されているパーティクルを削除せずに、(-500、80)から(500,80)に切り替えるためにemitter.gravityを更新する方法を理解しようとしています。
この例では、スイッチが画面上の任意の場所で発生するタッチイベントで発生するようにしたいと考えています。
私のタッチイベントはどのように見えますか?
どのように画面上のどこで発生する接触を検出するにはどうすればよいですか?
スケジュールされた更新ループを実装したこともありません。これは私が考えなければならない方向ですか?もっと基本的な質問があると思いますが、私はこれについて正しい方向に進んでいますか?
ここで私はこれまで持っているコードです:
私のinit:
-(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;
}
マイ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時間以上のためにこれを任せる
。
ニース!これは素晴らしい投稿です。それは私が最初に尋ねたことをもう少し深め、制御します。素晴らしいヒントをありがとう!トピックから少し外れて、タイムイベントを作成するためのヒントはありますか?私はどのようにスプライトを作成するのか把握しようとしていて、プレイヤーにそれが作成されてから1秒近くに触れるようにしています。私は、プレイヤーのスコアが、アイテムにヒットした1秒のマークにどれくらい近づいているか、あまりにも早すぎる、または遅すぎるとスコアが低くなることによって決定されることを望みます。何かご意見は? – GreenWire