2014年03月30日

[Cocos2d-x] CCMenuItemをタッチしてもスクロールできるようにしたい(やり直し)

以前、このような記事を書きました。

tappli blog: [Cocos2d-x] CCMenuItemをタッチしてもスクロールできるようにしたい

これを書いた時点では気づいていなかったのですが、だいぶひどいバグがありました。
2つのボタンをタップすると、動作がおかしくなってしまうのです。
マルチタップを考慮してなかったせいでした。

その点に関して修正した(と思われる)ものをGitHubにアップロードしました。

t2low/CocosScrollViewSample

もうちょっとちゃんとしたサンプルが作れたらよかったのですが、とりあえずはスクロールビューとボタンを配置しただけのサンプルです。
iOSとAndroid用のプロジェクトを残してありますが、iOSの方しか動作確認してませんです。
自分は現在Cocos2d-x 2.2.3の環境でやっています。
おかしなところがあったら、ご報告いただけるとありがたいです。
タグ:cocos2d-x
posted by t2low at 23:33| Cocos2d-x

2014年03月18日

[Cocos2d-x] ミリ秒で時間を取得したい

JavaのSystem.currentTimeMillis()のようにミリ秒(というか、秒以下の精度)で時刻を取得したくなりました。
time()関数の単位は秒なので使えません。
clock()関数は精度はtime()関数より高いようですが、時刻を取得するものではないようです。
いろいろ検索してみると、gettimeofday()関数を使えば良いらしいということがわかりました。
#include <stdio.h>
#include <sys/time.h>

int main(int argc, char *argv[]) {
struct timeval t;
gettimeofday(&t, NULL);
unsigned long long now = t.tv_sec * 1000ull + t.tv_usec / 1000ull;
printf("Time: %llu\n", now);
return 0;
}

tv_secは秒なので1000倍、tv_usecはマイクロ秒なので1000で割ったものを足しています。

Javaで同じように出力するプログラムを書いて比較してみました。
class Main {
public static void main(String[] args) {
System.out.println("Time: " + System.currentTimeMillis());
}
}

全く同時には実行できないので返す結果は少し異なりましたが、数値を見る限り大丈夫そうな感じでした。
これで時刻をミリ秒で扱えます。良かった、良かった。
posted by t2low at 22:00| Cocos2d-x

2014年03月05日

[Cocos2d-x] 外部のフォントファイル(.otf)を表示する

今日、外部のフォントファイル(.otf)を使って、文字を表示する部分を作成していました。
フォントファイルはResources/fontsに入れ、CCLabelTTFクラスを使って表示するだけです。
それだけなんですが、えらい苦労しました。

iOS



  • 参考にさせてもらったいくつかのサイトに「ターゲット」の「Fonts provided by application」にフォント名を追記する、というようなことが書かれていたが、どこのことだかわからない

  • いくつかのサイトに載っていた画面とは異なるが、プロジェクトの「ios/info.plist」に「Fonts provided by application」があることを教えてもらった


Android



  • AndroidはCClabelTTFにフォントファイル名を設定したが表示されない。

  • 他の.ttfファイルなら表示できるので、ファイルが.otfだからっぽいということはわかった。

  • この.otfファイルをTextViewで利用した時は表示できるのでCocos2d-xが対応してないっぽい?

  • 最終的に「拡張子を.ttfにすればいけるらしい」ということを聞いて、試したら本当に表示された。信じられない。


こんな感じ。
表示できないotfのフォントを使おうとしている方は、ファイル名を〜.ttfにすると良いですよ。
posted by t2low at 02:00| Cocos2d-x