2016年4月8日金曜日

[cocos2d-x] 究極マインスイーパー開発しました

どうも、俺です。
cocos2d-x(v2.2.6)で「究極マインスイーパー」というアプリを開発しました。






cocos2d-x v2.2.6で開発するアプリはこれが最後になると思います。
これからはv3系です。

マインスイーパーを開発しよう!と決まってから
ネットでマインスイーパーについて調べてると、
どうやら「マインスイーパー2000」というのがとても難しい、という情報をゲット。
この「マニア」というモードを選択すると、
マスサイズ ... 68x48
爆弾 ... 777個
という難易度だという。。

今回開発した究極マインスイーパーは、最後のLV1000まで進むと、
マスサイズ ... 100x100
爆弾 ... 2594個(だったと思う)
です。

安心してください。
LV1から始められるのでいきなりそんな激ムズではありません。

ただし、これだけほど大きなステージだと、「」でゲームを進めなければならない場面に遭遇します。
そうです、マインスイーパーはたまに運に左右されるゲームなのです。

それを解消するため、究極マインスイーパーでは「虫メガネ」というアイテムを考えました。


虫メガネを使えば、まだ開けていないマスを透かしてみる事ができます。
また、
コンティニューや自動保存機能も実装したので、
タップミスで終わってしまったり、電話が鳴ってゲームが終了してしまっても安心の親切設計。

恐らく地球上最ムズのマインスイーパーだと思います。

・iOS
 https://itunes.apple.com/jp/app/ultimate-minesweeper-challenge/id1093416456?mt=8
・Android
 https://play.google.com/store/apps/details?id=jp.marge.android.minesweeper
・プレイ動画
 https://www.youtube.com/watch?v=Jfl6GP-PADI









以上でぇぇぇぇぇす。

2016年4月7日木曜日

[cocos2d-x] 'stop' is not a member of 'std'が出て困ったとき

どうも、俺です。
最近更新がマメです。

  • cocos2d-x v3.10
  • android-idk-r10e

を使用。

表題の件。
Android側をビルドしようとして、
'stoi' is not a member of 'std'
のエラーが出てしまい困っちんぐな場合の対応方法をメモ。

Android-NDKが std::stoi に対応していないのが原因だそうです。

        int number;
#if CC_TARGET_PLATFORM != CC_PLATFORM_ANDROID
        number = std::stoi("xxxxxxxxfugafuga");
#else
        number = atoi("xxxxxxxxfugafuga");
#endif

こんな感じOK。

以上でぇぇぇぇぇす。

2016年4月5日火曜日

cocos2d-xで画像がちらつく

どうも、俺です。

cocos2d-xで開発してて画像を連続で表示させた時などにチラついてしまう現象をなんとかしましょう。
Director::getInstance()->setDepthTest(false);
Director::getInstance()->setProjection(Director::Projection::_2D);

これを、AppDelegate::applicationDidFinishLaunching()に記述しておけばOKです。
TiledMapで画像がチラつく場合もこの対応でなんとかなるはずです。

以上でぇぇぇぇぇす。

2016年3月31日木曜日

cocos2d-x v3.10にアップデートして行ったEclipseの設定

どうも、俺です。
cocos2d-xをv2.2.6からv3.10にアップデートしたので、忘れないうちにメモ。

EclipseじゃなくてAndroidStudio使おうぜ、という指摘もあると思いますが、
EclipseでもAndroidStudioでも、両方でビルド出来るようにしたいのです。

まず、v2系で使っていたbuild_native.shはbuild_native.pyに置き換わり、スクリプトの中身を自分で変更しなくても良くなりました。
jni/Android.mkは適宜編集が必要です。


EclipseのRun実行時にbuild_nativeが自動で走らない。

そうです、なぜか自動でbiuld_nativeが走ってくれないので、その設定をば。
プロジェクトを選択し「Properties」>「Builders」を選択。
その中にあるCDT Builderにチェックが入っていないのでチェックします。



これに気づくまでは、手動で./build_native.pyを叩いていたのですが、
なぜかそうすると、libcocos2dx.jar(v3.10)とgoogle-play-services_lib.jarが毎回削除されてしまっていたので、
それぞれのプロジェクトも手動で「Build Project」する必要がありました。。


sh: cocos: command not found的なエラーが出る。

ビルド時にこのエラーが出て先にすすめません。
build_native実行時に呼ばれるcocosコマンドが見つからないそうなので、設定してやります。
先と同じく、プロジェクトを選択し「Properties」から「C/C++ Build」>「Environment」を選択します。
右側の「Add...」から
  • ANDROID_SDK_ROOT = 「ANDROID_SDKのパス」
  • ANT_ROOT = 「ANTのパス」
※例) /usr/local/Cellar/ant/1.9.5/libexec/bin
  • COCOS_CONSOLE_ROOT = 「cocosコマンドのあるパス」
※例) /PATH/TO/COCOS2DX/v3.10/tools/cocos2d-console/bin
  • PATH = 「${PATH}:${COCOS_CONSOLE_ROOT}:${ANDROID_SDK_ROOT}」
を設定します。


今のところ、このくらいです。
また出てくれば追記していきます。

2016年3月29日火曜日

C++で簡易マルチスレッド (C++98 / C++03)

どうも、俺です。

今日はC++を使ってのマルチスレッド実装をメモメモ。
※C++11より前のバージョンの話です。C++11ではもっと簡単に実装できます。


// mutexの定義。排他制御。
pthread_mutex_t mutex;

// Hogeクラスのコンストラクタ
HogeClass::HogeClass()
{
}

// マルチスレッド呼ばれる関数を定義
static void *hogeThreadFunc(void *param)
{
  pthread_mutex_lock(&mutex);

  // 何か重たい処理を行う。
  ....................

  pthread_mutex_unlock(&mutex);
  pthread_mutex_destroy(&mutex);

  return 0;
}

// スレッドを生成して呼び出すメソッド
static void HogeClass::hogeMethod()
{
  // スレッドID(識別子)
  pthread_t threadId;

  pthread_mutex_init(&mutex, NULL);

  // スレッド生成
  pthread_create(&threadId, NULL, hogeThreadFunc, NULL);
  pthread_detach(threadId);
}


こんな感じです。
複数のスレッドからいろんなインスタンスにアクセスするような場合は、
もっと慎重に排他制御を行う必要があると思います。


以上でぇぇぇぇぇす。