投稿

cocos2dx 3.1.1のiosにAdMobを入れた時に表示されない。(Must set the rootViewController property of GADBannerView before calling loadRequest エラー)

http://stackoverflow.com/questions/21846346/admob-with-cocos-2d-v3/21859218#21859218?newreg=3f939ceefd2e4dde88d6c3cf3c1c7f39 上記のサイトの回答のリンク先からダウンロードできるサンプルプロジェクトを見て解決しました。 AdMobをcocos2dxに追加するのは、 公式ドキュメント といつもお世話になっているLady Wendyさんの Cocos2d-x:AdMobを表示させる(iOS) を見て大体わかったのですが、 Must set the rootViewController property of GADBannerView before calling loadRequest というエラーが出て、広告が表示されませんでした。 公式ドキュメントの通りに bannerView_.rootViewController = self; [self.view addSubview:bannerView_]; とすると、selfのところでエラーが出てしまいます。 結論としては、これを bannerView_.rootViewController = self.viewController; [self.viewController.view addSubview:bannerView_]; としたら解決しました。 コードも載せておきます、関係有るところだけ。 bannerView_ = [[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner]; bannerView_.adUnitID = @"ca-app-pub-xxxxxxxxxxxx"; [viewController.view addSubview: bannerView_]; bannerView_.rootViewController = self.viewController; [self.viewController.view addSubview:bannerView_]; ...

ScoreBoard導入時のthrown while initializing AsyncTaskエラー

マニュアル通りに実装したのですが、thrown while initializing AsyncTask、というエラーが出てしまいました。 http://stackoverflow.com/questions/13267711/android-why-i-get-these-asynctask-error 上記のサイトを見て解決しました。 そのまま実装すると、こんなかんじになります。 private static Activity mya =null; protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); mya = this; } public static void sendScore(double score){ String[] gameIds = {"ゲームモードID"}; String[] scores = {""+score}; GFRankingController appController = GFRankingController.getIncetance(mya); appController.sendScore(gameIds, scores); } これを、上記のサイトとeclipseの警告を頼りに、 private static Activity mya =null; //これを追加 private static Handler handler = new Handler(Looper.getMainLooper()); protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); mya = this; } public static void sendScore(final double score){//finalにする handler.post(new Runnable() { @Override public void run(...

GameCenterがDoneボタンで終了できない

cocos2d-x 3.0でのiOSアプリに対するGameCenterの実装 ここ見て、GameCenterの実装は出来たのですが、openRankingでGameCenterを開いた時に、右上のDoneボタンを押しても反応がなく、元の画面に戻れなくなってしまいました。 http://programming-ios.com/cocos2dx-gamecenter-crash/ ここを見たら解決できたのですが、「データベース接続確立エラー」と表示されてしまい見れなかったので、 Googleのキャッシュ を使って見ました。 消えてしまうかもしれないので、ほとんど同じ内容ですが、ここに書いておきます。 RootViewController.hに #import <UIKit/UIKit.h> #import <GameKit/GameKit.h>//これを追記 @interface RootViewController : UIViewController <GKLeaderboardViewControllerDelegate>{ //上記のように変更 } - (BOOL) prefersStatusBarHidden; @end また、RootViewController.mmに以下を追記します。 // GKLeaderboardViewControllerのDelegate -(void)leaderboardViewControllerDidFinish:(GKLeaderboardViewController *)viewController { [self dismissViewControllerAnimated:YES completion:nil]; } // GKAchievementViewControllerのDelegate -(void)achievementViewControllerDidFinish:(GKAchievementViewController *)viewController { [self dismissViewControllerAnimated:YES completion:nil]; } また「AppControlle...

ラベルボタンを作った時にAnchorPointを設定できない::cocos2d-x v3.1.1

以下のようにラベルボタンを作った時にアンカーポイントを変更してsetPositionしたいときに、 auto label = Label::createWithSystemFont("labelButton", "Arial", 20); auto menu = MenuItemLabel::create(labelabel, CC_CALLBACK_1(HelloWorld::labelBtnCallback, this)); auto button = Menu::create(menu, NULL); button->setPosition(Vec2(float x,float y)); this->addChild(button); Menuに対して button->setAnchorPoint(Vec2(0,0)); としても効かなかった。 代わりにMenuItemLabelに対して以下のように設定したところ、 auto label = Label::createWithSystemFont("labelButton", "Arial", 20); auto menu = MenuItemLabel::create(label, CC_CALLBACK_1(HelloWorld::labelBtnCallback, this)); menu->setAnchorPoint(Vec2(1,1)); auto button = Menu::create(menu, NULL); button->setPosition(Vec2(float x,float y)); this->addChild(button); なぜかうまくいった。

マルチタッチ::cocos2d-x v3.1.1

Cocos2d-x 3.0 beta2 シングルタッチ&マルチタッチイベント取得まとめ 大体はここを見ればできるのですが、v3.1.1ではいくつか記法が異なっている部分がありました。 まずはヘッダファイルに public: void onTouchesBegan(const std::vector<cocos2d::Touch*>& touches, cocos2d::Event *event); void onTouchesMoved(const std::vector<cocos2d::Touch*>& touches, cocos2d::Event *event); void onTouchesEnded(const std::vector<cocos2d::Touch*>& touches, cocos2d::Event *event); そして、cppファイルの,HelloWorld::init()に auto listener = EventListenerTouchAllAtOnce::create(); listener->onTouchesBegan = CC_CALLBACK_2(HelloWorld::onTouchesBegan, this); listener->onTouchesMoved = CC_CALLBACK_2(HelloWorld::onTouchesMoved, this); listener->onTouchesEnded = CC_CALLBACK_2(HelloWorld::onTouchesEnded, this); this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this); と書いて、リスナーを設定します。そして、関数を追加。 void HelloWorld::onTouchesBegan(const std::vector<cocos2d::Touch *> &touches, cocos2d::Event *event){ std::vect...

androidでビルドする時につまづいた事::cocos2d-x v3.1.1

./build_native.pyでのundefined referenceエラー jni/../../Classes/HelloWorldScene.cpp:64: error: undefined reference to 'newClass::createScene()' というような感じのエラーが出ていた。 proj.android/jni/Android.mkを編集して、直接クラス情報を書いたら通った。 LOCAL_SRC_FILES := hellocpp/main.cpp \ ../../Classes/AppDelegate.cpp \ ../../Classes/HelloWorldScene.cpp こんな感じになっっている所に、同じように追記した。 区切りのバックスラッシュ(\)を忘れないように。 Eclipseにプロジェクトを追加するとAppActivity.javaでエラーが出る cocos2d-x-3.1.1/cocos/platform/android/javaを Android project from existing codeからインポートして、srcの中のorg.cocos2dx.libを追加したプロジェクトのsrcにコピペするとエラーが消える。 これでやっと心安らかにxcodeで開発できる。

子スプライトの数(存在しているか)を調べる::cocos2d-x v3.1.1

getChildrenCount()を使います。 同時にスプライトを複数(一定数以上)出したくない時などに。 タップした所にスプライトが表示され、中心まで移動した後消えます。 ただし、前のスプライトが消えないうちは、新しいスプライトが生成されないようにしています。 bool HelloWorld::init() { if ( !Layer::init() ) { return false; } //touchListner auto listner = EventListenerTouchOneByOne::create(); listner->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan,this); this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listner, this); return true; }; bool HelloWorld::onTouchBegan(Touch *touch, Event *event) { //タッチ位置取得 auto location = touch->getLocation(); //画面サイズ取得 auto visibleSize = Director::getInstance()->getVisibleSize(); //中心に移動 auto centerPoint = Point(visibleSize.width/2,visibleSize.height/2); auto moveToCenter = MoveTo::create(0.5f, centerPoint); //this以下のスプライトの数を調べる auto count = this->getChildrenCount(); //0個だったら実行 if(count == 0){ auto homuhomu = Sprite::create("...