2010-05-07 9 views
0

Je travaille sur un jeu cocos2d sur iPhone. Le jeu fonctionne parfaitement.
Maintenant, je veux ajouter une annonce admob dans le menu de mon jeu. Je peux voir l'annonce, mais après quelques secondes (ou minutes) de jeu, le crash du jeu (sans message d'erreur ...)
Pouvez-vous voir où le problème est?L'ajout d'admob à une application iPhone avec cocos2d fait planter le jeu ...?

Menu.h

@interface Menu : CCColorLayer <AdMobDelegate> { 
    AdMobView *adMobAd; 
    NSTimer *refreshTimer; 
} 

Menu.m

+(id) scene {...} 
-(id) init {...} 
-(void) dealloc {...} 

- (void)didReceiveAd:(AdMobView *)adView { 
    adMobAd.frame = CGRectMake(-260, 432, 320, 48); 
    CGAffineTransform makeLandscape = CGAffineTransformMakeRotation(M_PI * 0.5f); 
    makeLandscape = CGAffineTransformTranslate(makeLandscape, -216, -134); 
    adMobAd.transform = makeLandscape; 
    [[[CCDirector sharedDirector] openGLView] addSubview:adMobAd]; 
    [refreshTimer invalidate]; 
    refreshTimer = [NSTimer scheduledTimerWithTimeInterval:AD_REFRESH_PERIOD target:self selector:@selector(refreshAd:) userInfo:nil repeats:YES]; 
} 

- (UIViewController *)currentViewController { 
    return nil; 
} 

- (void)onEnter { 
    adMobAd = [AdMobView requestAdWithDelegate:self]; 
    [adMobAd retain]; 
    [super onEnter]; 
} 

- (void)onExit { 
    [adMobAd removeFromSuperview]; 
    [adMobAd release]; 
    [super onExit]; 
} 

- (void)refreshAd:(NSTimer *)timer { 
    [adMobAd requestFreshAd]; 
} 

- (NSString *)publisherId { 
    return @"zzzzzzzzzzzzzz"; 
} 

- (UIColor *)adBackgroundColor { 
    return [UIColor colorWithRed:0.2 green:0.6 blue:1 alpha:1]; 
} 

- (UIColor *)primaryTextColor { 
    return [UIColor colorWithRed:1 green:1 blue:1 alpha:1]; 
} 

- (UIColor *)secondaryTextColor { 
    return [UIColor colorWithRed:1 green:1 blue:1 alpha:1]; 
} 

- (BOOL)mayAskForLocation { 
    return NO; 
} 

Merci! :-)

Répondre

1

Je vous suggère de vous débarrasser de la NSTimer et d'utiliser un CCTimer à la place (et le programmer en utilisant CCScheduler).

Vous pouvez le faire avec ce code:

refreshTimer = [CCTimer timerWithTarget:self 
            selector:@selector(refreshAd:) 
            interval:AD_REFRESH_PERIOD]; 
    [[CCScheduler sharedScheduler] scheduleTimer:refreshTimer]; 
+0

Merci beaucoup, maintenant il n'y a pas de crash! – pimpampoum

+0

Bon d'entendre ça a fonctionné! – pgb