2013年10月3日木曜日

cocos2d-x v3のschedule( schedule_selector(""))でエラー!cocos2d::SEL_SCHEDULE' (aka 'void (cocos2d::Object::*)(float)') is not allowedの解決方法

こんにちは!

予想外のところで躓いたためメモです。

cocos2d-x v3を使用しています。
schedule( schedule_selector(""));を使用したところ、何故かErrorが・・・・。

エラーは「cocos2d::SEL_SCHEDULE' (aka 'void (cocos2d::Object::*)(float)') is not allowed」という内容でした。

はい、エラーの指摘内容の意味がわかりません・・・・。
仕方がないので、サンプルソースのSapleGameのソースの該当部分をみると・・・・。
え!?floatの引数が指定されているじゃありませんか!

■エラーが出たソース
//HelloWorldScene.h
class HelloWorld : public cocos2d::Layer
{
public:
    void gameLogic();
}

//HelloWorldScene.cppでの呼び出し箇所
    this->schedule(schedule_selector(HelloWorld::gameLogic),1.0);


■修正後のソース
//HelloWorldScene.h
class HelloWorld : public cocos2d::Layer
{
public:
    void gameLogic(float dt); //←ここ
}

//HelloWorldScene.cppでの呼び出し箇所
    this->schedule(schedule_selector(HelloWorld::gameLogic),1.0);


先が思いやられますが、こんな感じでC++と格闘しています。



にほんブログ村 Androidアプリ開発へ

cocos2d-x v2とv3の違いについて

こんにちは!

以前はWindowsでAndEngineを使ってAndroid向けのアプリ開発をしていましたが・・・・
iPhoneのマーケットにも出したいと思い、MacBookPro(Airではなく・・・・)を購入してしまいました。

そんなことはさておき、開発もcocos2d-xに変更し参考書籍やサンプルソースをß読み
人生初のC++と悪戦苦闘しています。

cocos2d-x歴は浅いですがAndEngineと比べると、画像(Sprite)やアクション(3秒に1回◯◯するとか、5秒後に消えるとか)を扱うメソッドが充実しているのと、外部ツール(PhysicsEditor、LevelHelper、CocosBuilderなど)が充実しているのが魅力です。

cocos2d-xは、現在v2(v2.1.5)とv3(v3.0 alpha0)に分かれています。
参考書籍はv2なのですが、v3のサンプルソースなどを見比べて気が付いた点を自分の備忘録としてメモしたいと思います。



cocos2d-xの「SimpleGame」のソースコードで比較してみます。

■「CCSene」が「Sean」に
//v2の場合
CCScene * scene = CCScene::create();
HelloWorld *layer = HelloWorld::create();
scene->addChild(layer);

//v3の場合
auto scene = Scene::create();
auto layer = HelloWorld::create();
scene->addChild(layer);


■「MenuItemImage」や「Director::getInstance()」など「CCPointZeroはPoint::ZERO」に
//v2の場合
  CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
   "CloseNormal.png",
   "CloseSelected.png",
   this,
   menu_selector(HelloWorld::menuCloseCallback));
  CC_BREAK_IF(! pCloseItem);
        
  // Place the menu item bottom-right conner.
        CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
        CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();
        
  pCloseItem->setPosition(ccp(origin.x + visibleSize.width - pCloseItem->getContentSize().width/2,
                                    origin.y + pCloseItem->getContentSize().height/2));

  // Create a menu with the "close" menu item, it's an auto release object.
  CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);
  pMenu->setPosition(CCPointZero);
  CC_BREAK_IF(! pMenu);

  // Add the menu to HelloWorld layer as a child layer.
  this->addChild(pMenu, 1);


//v3の場合
  auto closeItem = MenuItemImage::create(
   "CloseNormal.png",
   "CloseSelected.png",
            CC_CALLBACK_1(HelloWorld::menuCloseCallback,this));
  CC_BREAK_IF(! closeItem);
        
  // Place the menu item bottom-right conner.
        auto visibleSize = Director::getInstance()->getVisibleSize();
        auto origin = Director::getInstance()->getVisibleOrigin();
        
  closeItem->setPosition(Point(origin.x + visibleSize.width - closeItem->getContentSize().width/2,
                                    origin.y + closeItem->getContentSize().height/2));

  // Create a menu with the "close" menu item, it's an auto release object.
  auto menu = Menu::create(closeItem, NULL);
  menu->setPosition(Point::ZERO);
  CC_BREAK_IF(! menu);

  // Add the menu to HelloWorld layer as a child layer.
  this->addChild(menu, 1);


■「CCSpriteがSprite」、「ccpがPoint」に
//v2の場合
  CCSprite *player = CCSprite::create("Player.png", CCRectMake(0, 0, 27, 40) );
        
  player->setPosition( ccp(origin.x + player->getContentSize().width/2,
                                 origin.y + visibleSize.height/2) );
  this->addChild(player);

  this->schedule( schedule_selector(HelloWorld::gameLogic), 1.0 );

  this->setTouchEnabled(true);

  _targets = new CCArray;
  _projectiles = new CCArray;

  // use updateGame instead of update, otherwise it will conflit with SelectorProtocol::update
  // see http://www.cocos2d-x.org/boards/6/topics/1478
  this->schedule( schedule_selector(HelloWorld::updateGame) );

  CocosDenshion::SimpleAudioEngine::sharedEngine()->playBackgroundMusic("background-music-aac.wav", true);


//v3の場合
  auto player = Sprite::create("Player.png", Rect(0, 0, 27, 40) );
        
  player->setPosition( Point(origin.x + player->getContentSize().width/2,
                                 origin.y + visibleSize.height/2) );
  this->addChild(player);

  this->schedule( schedule_selector(HelloWorld::gameLogic), 1.0 );

  this->setTouchEnabled(true);

  _targets = new Array();
        _targets->init();
        
  _projectiles = new Array();
        _projectiles->init();

  // use updateGame instead of update, otherwise it will conflit with SelectorProtocol::update
  // see http://www.cocos2d-x.org/boards/6/topics/1478
  this->schedule( schedule_selector(HelloWorld::updateGame) );

  CocosDenshion::SimpleAudioEngine::getInstance()->playBackgroundMusic("background-music-aac.wav", true);


■DirectorはJavaでよくみたシングルトンの呼び出しと同じに
//v2の場合
void HelloWorld::menuCloseCallback(CCObject* pSender)
{
 // "close" menu item clicked
 CCDirector::sharedDirector()->end();
}

//v3の場合
void HelloWorld::menuCloseCallback(Object* sender)
{
 // "close" menu item clicked
 Director::getInstance()->end();
}

JAVAでのシングルトンの呼び出しと同じgetInstance()が登場して、
v2ではなく、v3で開発をしようと思っています。
(参考書籍の記述と違うのが悩みどころ・・・・・)



にほんブログ村 Androidアプリ開発へ




2013年9月2日月曜日

スマートフォンアプリにBaaS(Backend as a Service)を組み込む

スマートフォンアプリにおけるサーバーサイドのバックエンドサービス(ユーザー管理、セーブデータやアチーブメントやランキング、Push通知、etc・・・)などなど、実装したいけど大変だなぁとおもっていたら、最近はBaaS(Backend as a Service)というサービスがあるんですね。

BaaSとは・・・・
スマートフォンなどのアプリケーションのバックエンドとして求められる
 ・「ユーザー管理機能」(会員登録・修正・削除)
 ・「データストア機能」
 ・「プッシュ通信機能」
 ・「ソーシャルとの連係」(招待コードとか)
 ・「ロケーション(GPS)との連係」
などをアプリケーション側のAPIで呼び出すだけで使えるようにしてくれるサービスです。

頑張って作れば、amazonのAWS(amazon web service)なども、近いといえば近いと思います。

Parse」というところが有名らしいです。(Facebookが買収)
ちなみにWindowsPhone向けのAzureというサービスもあるようです。


日本語(?)で使えそうなサービスも増えつつあって、現時点(2013年9月)では次の3つがHITしました。

【1】appiaries
http://www.appiaries.com

【2】Kii cloud
http://pr.kii.com

【3】BaaSday
https://baasday.com


それぞれ、ストレージのサイズや、月間のAPIの呼び出し回数など
無料で使える制限や、備わっている機能がちょっとづつ異なっています。
(じょじょに増えるんだと思いますが・・・・・)

ソーシャルゲームのように招待の機能や、
端末に依存せずに共通のアカウントでデータを管理したり、
ランキングもアプリを開いた時に、上がった!下がった!と通知してくれるような
機能をもたせたいとおもっていたので、試しに使ってみようと思います。

BaaSも、有料プランを検討しなければいけない状態に早くなりたいものですね~。


2013年8月23日金曜日

ソーシャルゲームのユーザー数(メモ) Angry Birds 2.5億人!?


Lineが、全世界で2.3億ユーザー(日本国内4700万人)で、10億人規模のプラットフォームを目指し、EC事業に参入とニュースが有りましたね。

~ソーシャルアプリのユーザー数~

25,000万人 Angry Birds 
  1,700万人 パズル&ドラゴンズ (パズドラ) 
  1,000万人 神撃のバハムート 、 探検ドリランド 、
        釣り★スタ 
  *750万人 ドラゴンコレクション (ドラコレ) 
  *500万人 拡散性ミリオンアーサー 、 恋してキャバ嬢 、
         おさわり探偵なめこ栽培キットSeasons 
   *400万人 戦国コレクション(戦コレ) 、 逆襲のファンタジカ 
   *350万人 アイドルマスター シンデレラガールズ (モバマス) 、
        キングダムコンクエスト 
   *300万人 ブラウザ三国志 (ブラ三) 、
        クイズRPG 魔法使いと黒猫のウィズ 、 
                 チョコットランド 、 対戦☆ZOOKEEPER 
   *250万人 ガールフレンド(仮) 
   *220万人 100万人の信長の野望 
   *200万人 神魔×継承!ラグナブレイク 、 三国INFINITY 、
        みんなとモンハンカードマスター 、
                 大乱闘! UTOPIAー 、 ケリ姫スイーツ 
   *180万人 大連携!!オーディンバトル 
   *150万人 大戦乱!!三国志バトル 、 運命のクランバトル 、
        アヴァロンの騎士 、秘書コレクション 、
        大召喚!!マジゲート 、 戦国サーガ 、
        冒険クイズキングダム 
   *100万人 戦国IXA(イクサ) 、 デジモンコレクターズ 、 
                  ROAD TO DRAGONS(ロード・トゥ・ドラゴン) 
          BOUND MONSTERS(バウンドモンスターズ ) 、
         無敵三国 、 
                   神界のヴァルキリー 、 ドラゴンコインズ 
    **70万人 ドラゴンリーグX 
    **60万人 モンスタードラゴン【MONSTER×DRAGON】 、
          剣と魔法のログレス 
    **50万人 のぶニャがの野望 
    **45万人 究極×進化!戦国ブレイク (戦ブレ) 
    **40万人 ブレイブリーデフォルト プレイングブレージュ 
         艦隊これくしょん -艦これ- 

引用元 : http://blog.livedoor.jp/ogenre/archives/1743028.html


アプリ開発・・・・小さく始めるにしても、大きく描いておかないと機会損失が大きいのかもしれません。

ミニマムで2か国語対応、Baas(Backend as a Service)のサービスを使って、データストア機能、プッシュ通信機能、ユーザー管理機能、ソーシャルとの連係、ロケーションとの連係など。

将来的に、アプリごとに通信OFFなどの権限を管理できる機能が搭載されるのでは?という噂も小耳にはさみましたし。(ネットをOFFにされると、無料アプリの広告が表示されなくなる・・・ということです。)


2013年8月7日水曜日

クソゲーは作ってはいけない!?


最終調整をしていたのですが・・・・・

何事も経験!リリースしよう、と思っていたのですが・・・・

ゲーム性 ・ 熱中性 ・ このアプリで遊ばないといけない理由 ・ このゲームで体験できること
などなど一定レベルを満たしていないと判断して第一弾リリースで進めたいたアプリを公開しないことに決めました。

作り方や周辺の広告などの組み込み方、バグが入り込みやすい場所など
勘所がつかめたので、次に繋げたいと思っています。

次は、しっかり企画して、面白い!と思ってもらえる要素を作りこんだものとして
リリースしたいと思っています。



2013年7月31日水曜日

第一弾のカジュアルゲームアプリ 2013年8月1日公開予定!

始めてのことばかりで、つまづきの連続でした。

Googleのディベロッパー登録の手続きもし、明日公開にむけて準備をしています。
(手続きに最大48時間かかるそうです。今日の夜には承認されるかな?)

ちなみに、GooglePlayのディベロッパー登録は「25ドル」でした。
さて、25ドルの元が取れるのはいつになることやら。


CPIだとインストール単価200円くらいなので、13インストールしてもらえれば・・・・・。
でも、合計金額が3000円とか1万円とか行かないと引き出せ無いんですけどね。


アクセス数やDL数、広告での売上などもちょこちょこと公開して行きたいと思っています。

【最初に開発したアプリは必ずこける。3本の開発は遊ばせておけ!】
なんて金言?経験則も目にしましたので、まずはリリースして(反応がないという!?)手応えを得ながら、一歩づつ成長していければと思っております。







2013年7月23日火曜日

NoClassDefFoundError に悩み、ビルドパスで解決!

AndeEngineをつかってアプリ開発をしています。

「Google Analytics SDK for Android v2」やランキングや広告を実装しようとして悩まされたのが「NoClassDefFoundError」です。

該当のjarファイルをインポートしていて、利用するActivityやSceneでもimportしているのに、
実行すると「NoClassDefFoundError」のエラーが発生するんです。

AndeEngineの設定が間違っているのかとあれこれ悩みましたが、「Java Build Path」の設定を変えたら解決しました。


<将来の自分に向けの解決策の覚書>

1)該当の「jarファイル」を準備

2)プロジェクトのプロパティを開き「ライブラリ」の「External JARs」から、該当の「jarファイル」をインポート

3)タブ「Order and Export」で、インポートしたjarに「チェック」をつける

4)解決♪


さて、次はランキング・アナリティクス・広告の実装に進みます!




2013年7月17日水曜日

Android向け オンライン・ランキング・サービス

アンドロイド向けのランキングサービス

2013年7月17日現在で、日本語で使えるアンドロイド向けオンライン・ランキング・サービスに申し込みました。


どのサービスでも
モード(easy , hardなど)と、期間(今日のランキング、今週のランキング、全期間のランキング)、
ソート順や対応スコアの種類(整数、小数点など)の基本機能は揃っているようで、マネタイズの部分では広告の差し込みのカスタマイズに対応しているようです。

管理画面や設置方法、今後の機能追加、ユーザーの使い勝手(登録が必要か・不要か)、実装の手間など、自分のアプリのイメージに近いものを適宜使ってみたいと思います。

まだ、使っていないので誤りがあったらごめんなさい!!


■Rank Plat β
https://dev.rank-plat.com

 Goodiaさんも使っているサービス

 ・株式会社ファンコミュニケーションズが提供
 ・エンドユーザーの登録不要で使える



■Score Center

 ・株式会社マルジュが提供(margeのゲームで使用)
 ・圏外でも対応
 ・シングルサインオン(ユーザーは、他のアプリで使っていたらOK)


■Score Board

 ・マッチに火をつけろのベーシックが提供
 ・ユーザーは初回利用時にニックネームのみで利用可能なようだ





Androidむけカジュアルゲームアプリの開発を始めました

Sanpo-Yoshi WORKです♪

スマートフォンのスペックも上がり、マーケットも出来上がり、マネタイズの手段も整ってきたようです。


このタイミングで、アンドロイド向けのカジュアルゲームの開発を始めました。


まだまだよちよち歩きですが、温かい目で見守ってください。


まずは、2013年7月中に第一弾をリリースにむけて開発・テストを進めています。


にほんブログ村 Androidアプリ開発へ
にほんブログ村 Androidアプリ開発へ