2017-09-04 8 views
1

私はゲームにインタースティシャル広告を追加しました。現在のところ、画面の中央にあるボタンに広告が接続されています。私がしたいのは、プレーヤーが死ぬたびに広告を自動的に表示させることです。誰もこれを行う方法を知っていますか?プレイヤーが死んだときに新たに追加したインタースティシャル(admob)が表示される

これは、間質広告の私のコードです:

import UIKit 
import SpriteKit 
import GameplayKit 
import GoogleMobileAds 

//I added this 
protocol GameInterstitialDelegate { 
func openInterstitial() 
} 


class GameViewController: UIViewController, GADBannerViewDelegate, 
GADInterstitialDelegate { 

var fullScreenAds :GADInterstitial! 

//I added this 
extension GameViewController: GameInterstitialDelegate { 
    func openInterstitial() { 
     self.fullScreenAds = CreateAndLoadInterstitial() 
    } 
} 

func CreateAndLoadInterstitial() -> GADInterstitial? { 
    fullScreenAds = GADInterstitial(adUnitID: "ca-app-pub- 
6532333990655924/8291640688") 
    guard let fullScreenAds = fullScreenAds else { 
     return nil 
    } 

    let request = GADRequest() 
    request.testDevices = [kGADSimulatorID] 
    fullScreenAds.load(request) 
    fullScreenAds.delegate = self 

    return fullScreenAds 

} 

func interstitialDidReceiveAd(_ ad: GADInterstitial) { 
    print("ads loaded") 
    ad.present(fromRootViewController: self) 
} 

func interstitialDidFail(toPresentScreen ad: GADInterstitial) { 
    print("ad did not load") 
} 
} 

これは私のplayerDied機能です:

class GameScene: SKScene { 

//I added this 
weak var interstitialDelegate: GameInterstitialDelegate? 

//I added this 
var gameScene = GameScene(fileNamed: "GameScene") 
gameScene.interstitialDelegate = self 

func playedDied() { 

    self.removeAction(forKey: "SpawnCar2") 
    self.removeAction(forKey: "SpawnCar3") 
    self.removeAction(forKey: "SpawnCoin") 

    for child in children { 

     if child.name == "Car2" { 
      child.removeAction(forKey: "MoveCar2") 
     } else if child.name == "Car3" { 
      child.removeAction(forKey: "MoveCar3") 
     } else if child.name == "Coin" { 
      child.removeAction(forKey: "MoveCoin") 
     } 

    } 

    isAlive = false 

    let highscore = GameManager.instance.getHighscore() 

    if highscore < score { 
     GameManager.instance.setHighscore(highscore: score) 
    } 

    let retry = SKSpriteNode(imageNamed: "Retry") 
    let quit = SKSpriteNode(imageNamed: "Quit") 

    retry.name = "Retry" 
    retry.anchorPoint = CGPoint(x: 0.5, y: 0.5) 
    retry.position = CGPoint(x: -150, y: -150) 
    retry.zPosition = 7 
    retry.setScale(0) 

    quit.name = "Quit" 
    quit.anchorPoint = CGPoint(x: 0.5, y: 0.5) 
    quit.position = CGPoint(x: 150, y: -150) 
    quit.zPosition = 7 
    quit.setScale(0) 

    let scaleUp = SKAction.scale(to: 0.8, duration: TimeInterval(0.5)) 

    retry.run(scaleUp) 
    quit.run(scaleUp) 

    self.addChild(retry) 
    self.addChild(quit) 

    //I added this 
    interstitialDelegate?.openInterstitial() 
} 
} 


override func touchesBegan(_ touches: Set<UITouch>, with event: 
UIEvent?) { 

    for touch in touches { 

     let location = touch.location(in: self) 

     if atPoint(location).name == "Play" { 
      gameplay!.scaleMode = .aspectFill 
      self.view?.presentScene(gameplay!, transition: 
      SKTransition.fade(withDuration: TimeInterval(1))) 
     } 

     if atPoint(location).name == "Highscore" { 
      scoreLabel.removeFromParent() 
      createLabel() 
     } 
    } 

} 

答えて

1

編集:私はSpriteKitにもう少し検索した、それは簡単な方法ですあなたがしたいことをすることは、通知である。

UIViewController:

class GameViewController: UIViewController, GADBannerViewDelegate, 
GADInterstitialDelegate { 
    // rest of the controller code 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     NotificationCenter.default.addObserver(self, selector: #selector(openInterstitial), name: "playerDied", object: nil) 
    } 

    func openInterstitial() { 
     self.fullScreenAds = CreateAndLoadInterstitial() 
    } 

    // rest of the controller code 
} 

SKScene:

class GameScene: SKScene { 

    func playedDied() { 
     // rest of the method code 

     NotificationCenter.default.post(name: "playerDied", 
            object: nil) 
    } 
} 
+0

私は上記の私のテキストを編集しました。私は今3つのエラーがあります。私はたぶん間違った場所に物事のいくつかを置く。 – Flinigan

+0

拡張子はGameViewControllerクラスのスコープの外になければなりません。私の答えを編集しました。 – Jeremy

+0

ああ、それはエラーを修正しました。もう1つの問題は、 "var gameScene = GameScene(...)"と "gameScene.interstitialDelegate = self"のコードはどこに置くべきですか? – Flinigan

関連する問題