如何在 Swift SceneKit 游戏结束时启用广告?
How do I enable ads in a Swift SceneKit game when it's game over?
如果您曾经玩过 Flappy Bird 并结束了游戏,则在您开始新游戏之前,应用顶部会显示一则广告。我想这样做,但我很难将所需的代码传递到 gameOver 函数中(如果可能的话)。
我是否必须为此添加一个全新的场景,或者我可以在 GameScene 的 class 中添加吗?
我知道要展示广告,你去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 class 中;所有它确实显示了一张图片)。
我将其添加到 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。
从您的 viewDidLoad
中删除 self.canDisplayBannerAds = true
并将其添加到您的游戏结束功能中。然后在重新启动游戏的函数中添加 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 横幅时,加载它可能需要一秒钟。
解决方案
我在环顾四周时解决了它。我将以下代码添加到我的 viewController class.
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 文件中。这些函数放在 class.
之外
func showAds() {
NSNotificationCenter.defaultCenter().postNotificationName("showadsID", object: nil)
}
func hideAds() {
NSNotificationCenter.defaultCenter().postNotificationName("hideadsID", object: nil)
}
然后当我想展示广告时,我用 showAds() 调用 gameOver() 中的函数。工作完美!!
如果您曾经玩过 Flappy Bird 并结束了游戏,则在您开始新游戏之前,应用顶部会显示一则广告。我想这样做,但我很难将所需的代码传递到 gameOver 函数中(如果可能的话)。
我是否必须为此添加一个全新的场景,或者我可以在 GameScene 的 class 中添加吗?
我知道要展示广告,你去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 class 中;所有它确实显示了一张图片)。
我将其添加到 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。
从您的 viewDidLoad
中删除 self.canDisplayBannerAds = true
并将其添加到您的游戏结束功能中。然后在重新启动游戏的函数中添加 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 横幅时,加载它可能需要一秒钟。
解决方案 我在环顾四周时解决了它。我将以下代码添加到我的 viewController class.
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 文件中。这些函数放在 class.
之外func showAds() {
NSNotificationCenter.defaultCenter().postNotificationName("showadsID", object: nil)
}
func hideAds() {
NSNotificationCenter.defaultCenter().postNotificationName("hideadsID", object: nil)
}
然后当我想展示广告时,我用 showAds() 调用 gameOver() 中的函数。工作完美!!