当游戏结束时,如何在Swift SceneKit游戏中启用广告?

时间:2015-07-06 23:29:50

标签: ios swift iad scenekit

如果您曾玩过Flappy Bird并开始游戏,则会在应用顶部显示一则广告,直到您开始新游戏。我想这样做,但是我很难将所需的代码传递给gameOver函数(如果可能的话)。

我是否必须为此添加一个全新的场景,或者我可以在GameScene的课程中添加它?

我知道要展示广告,请转到ViewController.swift并执行此操作:

class GameViewController: UIViewController {

  override func viewDidLoad() {
   super.viewDidLoad()
   let scene = GameScene(size: CGSize(width: 2048, height: 1536))
   let skView = view.self as! SKView
   skView.ignoresSiblingOrder = false
   scene.scaleMode = .AspectFill
   skView.presentScene(scene)

   self.canDisplayBannerAds = true
  }
}

唯一的问题是它会在整个时间内显示广告,即使游戏正在运行。一旦进入GameScene.swift文件,广告仍在运行。因此,我尝试将viewDidLoad()添加到GameScene.swift文件中(这是整个游戏画面。我的游戏没有标题场景或游戏场景。这些场景发生在GameScene类中;它所做的只是显示图像)。

我将此添加到GameScene.swift中,但它没有做任何事情。

class adBannerView: UIViewController {

 override func viewDidLoad() {

   super.viewDidLoad()

   self.canDisplayBannerAds = true

  }
}

当gameOver()函数出现时,如何弹出广告?或者当比赛结束时?我试过看其他问题,但他们与我的不同。我不能在gameOver函数中添加self.canDisplayAds = true。

请注意,代码是Swift 2.0,我使用Xcode 7 Prerelease 2。

2 个答案:

答案 0 :(得分:2)

self.canDisplayBannerAds = true移除viewDidLoad并将其添加到您的gameover功能中。然后在重新启动游戏的函数中添加self.canDisplayBannerAds = false。这将删除iAd横幅。

func gameOver() {
    // Display ad when game ends
    self.canDisplayBannerAds = true
}

func replayGame() {
    // Game will restart so remove ad
    self.canDisplayBannerAds = false
}

请注意,显示iAd横幅时可能需要一秒钟才能加载。

答案 1 :(得分:0)

<强>解 我在环顾四周时解决了这个问题。我将以下代码添加到我的viewController类中。

var SH = UIScreen.mainScreen().bounds.height
let transition = SKTransition.fadeWithDuration(0)
var UIiAd: ADBannerView = ADBannerView()

override func viewWillAppear(animated: Bool) {
    var BV = UIiAd.bounds.height
    UIiAd.delegate = self
    UIiAd.frame = CGRectMake(UIScreen.mainScreen().bounds.width / 4.6, SH + BV, 0, 0)
    self.view.addSubview(UIiAd)
}

override func viewWillDisappear(animated: Bool) {
    UIiAd.delegate = nil
    UIiAd.removeFromSuperview()
}

func bannerViewDidLoadAd(banner: ADBannerView!) {
    var BV = UIiAd.bounds.height
    UIView.beginAnimations(nil, context: nil)
    UIView.setAnimationDuration(0.5) // Time it takes the animation to complete
    UIiAd.alpha = 1 // Fade in the animation
    UIView.commitAnimations()
}

func bannerView(banner: ADBannerView!, didFailToReceiveAdWithError error: NSError!) {
    UIView.beginAnimations(nil, context: nil)
    UIView.setAnimationDuration(0.5)
    UIiAd.alpha = 0
    UIView.commitAnimations()
}

func showBannerAd() {
    UIiAd.hidden = false
    var BV = UIiAd.bounds.height

    UIView.beginAnimations(nil, context: nil)
    UIView.setAnimationDuration(0.5) // Time it takes the animation to complete
    UIiAd.frame = CGRectMake(UIScreen.mainScreen().bounds.width /  4.6, SH - BV, 0, 0) // End position of the animation
    UIView.commitAnimations()
}

func hideBannerAd() {
    UIiAd.hidden = true
    var BV = UIiAd.bounds.height

    UIView.beginAnimations(nil, context: nil)
    UIView.setAnimationDuration(0.5) // Time it takes the animation to complete
    UIiAd.frame = CGRectMake(UIScreen.mainScreen().bounds.width /  4.6, SH + BV, 0, 0) // End position of the animation
    UIView.commitAnimations()
}

override func viewDidLoad() {
    super.viewDidLoad()

    self.UIiAd.hidden = true
    self.UIiAd.alpha = 0

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "hideBannerAd", name: "hideadsID", object: nil)
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "showBannerAd", name: "showadsID", object: nil)
//My other code
}

然后我将此代码添加到将显示广告的scene.swift文件中。这些函数放在课外。

func showAds() {
    NSNotificationCenter.defaultCenter().postNotificationName("showadsID", object: nil)
}
func hideAds() {
NSNotificationCenter.defaultCenter().postNotificationName("hideadsID", object: nil)
}

然后当我想展示广告时,我使用showAds()调用gameOver()中的函数。工作完美!!