为什么我的插页式广告在我的 GameScene 中不起作用,但在 Swift 中的 GameViewController 中起作用?

Why won't my Interstitial Ads work in my GameScene but work in the GameViewController in Swift?

我有这些 Facebook 插页式广告,当我在我的 GameScene 中调用它们时,它们没有出现。当我在 GameViewController 中而不是在我的 GameScene 中调用它们时,它们工作得很好。有人可以告诉我我的代码做错了什么吗?

//GameViewController.swift

class GameViewController: UIViewController, FBInterstitialAdDelegate {
let interstitialFBAD: FBInterstitialAd = FBInterstitialAd(placementID: "65543456456456_454345345454534")


override func viewDidLoad() {
    super.viewDidLoad()

}

//CALL THIS IN MY GAMESCENE. 
func loadFBInterstitialAd() {
interstitialFBAD.delegate = self
interstitialFBAD.loadAd()
}

func interstitialAdDidLoad(interstitialAd: FBInterstitialAd!) {
    interstitialFBAD.showAdFromRootViewController(self)
}

//GameScene.swift

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
        for touch in touches {
        let location = touch.locationInNode(self)
        let node = self.nodeAtPoint(location)

        if node.name == "retry" {

            GameViewController().loadFBInterstitialAd()
        }
        }
        }

你试试:

    //GameViewController.swift
class GameViewController: UIViewController, FBInterstitialAdDelegate {
let interstitialFBAD: FBInterstitialAd = FBInterstitialAd(placementID: "65543456456456_454345345454534")

var scene: GameScene!

override func viewDidLoad() {
    super.viewDidLoad()
    let skView = view as! SKView
    skView.multipleTouchEnabled = false
    scene = GameScene(size: skView.bounds.size)
    scene.scaleMode = .AspectFill
    scene.view?.userInteractionEnabled = true
    skView.presentScene(scene)
    scene.gvcDelegate = self
}

    //GameScene.swift
class GameScene: SKScene {
    gvcDelegate: GameViewController?
    override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
        for touch in touches {
        let location = touch.locationInNode(self)
        let node = self.nodeAtPoint(location)
        if node.name == "retry" {
            gvcDelegate.loadFBInterstitialAd()
        }
      }
    }

祝你好运!

在 GameViewController 的 viewDidLoad 中注册一个通知,然后在您希望广告出现时从 GameScene post 中注册一个通知。

所以你的 viewDidLoad 将有以下额外的行

NSNotificationCenter.defaultCenter().addObserver(self, selector: "loadFBInterstitialAd", name: "loadAd", object: nil)

然后在Gamescene中写一个方法

func showAdNow() {
    NSNotificationCenter.defaultCenter().postNotificationName("loadAd", object: nil)
}

现在 Gamescene.swift 替换行

GameViewController().loadFBInterstitialAd()

showAdNow()