2010-03-01 5 views
3

J'essaye d'intensifier fondamentalement un bouton dès qu'un contact est détecté. Voici ma scène:l'action ne s'exécutera pas sur un CCSprite à partir de ccTouchBegan dans cocos2d pour l'iphone

 

@implementation HomeScene 

-(id) init 
{ 
    if((self = [super init])) { 
    ... 
    // sp_btn_story is retained... 
    sp_btn_story = [[CCSprite spriteWithFile:@"main_menu_btn.png"] retain]; 
    sp_btn_story.position = ccp(size.width - 146, 110); 
    [self addChild: sp_btn_story]; 
    ... 
    } 
    return self; 
} 

-(void) onEnter 
{ 
    [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES]; 
} 

-(void) onExit 
{ 
    [[CCTouchDispatcher sharedDispatcher] removeDelegate:self]; 
} 

- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event 
{ 
    NSLog(@"tapped!"); 
    sp_btn_story.scaleX = 2; 

    [sp_btn_story stopAllActions]; 
    [sp_btn_story runAction: [CCScaleTo actionWithDuration:0.5f scale:1.2f]]; 
    return YES; 
} 

... 

@end 
 

Il met à l'échelle le X juste comme prévu. (J'ai jeté ça pour tester.) Mais l'action ne fonctionne pas pour une raison quelconque. :(Quelqu'un a des idées

Edit:?.. Utilisant cocos2d 0,99 BTW

Répondre

1

La réponse à cette question (reposted du propre commentaire du demandeur pour le rendre plus visible):

Il est tout à fait important d'appeler

[super onEnter]; 

si vous écrasez cette méthode dans une sous-classe ou des choses étranges peuvent se produire. Cocos2D ne sera pas content.

Cela s'applique à d'autres méthodes (si ce n'est toutes), e. g. toujours appeler

[super onExit]; 

ainsi.

0

pas complète que ce qui pourrait se passer On dirait que ce que vous avez devrait fonctionner correctement, mais vous pouvez essayer d'appliquer une autre action à sp_btn_story comme fondu ou fondu pour voir si au moins une action va fonctionner.A défaut, vous pouvez également essayer d'appliquer l'action dans une partie différente de votre code.Ce ne sont pas des solutions, mais ils peuvent fournir des preuves pour indiquer ce qui se passe exactement

+0

Rob: merci beaucoup pour les suggestions. J'avais l'impression que c'était parce que j'ajoutais le sprite dans "init" et non "onEnter", mais je l'ai finalement réduit à la cause exacte. C'était parce que je n'avais pas [super onEnter]; Oops. J'ai ajouté cela et ça a très bien animé. Bon à savoir! – taber

+0

Pas de problème. J'ai fait exactement la même erreur il y a quelques semaines. Oublier d'appeler [super onEnter] nuit gravement à Cocos2D. N'oubliez pas d'appeler aussi [super onExit] !! –

+0

Bien, je suis tombé sur le même problème, merci d'avoir signalé qu'un [super onEnter] manquant était la cause du problème. J'ai ajouté ceci comme réponse, pour rendre la solution plus claire. –