я хочу, чтобы мои падающие спрайты исчезали на полпути вниз по экрану - PullRequest
0 голосов
/ 09 февраля 2012

Я новичок в программировании, я экспериментировал с cocos2d, вот в чем проблема, я сделал простую игру, устройство в портрете, у него падающие спрайты, и я хочу, чтобы спрайт исчез, когда позиция верхней части sprite

Вот код, который может вас заинтересовать:

это падающий спрайт, он падает сверху вниз на экран

-(void)addRock {

CCSprite *rock = [CCSprite spriteWithFile:@"rock.png" 
                                     rect:CGRectMake(0, 0, 27, 40)]; 

// Determine where to spawn the target along the X axis
CGSize winSize = [[CCDirector sharedDirector] winSize];
int minX = rock.contentSize.width/2;
int maxX = winSize.width - rock.contentSize.width/2;
int rangeX = maxX - minX;
int actualX = (arc4random() % rangeX) + minX;

// Create the target slightly off-screen along the right edge,
// and along a random position along the X axis as calculated above
rock.position = ccp(actualX, 500);
[self addChild:rock];

// Determine speed of the target
int actualDuration = spriteDuration;//speed of sprite

// Create the actions
id actionMove = [CCMoveTo actionWithDuration:actualDuration position:ccp(actualX,-winSize.height+ rock.contentSize.height)];
id actionMoveDone = [CCCallFuncN actionWithTarget:self selector:@selector(spriteMoveFinished:)];
[rock runAction:[CCSequence actions:actionMove, nil]];

}

когда движение спрайта закончено

-(void)spriteMoveFinished:(id)sender {
CCSprite *sprite = (CCSprite *)sender;
[self removeChild:sprite cleanup:YES];

}

Ответы [ 2 ]

0 голосов
/ 09 февраля 2012

Чтобы затемнить свой спрайт на полпути анимации, вы можете использовать CCSpawn, чтобы объединить анимацию fall с fadeOut . Но так как вы хотите, чтобы он исчезал через определенное время, вам нужно создать последовательность из CCDelayTime и CCFadeOut.

double fadeStart = 0.5;
id wait    = [CCDelayTime actionWithDuration: actualDuration * fadeStart];
id fadeOut = [CCFadeOut actionWithDuration: actualDuration * (1.0 - fadeStart)];
id waitThenFade = [CCSequence actions: wait, fadeOut, nil];

id actionMove = ...;
id fullAnimation = [CCSpawn actions:actionMove, waitThenFade, nil];

[rock runAction:[CCSequence actions:fullAnimation, actionMoveDone, nil]];

Если вы хотите, чтобы затухание началось раньше или позже, вам просто нужно переместить значение fadeStart. 0 начнется сразу, 1 фактически не исчезнет, ​​поэтому лучше выбрать значение между ними.

0 голосов
/ 09 февраля 2012

Может как то так?

CGSize size = [[CCDirector sharedDirector] winSize];

CCSprite* img = [[CCSprite alloc] initWithFile:@"yourSprite.png"];
img.position = ccp(size.width/2,size.height + img.boundingBox.size.height/2);
[img runAction:[CCSequence actions:
                    [CCMoveTo actionWithDuration:3 position:ccp(img.position.x,size.height/2 - img.boundingBox.size.height/2)],
                    [CCFadeOut actionWithDuration:1],
                    [CCCallFuncN actionWithTarget:nil selector:@selector(spriteMoveFinished:)],
                    nil]];
...