どうやら 取り敢えずは広告ネットワークを切り替えながらの表示に成功した と言えども此の状態では未だ未だ人様の前に出せるような代物にはなりません。 広告はプレイヤーに取っては主体で見るものではありませんから 此の表示がプレイ画面の表示を邪魔してはならないのは道理です。
アプリとして体裁を整えたパッケージにまとめるには 互いに邪魔し合わない画面表示を実装しなければならないのは当然で、 しかし広告掲載の一般的な方法は確立されており 情報はネット上にも書籍としても多く配信されているにも関わらず 其の実現は其れ程容易なものには感じられませんでした。 なんとなればアプリのメイン画面とは全く異なるスキームの広告画面を 同画面内に共存させなければならないからです。 今回問題になったのは想定した画面配置とずれてしまう現象でした。
開発機:MacBook Air(11-inch, Mid 2013)
MacOSバージョン:OS X 10.9.1
Xcodeバージョン:5
言語:Objective-C
関連アプリ:uPanda Breaks Out Fruits
様々試行錯誤してはみましたが中にもどうやら広告画面を一部に載せる ViewController で其の上に乗せる SKScene 生成の際に調整するのが一番のようであると考えました。 広告は横320px、縦50pxの枠を占める大きさを想定しての 以下が当該部分の実装コードになります。 SpriteKit 特有の描画数、ノード数、FPSの表示はコメントアウトして非表示化しています。 何分慣れない時分のことにてプロパティが何を示すか分明しておらず わざわざマジックナンバーにしての実装になっているのはご寛恕あれ。
/* SKScene表示 */
SKView *spriteView =
[[SKView alloc] initWithFrame:self.view.bounds];
/* 広告表示用に位置調整 */
spriteView.frame = CGRectMake(0, 50, 320, 518);
spriteView.bounds = CGRectMake(0, 0, 320, 518);
/* 描画数・ノード数・FPSの表示 */
// spriteView.showsDrawCount = YES;
// spriteView.showsNodeCount = YES;
// spriteView.showsFPS = YES;
[self.selfUiView addSubview:spriteView];
// SKScene *scene =
[[BOPlayScene alloc] initWithSize:self.view.bounds.size];
SKScene *scene =
[[BOPlayScene alloc] initWithSize:CGSizeMake(320, 518)];
[spriteView presentScene:scene];
}
縦軸のsizeをspriteView.frameのyのsizeの518に揃えると 孰れ記す機会もあるでしょうがSpriteKitフレームワークの提供する物理エンジンとの絡みにて ブロック崩しのボールが消失点である筈の位置で跳ね返る恐れ有りので控えています。 spriteView.boundsとSKScene *sceneのinitWithSizeのyのsizeを揃えているのは SpriteKitの画面構成では枠サイズを誤ると容易に画面が扁平してしまうのを防ぐためです。 すると此処で遂に広告位置補正のズレが出るので 矢張り518に揃えてSKsceneで消失点を調整していると言う塩梅です。
即ちまとめて言い換えれば生成するSKViewの以下に列挙するプロパティの数値で調整を施すのであり
この際上にも述べたように PhisicsBody (物理エンジンの機能の一つ)に於いて bounds (枠プロパティの一つ)で conflict (衝突)が発生するのでボール消失などでは注意が必要となり、 またx、yのサイズは揃えないと扁平するのでこれも注意が必要となる次第。
バージョン: 4.12
リリース: 2014年9月15日
更新: 2022年4月20日
サイズ : 10.7 MB
互換性: iOS 14.4 以降のiPhone、iPod touch に対応。および、macOS 11.0以降とApple M1 チップを搭載したMac に対応。