1

私は cocos2d フレームワークを使用して 1 つの 2D ゲームを開発しています。このゲームでは広告に admob を使用しています。一部のクラスではすべてのクラスではありませんが、すべてのクラスで admob バナーが表示され、しばらくするとゲームもクラッシュします。

私は Rootviewcontroller クラスで宣言していないので、すべてのクラスで admob バナーがどのように表示されるかわかりません。Admob を cocos2d ゲームに統合する方法を教えてください。すべてのクラスではなく、特定のクラスに Admob バナーが必要です。最新の Google admob SDK を使用しています。私のコードは以下のとおりです。

前もって感謝します

`

-(void)AdMob{
NSLog(@"ADMOB");


CGSize winSize = [[CCDirector sharedDirector]winSize];
// Create a view of the standard size at the bottom of the screen.


if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad){

    bannerView_ = [[GADBannerView alloc]
                  initWithFrame:CGRectMake(size.width/2-364,
                                           size.height -
                                           GAD_SIZE_728x90.height,
                                           GAD_SIZE_728x90.width,
                                           GAD_SIZE_728x90.height)];

}
else { // It's an iPhone

    bannerView_ = [[GADBannerView alloc]
                  initWithFrame:CGRectMake(size.width/2-160,
                                           size.height -
                                           GAD_SIZE_320x50.height,
                                           GAD_SIZE_320x50.width,
                                           GAD_SIZE_320x50.height)];
}




if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
    bannerView_.adUnitID =@"a15062384653c9e";
}
else {
    bannerView_.adUnitID =@"a15062392a0aa0a";
}

bannerView_.rootViewController = self;
[[[CCDirector sharedDirector]openGLView]addSubview:bannerView_];
[bannerView_ loadRequest:[GADRequest request]];


GADRequest *request = [[GADRequest alloc] init];
request.testing =  [NSArray arrayWithObjects:
                  GAD_SIMULATOR_ID, nil];                              // Simulator

[bannerView_ loadRequest:request];
 }



   //best practice for removing the barnnerView_

-(void)removeSubviews{
 NSArray* subviews = [[CCDirector sharedDirector]openGLView].subviews;
 for (id SUB in subviews){
    [(UIView*)SUB removeFromSuperview];
    [SUB release];
 }
 NSLog(@"remove from view");
  }

    //this makes the refreshTimer count
-(void)targetMethod:(NSTimer *)theTimer{

//INCREASE OF THE TIMER AND SECONDS
elapsedTime++; 
seconds++;

//INCREASE OF THE MINUTOS EACH 60 SECONDS
if (seconds>=60) {
    seconds=0; minutes++;
    [self removeSubviews];
    [self AdMob];
  }
NSLog(@"TIME: %02d:%02d", minutes, seconds);
 }

`

4

3 に答える 3

3

更新: ここで一般化された回答を参照してください: Admob-banner-integration-in-cocos2d

すでに解決策が得られていることを願っています。そうでない場合は、cocos2D ゲームで Admob を統合するためのすべてのコードを次に示します。

 #define ENABLE_ADMOB 1
 //#define COCOS2D_2_0 1

@interface MyMainMenu : CCLayer
{
    #ifdef ENABLE_ADMOB
    GADBannerView *mBannerView;
    #endif
}

@implementation MyMainMenu

-(void)onEnter
{
    [super onEnter];

    #ifdef ENABLE_ADMOB
       #ifdef COCOS2D_2_0
         AppController *app =  (AppController*)[[UIApplication sharedApplication] delegate];    
       #else 
         AppDelegate* app = (AppDelegate*)[[UIApplication sharedApplication] delegate];
       #endif
    mBannerView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner];

    // Specify the ad's "unit identifier." This is your AdMob Publisher ID.
    mBannerView.adUnitID = MY_BANNER_UNIT_ID;

    // Let the runtime know which UIViewController to restore after taking
    // the user wherever the ad goes and add it to the view hierarchy.


    //size


    #ifdef COCOS2D_2_0
    mBannerView.rootViewController = app.navController;
    [app.navController.view addSubview:mBannerView];
    #else 
    mBannerView.rootViewController = app.viewController;
    [app.viewController.view addSubview:mBannerView];
    #endif

    // Initiate a generic request to load it with an ad.
    [mBannerView loadRequest:[GADRequest request]];

    CGSize AdSize = kGADAdSizeBanner.size;

    CGRect frame = mBannerView.frame;
    frame.origin.y = -50.0f;

    #ifdef COCOS2D_2_0
    frame.origin.x = (app.navController.view.bounds.size.width - AdSize.width) / 2 ;
    #else
    frame.origin.x = (app.viewController.view.bounds.size.width - AdSize.width) / 2 ;
    #endif

    mBannerView.frame = frame;

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.5];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

    frame = mBannerView.frame;
    frame.origin.y = 0.0f;

    mBannerView.frame = frame;
    [UIView commitAnimations];    

    #endif
}

-(void)showBannerView
{
    if (mBannerView) 
    {
        [UIView animateWithDuration:0.5
                              delay:0.1
                            options: UIViewAnimationCurveEaseOut
                         animations:^
         {
             CGRect frame = mBannerView.frame;
             frame.origin.y = 0.0f;
             mBannerView.frame = frame;
         } 
                         completion:^(BOOL finished)
         {
         }];
    }

}


-(void)hideBannerView
{
    if (mBannerView) 
    {
        [UIView animateWithDuration:0.5
                              delay:0.1
                            options: UIViewAnimationCurveEaseOut
                         animations:^
         {
             CGRect frame = mBannerView.frame;
             frame.origin.y = -50.0f;
             mBannerView.frame = frame;
         } 
                         completion:^(BOOL finished)
         {
         }];
    }

}


-(void)dismissAdView
{
#ifdef ENABLE_ADMOB
    if (mBannerView) 
    {
        [UIView animateWithDuration:0.5
                              delay:0.1
                            options: UIViewAnimationCurveEaseOut
                         animations:^
         {
             CGRect frame = mBannerView.frame;
             frame.origin.y = -50.0f;
             mBannerView.frame = frame;
         } 
                         completion:^(BOOL finished)
         {
             [mBannerView setDelegate:nil];
             [mBannerView removeFromSuperview];
             mBannerView = nil;

         }];
    }
#endif  

}
于 2012-09-29T17:17:55.460 に答える
0

cocos2d では、シーンごとに異なるクラスが用意されています。

私の提案は、バナーを追加するための別のクラスを作成し、静的メソッドがあなたのために仕事をするようにすることです. 追加バナーの参照をそのクラスに保存する必要があり、静的メソッドを使用して openglview に追加/削除できます。

削除するには、次のことだけを行います: [bannerView removeFromSuperview];

于 2012-09-28T21:18:32.913 に答える