2015-07-06 1 views
0

Итак, если вы когда-либо играли в Flappy Bird и получали игру, объявление отображается в верхней части приложения, пока вы не начнете новую игру. Я хочу это сделать, но мне сложно передать требуемый код в функцию gameOver (если возможно, как-то).Как включить рекламу в игре Swift SceneKit, когда она закончилась? [SOLVED]

Должен ли я добавить новую сцену для этого или могу ли я просто сделать это в классе 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() ocurs? Или когда игра закончилась? Я пробовал смотреть на другие вопросы, но они отличались от моих. Я не могу просто добавить self.canDisplayAds = true в функцию gameOver.

Примечание требуется, чтобы код Swift 2.0, и я использую Xcode 7 2. Бета-версии

+0

Ваше изменение должно быть опубликовано как ответ. –

ответ

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) 
} 

А потом, когда я хочу, чтобы показать объявления, я вызываю функцию в GameOver() с showAds(). Прекрасно работает!

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

Я попробую это, когда смогу, но если я помню, это не сработает, потому что canDisplayBannerAds должен находиться внутри функции viewDidLoad(). Я думаю, что я пробовал это раньше, но ничего не случилось. Я еще раз проверю. –