1
私はゲームにインタースティシャル広告を追加しました。現在のところ、画面の中央にあるボタンに広告が接続されています。私がしたいのは、プレーヤーが死ぬたびに広告を自動的に表示させることです。誰もこれを行う方法を知っていますか?プレイヤーが死んだときに新たに追加したインタースティシャル(admob)が表示される
これは、間質広告の私のコードです:
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()
}
}
}
私は上記の私のテキストを編集しました。私は今3つのエラーがあります。私はたぶん間違った場所に物事のいくつかを置く。 – Flinigan
拡張子はGameViewControllerクラスのスコープの外になければなりません。私の答えを編集しました。 – Jeremy
ああ、それはエラーを修正しました。もう1つの問題は、 "var gameScene = GameScene(...)"と "gameScene.interstitialDelegate = self"のコードはどこに置くべきですか? – Flinigan