2014-02-14 3 views
1

Я использую SpriteBuilder (который интегрируется с Cocos2d v3.0). Я создал приложение, и теперь я хочу добавить iAd на самый верх, который появляется, когда я его называю, и скрывается, когда я говорю об этом. Каков самый простой способ сделать это?Как добавить iAd в Cocos-SpriteBuilder

Имейте в виду, что я использую SpriteBuilder с Cocos2d. И только потому, что я использую SpriteBuilder, это не значит, что я не использую Xcode 5. Я полностью вовлечен в Xcode. SpriteBuilder не пишет код для меня, я делаю это.

ответ

8

Добавить инфраструктуру iAd для своих зависимостей.

В файле заголовка для вашей сцены игры, добавьте ADBannerViewDelegate, например:

@interface MainScene : CCNode <CCPhysicsCollisionDelegate, ADBannerViewDelegate> 

В файле реализации, добавьте переменную экземпляра _bannerView:

@implementation MainScene { 
    ADBannerView *_bannerView; 
}  

И, наконец, вставьте код iAD (с некоторыми улучшениями cocos2d). Вот моя реализация для игры в портретном режиме с верхним баннером. Нет никакого метода скрыть, но его довольно легко реализовать.

# pragma mark - iAd code 

-(id)init 
{ 
    if((self= [super init])) 
    { 
     // On iOS 6 ADBannerView introduces a new initializer, use it when available. 
     if ([ADBannerView instancesRespondToSelector:@selector(initWithAdType:)]) { 
      _adView = [[ADBannerView alloc] initWithAdType:ADAdTypeBanner]; 

     } else { 
      _adView = [[ADBannerView alloc] init]; 
     } 
     _adView.requiredContentSizeIdentifiers = [NSSet setWithObject:ADBannerContentSizeIdentifierPortrait]; 
     _adView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait; 
     [[[CCDirector sharedDirector]view]addSubview:_adView]; 
     [_adView setBackgroundColor:[UIColor clearColor]]; 
     [[[CCDirector sharedDirector]view]addSubview:_adView]; 
     _adView.delegate = self; 
    } 
    [self layoutAnimated:YES]; 
    return self; 
} 


- (void)layoutAnimated:(BOOL)animated 
{ 
    // As of iOS 6.0, the banner will automatically resize itself based on its width. 
    // To support iOS 5.0 however, we continue to set the currentContentSizeIdentifier appropriately. 
    CGRect contentFrame = [CCDirector sharedDirector].view.bounds; 
    if (contentFrame.size.width < contentFrame.size.height) { 
     _bannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait; 
    } else { 
     _bannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierLandscape; 
    } 

    CGRect bannerFrame = _bannerView.frame; 
    if (_bannerView.bannerLoaded) { 
     contentFrame.size.height -= _bannerView.frame.size.height; 
     bannerFrame.origin.y = contentFrame.size.height; 
    } else { 
     bannerFrame.origin.y = contentFrame.size.height; 
    } 

    [UIView animateWithDuration:animated ? 0.25 : 0.0 animations:^{ 
     _bannerView.frame = bannerFrame; 
    }]; 
} 

- (void)bannerViewDidLoadAd:(ADBannerView *)banner { 
    [self layoutAnimated:YES]; 
} 

- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error { 
    [self layoutAnimated:YES]; 
} 
+0

Я благодарю Бога за таких людей, как вы, в этом мире. Я весь день искал, как это сделать, и все, что я нашел, было сложным кодом. Но когда я увидел это, я был похож на нахх слишком легко. Большое спасибо. – Crazycriss

+1

Спасибо :) Я сделал это в вспомогательную реализацию, чтобы сделать реализацию очень простой в использовании: https://github.com/svenanders/iAdHelper – Sven

Смежные вопросы