投稿

Cocos2d-xとTwitter Kitを使ってOAuth認証&ユーザタイムライン取得-Android編その1

イメージ
ツイートを使ったゲームをCocos2d-xで作りたかったので、 Twitter Kit(Fabric) を使って、ツイッターのユーザタイムラインの取得をやってみました。 事前にAndroidネイティブでTwitterにログインするところまでやっておくと分かりやすいと思います。 まずはCocos2d-xのプロジェクトを作ってEclipseにインポート。 わからない人は、こことか Cocos2d-x 3.4でandroid向けにビルドする 次に、FabricをEclipseにインストール こことかを参考にしながら、 fabricユーザー登録から、プラグインのインストールまで ここで登録をして、 https://get.fabric.io/ ここを見てください。 Fabricの導入(Twitter SDK) 出来ましたでしょうか。 こんなかんじにツールバーに追加されていて、ログインできていれば成功です。 Twitter Kitの導入とログイン 先ほどのFabricの画面で、追加したいプロジェクトを選択して、Next Checking...がUnknownになるのを待ってから、TwitterのUnknownをクリック。 一番下のLog in with Twitterをselect AndroidManifestに関しては、指示通りにコードを追加してください。 次のStartActivityはAppActivityに書きます。 onCreateメソッドが無いので、そこは丸々コピペしますが、setContentViewの行は使わないので消します。 Bundleをimportしたりして、最終的にはこんなかんじになります。 アラートが沢山出ますが、導入が終わると消えるので気にしないでください。 package org.cocos2dx.cpp; import org.cocos2dx.lib.Cocos2dxActivity; import io.fabric.sdk.android.Fabric; import android.os.Bundle; import com.twitter.sdk.android.core.TwitterAuthConfig; import com.twitter.sdk.and...

Cocos2d-x 3.4でandroid向けにビルドする

プロジェクトすでに作られている前提で。 eclipseを開く File>import Existing android code into workspaceで、 プロジェクトファイル/cocos2d/cocos/platform/android/javaを指定してimportする。 import したlibcocos2dxのsrc/org.cocos2dx.lib/Cocos2dxWebViewの中の import android.annotation.SuppressLint;でエラーが出てたら、 libcocos2dxのプロパティ>androidで、APIレベルが16以上のTarget Nameを選択してOKするとエラーが消える。 もう一度、File>import>Existing android code into workspaceで プロジェクトファイル/proj.androidを指定してimportする。 こっちもAppActivity.javaでエラーが出るなら プロパティでAPIレベルが16以上のTargetを指定する。 それでもダメなら、プロパティ>android>libralyのところが赤い×になっていないか確認 なっていたら、一旦RemoveしてからAddして、先ほどのlibcocos2dxを選択する。 RunAs>android application ver3.1の時よりも簡単になった気がする。

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...