当玩家死亡时,我显示新添加的插页式广告(admob)

时间:2017-09-04 13:42:33

标签: swift admob ads

我在游戏中添加了一些插页式广告。截至目前,我已将广告连接到屏幕中央的按钮。我想做的是每当玩家死亡时自动显示广告。有谁知道如何做到这一点?

这是我的插页式广告代码:

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 个答案:

答案 0 :(得分: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)
    }
}