2014-06-28 76 views
0

我試圖接收到成功廣告呼叫之後顯示一個AdMob插頁廣告:與SpriteKit呈現插播式廣告重新啓動整個場景

- (void)interstitialDidReceiveAd:(GADInterstitial *)ad { 
    DLog(@"interstitialDidReceiveAd"); 
    [ad presentFromRootViewController:self]; 
} 

selfViewController實例(其是如由實施的根視圖控制器SpriteKit模板),出於某種原因它會顯示廣告(這很好),但會重新啓動整個場景。

我應該注意到,廣告請求是在場景創建並運行後完成的。

我也注意到了這個問題,當我試圖添加視圖這種控制器的視圖屬性(這是一個SpriteKit SKView實例)

和想法?

回答

0

,因爲我以爲......我做錯了什麼......

如果你偶然發現這個問題:

我在視圖控件創建我的場景ler的方法viewWillLayoutSubviews(直到此方法的視圖邊界未更新到所需的方向)

當插頁式廣告呈現時,此方法再次被調用,當然也會重新創建場景。所以只需添加一個布爾成員來指示場景是否已經被加載用於創建場景一次。

噗,問題就沒了:)

+0

你能幫我嗎。您如何解決問題,我沒有得到您的答案 – seenu

+0

viewWillLayout當插頁式廣告被解僱時調用子視圖。由於我在這種方法中創建了場景,因此它被重新創建。 – giorashc

0

這裏有些時髦的東西不僅僅是展示插頁式廣告。我有一個精靈套件的項目設置,我從RootViewController的通過顯示的UIImagePickerController:回調過程中

#pragma mark - ImageCatureDelegate methods 

-(void)requestImagePicker 
{ 
    UIImagePickerController *imagePicker = [UIImagePickerController new]; 
    imagePicker.delegate = self; 
    [self presentViewController:imagePicker animated:YES completion:nil]; 
} 

#pragma mark - UIImagePickerControllerDelegate 

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 

    [picker dismissViewControllerAnimated:YES completion:^{ 
     SKTexture *imageTexture = [SKTexture textureWithImage:image]; 

     CIFilter *sepia = [CIFilter filterWithName:@"CISepiaTone"]; 
     [sepia setValue:@(0.8) forKey:kCIInputIntensityKey]; 
     imageTexture = [imageTexture textureByApplyingCIFilter:sepia]; 

     SKView *view = (SKView *)self.view; 
     MyScene *currentScene = (MyScene *)view.scene; 
     [currentScene setPhotoTexture:imageTexture]; 
    }]; 
} 

,沒有什麼特別的是,除了駁回模式來完成。如果admob推送一個新的VC,你可能會看到這個問題,但是如果它以模態方式顯示文字模態VC ......那麼你不應該看到這個問題。您可能要仔細研究推送插頁式廣告時會發生的情況。如果是這種情況,並且這是唯一可以使用的方法,那麼您必須使用NSCode或其他內容才能保持遊戲狀態,以便在插頁式廣告消失時加載它。

編輯:

要追加到您的解決方案上面,如果你使用viewWillLayoutSubviews糾正SpriteKit利用縱向/橫向的問題,一定要做到這樣所以這只是發生「一次」

- (void)viewWillLayoutSubviews 
{ 
    [super viewWillLayoutSubviews]; 

    // Configure the view. 
    SKView * skView = (SKView *)self.view; 

    if (!skView.scene) { 
     skView.showsFPS = YES; 
     skView.showsNodeCount = YES; 

     // Create and configure the scene. 
     MyScene * scene = [[MyScene alloc] initWithSize:skView.bounds.size andLevelNumber:1]; 
     scene.scaleMode = SKSceneScaleModeAspectFill; 

     // Present the scene. 
     [skView presentScene:scene]; 
    } 
} 
+0

恢復整個遊戲狀態會在我的情況下,不切實際,這個問題似乎是要麼錯誤或什麼,我做錯了。我沒有看到爲什麼推另一個VC應該導致整個場景從頭開始加載的原因。如果它適合你,那麼我可能做錯了什麼 – giorashc

+0

對不起。我有一種感覺,你可能想要驗證真正發生了什麼(如果插頁式廣告是一種真正的模式......哪些方法可以針對顯示的對象進行調用以找出問題),以及在場景中您的狀態如何變化加載。你要測試的重點是如果你的場景是從頭開始初始化(這是你的最大暗示)。由於場景中沒有狀態,它必須重新初始化(只需在初始化方法中驗證)。 – TheCodingArt

+0

感謝您的幫助,但我想出瞭如何解決這個問題。我發佈瞭解決方案的答案。 – giorashc

相關問題