cocos2d,c++とobjective-cでiphoneアプリの広告を表示
cocos2d-xで、c++を基盤に
無料でチラシ広告が画面の下部に表示される形のiphone用ゲームアプリを作ろうと思い勉強しています。
今現在、クロスプラットフォーム対応にするためsetContentScaleFactorを用いて端末の画面の大きさにより拡縮倍率を変えるようにしています。そして、MainSceneという名前のクラスを作成し、最初の画面(画像)を表示するところまでうまくいきました。
次にセリフなどを表示するための枠を画面に配置しようと思ったのですが、広告のスペースなども考える必要があるのでそちらを先に実装しなければならないと思い、iAdの導入作業に移りました。
c++でのiAdの導入の方法がわからず(というか実装不可能?)、Objective-cでなんとかチラシを表示できないかと新たにViewControllerというクラス(拡張子はmm)を作成し、必要な処理を記載しています。(viewDidLoad、didReceiveMemoryWarning、viewDidAppear、bannerViewDidLoadAd、bannerView)
そこでシミュレータを起動してみたのですが、c++で設定した背景画像は表示されるもののチラシが表示されません。MainSceneのヘッダは#include "ViewController.h"でつないでいます。
メインのMainSceneから、チラシ用のクラスのViewControllerを呼び出してメソッド一つ一つを呼びださなければいけないのでしょうか?その場合C++のクラスからObjective-cのクラスのメソッドを呼び出すことになり、記入方法もわかりませんので教えていただきたいです。
C++でiAdを実装できるのであればそれが一番いいのですが…。
*ゲームは主にC++で作成する予定(画像をタッチするだけの簡単なゲーム)
*X-code、cocos2d-xでの作成
*iAdを画面下に表示させたい
*↑はObjective-cで作成している状態
*C++で実装した最初の画面のみが表示される
c++で作成しているアプリにもiAdの広告を表示させたい。その方法を教えていただきたいのと、広告を表示させるには本当に、(viewDidLoad、didReceiveMemoryWarning、viewDidAppear、bannerViewDidLoadAd、bannerView)これだけの項目で良いのかということがわからないので教えていただきたいです。
以下はViewControllerのソースコードです***
ViewController.h
# import < UIKit/UIKit.h >
# import < iAd/iAd.h >
@interface ViewController : UIViewController <ADBannerViewDelegate>
@property (unsafe_unretained, nonatomic) IBOutlet ADBannerView *bannerView;
@end
ここからはViewController.mmのソースコードです***
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
CGRect bannerFrame = self.bannerView.frame;
bannerFrame.origin.y = self.view.frame.size.height;
self.bannerView.frame = bannerFrame;
}
-(void)bannerViewDidLoadAd:(ADBannerView *)banner{
CGRect bannerFrame = banner.frame;
bannerFrame.origin.y = self.view.frame.size.height - banner.frame.size.height;
[UIView animateWithDuration:1.0 animations:^{
banner.frame = bannerFrame;
}];
NSLog(@"広告在庫あり");}
-(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error{
CGRect bannerFrame = banner.frame;
bannerFrame.origin.y = self.view.frame.size.height;
[UIView animateWithDuration:1.0 animations:^{
banner.frame = bannerFrame;
}];
NSLog(@"広告在庫なし");}
@end
ここからはMainSceneのソースになります。
MainScene.h
#ifndef __aaa__MainScene__
#define __aaa__MainScene__
#include "cocos2d.h"
#include "ViewController.h"
class MainScene :public cocos2d::Layer{
protected:
MainScene();
virtual ~MainScene();
bool init() override;
public:
static cocos2d::Scene* createScene();
CREATE_FUNC(MainScene);
};
#endif /* defined(__aaa__MainScene__) */
ーーーーーーーーーーーーーーーーーーーーーーーーーー
MainScene.mm
#include "MainScene.h"
USING_NS_CC;
MainScene::MainScene(){
}
MainScene::~MainScene(){
}
Scene* MainScene::createScene(){ // 自身のインスタンスを生成するメソッド
auto scene = Scene::create(); // 自分(MainScene)を生成し
auto layer = MainScene::create(); // sceneに貼り付けて返す
scene -> addChild(layer); // 空のレイヤーを作成
return scene;
}
bool MainScene::init(){
if(!Layer::init()){ // このクラスの初期化処理で、初期化が成功したらtrue,失敗したらfalse
return false;
}
//Directorを取り出す
auto director = Director::getInstance();
//画面サイズを取り出す
auto size = director -> getWinSize();
//背景のスプライトを生成する (最初の画像)
auto background = Sprite::create("aaa.png");
//スプライトの表示位置を設定する (真ん中に設定
background->setPosition(Vec2(size.width / 2.0 , size.height /2.0));
//親ノードにスプライトを追加する
this -> addChild(background);
// 初期化処理
return true;
}