tappli blog http://blog.tappli.com/ 日々の出来事など。だいたいAndroidのことです。 ja
  • http://blog.tappli.com/article/185756574.html 中古のInspiron 13 7000 2-in-1 (7368)を買った 外で使えるノートPCが欲しくて中古のWindowsノートを買った。Dellの「Inspiron 13 7000 2-in-1 (7368)」当初、最低限作業できるスペックとして、このあたりを考えていた。- Core i5- 8GBメモリ- SSD- 13インチくらいまでの大きさ(持ち運ぶため)- FullHD以上の解像度- Linux PCとして使い易いことちょうどDellが20%オフセール中だったので、希望のスペックを満たすものを探すと、Inspiron 13 5000 (.. 日記 t2low 2019-03-24T00:35:22+09:00 <![CDATA[ 外で使えるノートPCが欲しくて中古のWindowsノートを買った。
    Dellの「Inspiron 13 7000 2-in-1 (7368)」

    当初、最低限作業できるスペックとして、このあたりを考えていた。

    - Core i5
    - 8GBメモリ
    - SSD
    - 13インチくらいまでの大きさ(持ち運ぶため)
    - FullHD以上の解像度
    - Linux PCとして使い易いこと

    ちょうどDellが20%オフセール中だったので、希望のスペックを満たすものを探すと、Inspiron 13 5000 (5370) で8万弱。Inspiron 13 7000 (7380) で9万弱。
    要望はほぼ満たすのだけど、予算的にきびしい。

    新宿でいろいろとPCを探していたらじゃんぱらで「hp sprectre」が8万弱で売られていた。
    CPUがCore i7で8GBメモリこれで8万弱。i7は良いが、2016年モデル、しかも中古でこの値段では新品のInspironを買った方が良いのではないかと悩む。

    いっそスペックを下げに下げて、安くPCを調達するのはどうかと考えたが、Inspiron 11では画面解像度が足らないことが明白。スペックもきっと8GBに上げなければ満足には使えなさそう、ということを考えると、大して安くは調達できなさそう。
    Inspiron 11に4~5万出すくらいなら、Inspiron 13買った方が良いのではないかとやはり悩む。

    中古で探すしかないかと、いろいろ探していたら、2016年のInspiron 13が約4万円で売られているのを発見した。
    2年半前だと少々性能は落ちるだろうけど、おそらく許容範囲だろう。
    今の13インチPCと比べるとデカくて重いがそれも許容できるはず。数百グラムなら誤差だ。
    2in1なのでLinuxも使いづらそうなのも難だ。しかし、全く動かせないということはないだろうし、Linuxにしたかったら頑張ってみるのも良いかもしれない。
    その他のスペックは希望どおりだ。
    このあたりが落としどころかもしれない。
    中古品だけど、新品に近い状態らしいのも良かった。

    あー、届くのが楽しみだ。

    ]]><![CDATA[ ]]>
    http://blog.tappli.com/article/185337631.html ゲーミングPCを譲ってもらった 久しぶりにこのブログを見たら、前回PCを買ったときのことが最新の記事だった。年末にそのPCを売却して、友人からゲーミングPCを安く譲ってもらったのでそのことを書いてく。譲ってもらったのは「Lenovo Legion Y920 Tower」というデスクトップPC。これにロジクールのゲーミングマウス(G502)とゲーミングキーボード(PRO?)をつけてもらった。全体的にハイスペックで、ビデオカードにGTX 1080が載っている。CPUは水冷だし、LANもどうやらゲーム用にいいやつ.. 日記 t2low 2019-01-07T00:11:23+09:00 <![CDATA[ 久しぶりにこのブログを見たら、前回PCを買ったときのことが最新の記事だった。
    年末にそのPCを売却して、友人からゲーミングPCを安く譲ってもらったのでそのことを書いてく。

    譲ってもらったのは「Lenovo Legion Y920 Tower」というデスクトップPC。
    これにロジクールのゲーミングマウス(G502)とゲーミングキーボード(PRO?)をつけてもらった。

    全体的にハイスペックで、ビデオカードにGTX 1080が載っている。CPUは水冷だし、LANもどうやらゲーム用にいいやつが載ってるらしい。すごい。
    ただ、基本的にPCでゲームをやらない。やっても2DのゲームやMinecraftくらいで宝の持ち腐れ感がある。
    しかし、開発用PCとしてもハイスペックなので、とてもありがたい。

    また、デスクトップPCを置くにあたって、我が家にPC専用のデスクが設けられた。
    これまでは、ノートPCだったので適当なスペースでPCを開くようにしていたが、さすがにデスクトップでそれはできないので、PC用にデスクを設けることになった。
    おかげで、PCを起動するというアクションにかかる負荷が大きく減った。
    これまでは自宅でPCを開くというのは、結構億劫なものだったが、今ではボタンを一つ押すだけで作業が開始できる。これはありがたい。
    家でPCを起動するのに必要だったのは、ハイスペックPCなのではなく、PCデスクだったのでは?と感じるほどだ。

    今のところPCを譲ってもらってから、毎日のようにPCを起動している。
    しかし、それも新しいものが来た興奮からそうしているだけかもしれない。
    今年は開発に関する勉強も今まで以上にやっていきたいと思っているので、この良い傾向が続くといいなと思う。

    このブログの最新の記事が、今は手元にないHPのPCを購入したという記事になっているのが気になったので、これを書いた。 ]]><![CDATA[ ]]>
    http://blog.tappli.com/article/179925293.html hp spectre x360 のペン 先日も書いたが、x360のペンが気に入っている。特に何かを描くというわけではないが、液晶タブレットと同じような使い方ができるということにワクワクしている。普通のタッチパネルと違って、ペンでタッチしたときに筆圧を感知するのがとても良い。僕はPhotoshopCS6を持っている。数年前の誕生日に買ってもらった。もったいないことに全然使っていない。全然元が取れていないが、ペンが使えるのなら、これからはPhotoshopで描き放題だ!と思っていた。hp spectre x360が届い.. 日記 t2low 2017-06-02T00:56:59+09:00 <![CDATA[ 先日も書いたが、x360のペンが気に入っている。
    特に何かを描くというわけではないが、液晶タブレットと同じような使い方ができるということにワクワクしている。
    普通のタッチパネルと違って、ペンでタッチしたときに筆圧を感知するのがとても良い。

    僕はPhotoshopCS6を持っている。数年前の誕生日に買ってもらった。もったいないことに全然使っていない。
    全然元が取れていないが、ペンが使えるのなら、これからはPhotoshopで描き放題だ!と思っていた。

    hp spectre x360が届いて、早速Photoshopをインストールした。
    いざ!とペンで描いてみると、なぜか線の太さが変わらない。
    何か設定がいるのか?と調べたり、弄ったりしてみたが、変化がない。
    他の筆圧感知に対応しているというソフトをインストールしては試してみたが、結果は同じだった。

    さらにいろいろ調べていたら、これだ、という情報を見つけた。

    タブレットPCの筆圧感知について簡単なまとめ
    https://togetter.com/li/419472

    どうやらWindowsPCの筆圧感知の方式は2方式あるらしい。
    WacomなどのWintab系と、Surfaceなど(?)のN-trig系。
    Wintabは多くのソフトが対応しているっぽいが、x360はN-trigの方式のようだ。
    こんな違いがあるなんて、全然知らなかった。

    どうやら互換ドライバというものがあるらしい。まだインストールしてはいないが。
    あと、N-trigの方式に対応しているお絵描きソフトもあるようだ。
    ClipStudioというソフトの体験版をインストールして試したところ、これなら筆圧を感知できた。
    もしかしたらPhotoshopも最新のバージョンなら対応しているのかもしれない。知らないけど。

    さぁ、何を描こうかな。

     


    ]]><![CDATA[ ]]>
    http://blog.tappli.com/article/179908057.html hp spectre x360 を買った 奥さんからPCを新調しても良いと許可がおりた。これまで使用していたMacbook Airが5年も前のモデルで、開発時に轟音を立てていたのがきっかけだった。購入したのは「hp spectre x360」の「スタンダードプラス」モデル。Core i7 7500U、16GB、1TBのノートPCだ。ノートPCだが、タッチパネルを搭載していてタブレットのようにも使える。スタンダードプラスモデル以上にはペンも付属していて、お絵かきも楽しめる。このペンが付属するというところに惹かれたのも選.. 日記 t2low 2017-05-31T01:28:50+09:00 <![CDATA[ 奥さんからPCを新調しても良いと許可がおりた。
    これまで使用していたMacbook Airが5年も前のモデルで、開発時に轟音を立てていたのがきっかけだった。

    購入したのは「hp spectre x360」の「スタンダードプラス」モデル。
    Core i7 7500U、16GB、1TBのノートPCだ。
    ノートPCだが、タッチパネルを搭載していてタブレットのようにも使える。
    スタンダードプラスモデル以上にはペンも付属していて、お絵かきも楽しめる。
    このペンが付属するというところに惹かれたのも選んだ理由の一つだ。

    注文したのは5/20の夜。
    正式受注となったは翌週月曜日の5/22。
    そして、自宅に届いたのは金曜日5/26だった。
    最速で5営業日ということだったので、最速で届いたようだ。

    購入に際し、いくつか他のPCも検討した。

    最初に欲しいと思っていたのは、DELLのXPS13だった。見た目がとても好みだった。
    しかし、最低でもメモリは16GBは欲しいと考えていたので、XPS13の最上位モデルを選択するしかなく、そこが少しネックに感じた。
    XPSの2-in-1も良いように見えたが、同じCore i7でも性能が低いものらしい。あまり詳しくはわかっていないが、そこが引っかかって選外とした。

    LenovoのThinkpadも良さそうだと思っていた。
    X1 Carbonは見た目も良く、開発用途として使うにはとても良さそうだったが、店頭で確認したとき「これはでかすぎる」と感じた。
    持ち歩くことを考えていたので候補からは外れた。
    X270もシンプルな見た目で良さそうに思った。本体サイズは小さめだが、スペックは十分で、SIMが挿せるのも良さそうだった。
    しかし、見た目がシンプルすぎた。変わらない良さというものはわかるが、今回はかっこいいPCが欲しかった。

    CPUが高性能なので、ゲーミングノートPCも考えたが、やはりモバイル用途を考えると選べるものは見つけられなかった。
    モバイルアプリ開発者としてはMacを選ぶべきなのかもしれないが、今買いたいと思えるモデルがなかった。

    そして、最終的にこの「hp spectre x360」を選んだ。
    キーボードの一部が特殊な配置になっているのが少し気になったが、店頭で触ってみた限りではBackspace、Enter等の押し間違いは起きなかった。
    きちんとブラインドタッチできる方ではないけれど、これだけ打てれば大丈夫だろうと思った。
    欲を言えばメモリは32GB欲しかったが、モバイルノートではまず見当たらないから仕方ない。
    パフォーマンスモデルの4Kディスプレイが+1万円で手に入るというのは、すごく魅力的だったが、納期が伸びるのは我慢できそうになかった。
    店頭で確認したり、自宅のフルHDのディスプレイを使って疑似体験してみたら、最終的にフルHDで十分だ、という結論に達した。

    メインPCがWindowsになるのは久しぶりだ。
    いろいろと思い出しながらだったり、調べながらだったり、環境を整えていくのは楽しい。
    開発者がデジタイザーペン付きのPCを使うだなんて、なんだか軟派な感じもするけれど、久しぶりにPCを楽しむために買った気がする。
    ペン楽しい。

    まだ書きたいことはあるので、またブログを更新していけたらいいな、と思っている。



    ]]><![CDATA[ ]]>
    http://blog.tappli.com/article/174964817.html Windows10 の初期化時に行ったこと Windows10 の Insider Preview を Transbook T90 にインストールしてみたけれど、スペック的に厳しいとわかったので再び PC の初期化を行った。ASUS ノートパソコン TransBook T90CHI-3775 Windows10/8.9インチ/ダークブルーとりあえず、以下のことをした。おそらく、また初期化することがあると思うので備忘録的に残しておく。■アンインストール不要なアプリをいろいろ消した。■インストール- Google 日本語入.. その他 t2low 2016-04-19T11:32:32+09:00 <![CDATA[ Windows10 の Insider Preview を Transbook T90 にインストールしてみたけれど、スペック的に厳しいとわかったので再び PC の初期化を行った。

    ASUS ノートパソコン TransBook T90CHI-3775 Windows10/8.9インチ/ダークブルー

    とりあえず、以下のことをした。
    おそらく、また初期化することがあると思うので備忘録的に残しておく。

    ■アンインストール

    不要なアプリをいろいろ消した。

    ■インストール

    - Google 日本語入力
    - JDK8
    - Android Studio
    - Git2.8.1
    - Firefox
    - アンチウイルスソフト

    ■CapsLock→Ctrlへの変更
    http://ascii.jp/elem/000/000/927/927191/

    ■各種フォルダの移動
    http://zakkinks.com/windows10_ssd_optimization2/

    何か忘れているような気がするけれど、とりあえずはこんなものだろうか。
    この PC の性能は低いとわかったので、本当に最低限のことだけするように気をつけよう(自戒)。
    あれもこれもインストールしないこと。


    ]]><![CDATA[ ]]>
    http://blog.tappli.com/article/174922672.html Windows10 に git をインストール 久しぶりの更新です。今日は Windows10 PC に git 2.8.1 をインストールしました。昨年末に小さなタブレットPCを買ったんですが、最近初期化しまして、もう一度開発環境を整えようと思ってのことです。ちなみに使用しているPCは以下のものです。ASUS ノートパソコン TransBook T90CHI-3775 Windows10/8.9インチ/ダークブルー正直、開発するには向きません。が、このサイズは気に入っているので、もう少しがんばって(我慢して)使ってみよう.. その他 t2low 2016-04-16T09:00:00+09:00 <![CDATA[ 久しぶりの更新です。
    今日は Windows10 PC に git 2.8.1 をインストールしました。

    昨年末に小さなタブレットPCを買ったんですが、最近初期化しまして、もう一度開発環境を整えようと思ってのことです。ちなみに使用しているPCは以下のものです。

    ASUS ノートパソコン TransBook T90CHI-3775 Windows10/8.9インチ/ダークブルー

    正直、開発するには向きません。が、このサイズは気に入っているので、もう少しがんばって(我慢して)使ってみようと思っています。
    普段は mac を使っているので、あまり Windows の勝手がわからず、いろいろと参考になるサイトを探しながら作業しています。

    今回、参考にさせていただいたのは以下のサイトです。

    ■ 私家版 Git For Windowsのインストール手順 | OPC Diary
    http://opcdiary.net/?page_id=27065

    以前に Windows10 PC に git をインストールした際は、あまり説明も読まずに標準設定のままインストールして、いろいろと困った記憶があったので、今回は確認しながら進めました。
    上記サイトは画面ごとにスクリーンショットが貼られていて、しかも、画面の説明を日本語で丁寧に解説してくれています。大変助かりました。

    今回は以下の設定でインストールしました。
    - PATHの設定 → WindowsのコマンドプロンプトにもUNIXツールのパスを設定
    - 改行について → 改行はそのまま。「Checkout as-is, commit as-is」
    - コンソールの選択 → MSYS2
    - その他 → デフォルト設定

    SSHキーも作成し、GitHubにアクセスできるようにしました。
    上記サイトでは、posh-gitというものもインストールしてはどうかと提案していましたが、ターミナルからのコマンド入力はそれなりに慣れているので、これはインストールしませんでした。

    まだ git のインストールをしただけで、文字コードや改行コードが意図したとおりになっているかわからないですが、とりあえず git のインストールはうまくいったようです。良かった良かった。
    丁寧にまとめてくださる人がいるのは大変ありがたいですね。


    ]]><![CDATA[ ]]>
    http://blog.tappli.com/article/103708763.html [Android] 環境再構築 しばらく家での開発をサボっていて、久しぶりにPCを開いてみたら、いろいろと環境が古い状態だった。これはイカンと環境を再構築することにした。最初からやり直してみたかったので、既存のEclipseはポイっとゴミ箱へ。最新のEclipseは4.4(Luna)になっていた。フラットデザインだ。・ Eclipse Downloads https://www.eclipse.org/downloads/今回はAndroid SDKをきちんと管理できるようにしたかったので、Homebrew.. Android t2low 2014-09-18T02:35:38+09:00 <![CDATA[ しばらく家での開発をサボっていて、久しぶりにPCを開いてみたら、いろいろと環境が古い状態だった。
    これはイカンと環境を再構築することにした。
    最初からやり直してみたかったので、既存のEclipseはポイっとゴミ箱へ。
    最新のEclipseは4.4(Luna)になっていた。フラットデザインだ。

    ・ Eclipse Downloads https://www.eclipse.org/downloads/

    今回はAndroid SDKをきちんと管理できるようにしたかったので、Homebrewを使ってAndroid SDKをインストールすることにした。
    こちらのサイトを参考にさせていただいた。

    ・ 橋本商会 » Android開発環境をインストールしなおした http://shokai.org/blog/archives/6407

    Android SDKが簡単にインストールできるのは嬉しいのだけど、インストールされるパスが微妙ではなかろうか。
    「/usr/local/Cellar/android-sdk/23.0.2/bin/android」のような感じで、途中にバージョンコードが入ってる。
    23.0.2のディレクトリのままアップデートするのも微妙だし、バージョンごとにディレクトリ変えるのも微妙。
    普通はインストール先を変えるものなのかな?

    続いて、EclipseへADTをインストール。

    ・ Installing the Eclipse Plugin | Android Developers http://developer.android.com/sdk/installing/installing-adt.html

    で、Eclipseの各種設定をしておしまい。
    こちらのサイトを参考にしながら、適当に設定する。

    ・ モダン(かもしれない)なEclipse環境(Java)の構築方法 - wyukawa’s blog http://d.hatena.ne.jp/wyukawa/20100725/1280036738

    新しい環境というのはいい感じだね。 ]]><![CDATA[ ]]>
    http://blog.tappli.com/article/92059488.html [Cocos2d-x] CCMenuItemをタッチしてもスクロールできるようにしたい(やり直し) 以前、このような記事を書きました。tappli blog: [Cocos2d-x] CCMenuItemをタッチしてもスクロールできるようにしたいこれを書いた時点では気づいていなかったのですが、だいぶひどいバグがありました。2つのボタンをタップすると、動作がおかしくなってしまうのです。マルチタップを考慮してなかったせいでした。その点に関して修正した(と思われる)ものをGitHubにアップロードしました。t2low/CocosScrollViewSampleもうちょっとちゃんと.. Cocos2d-x t2low 2014-03-30T23:33:37+09:00 <![CDATA[ 以前、このような記事を書きました。

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

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

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

    t2low/CocosScrollViewSample

    もうちょっとちゃんとしたサンプルが作れたらよかったのですが、とりあえずはスクロールビューとボタンを配置しただけのサンプルです。
    iOSとAndroid用のプロジェクトを残してありますが、iOSの方しか動作確認してませんです。
    自分は現在Cocos2d-x 2.2.3の環境でやっています。
    おかしなところがあったら、ご報告いただけるとありがたいです。
    ]]><![CDATA[ ]]>
    http://blog.tappli.com/article/90771951.html [Cocos2d-x] ミリ秒で時間を取得したい JavaのSystem.currentTimeMillis()のようにミリ秒(というか、秒以下の精度)で時刻を取得したくなりました。time()関数の単位は秒なので使えません。clock()関数は精度はtime()関数より高いようですが、時刻を取得するものではないようです。いろいろ検索してみると、gettimeofday()関数を使えば良いらしいということがわかりました。#include &lt;stdio.h&gt;#include &lt;sys/time.h&gt;in.. Cocos2d-x t2low 2014-03-18T22:00:00+09:00 <![CDATA[ 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());
    }
    }

    全く同時には実行できないので返す結果は少し異なりましたが、数値を見る限り大丈夫そうな感じでした。
    これで時刻をミリ秒で扱えます。良かった、良かった。
    ]]><![CDATA[ ]]>
    http://blog.tappli.com/article/88915908.html [Cocos2d-x] 外部のフォントファイル(.otf)を表示する 今日、外部のフォントファイル(.otf)を使って、文字を表示する部分を作成していました。フォントファイルはResources/fontsに入れ、CCLabelTTFクラスを使って表示するだけです。それだけなんですが、えらい苦労しました。iOS参考にさせてもらったいくつかのサイトに「ターゲット」の「Fonts provided by application」にフォント名を追記する、というようなことが書かれていたが、どこのことだかわからないいくつかのサイトに載っていた画面とは異な.. Cocos2d-x t2low 2014-03-05T02:00:00+09:00 <![CDATA[ 今日、外部のフォントファイル(.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にすると良いですよ。 ]]><![CDATA[ ]]>
    http://blog.tappli.com/article/88368846.html [Cocos2d-x] CCMenuItemをタッチしてもスクロールできるようにしたい 以下のソースには不具合があります。修正したソースは以下の記事から参照できます。tappli blog: [Cocos2d-x] CCMenuItemをタッチしてもスクロールできるようにしたい(やり直し)CCScrollViewとCCMenuを組み合わせて利用した時に、最初のタッチ位置がCCMenuItemだとスクロールさせることが出来ません。CCMenuItemがタッチイベントを奪ってしまって、CCScrollViewまで届いていないようです。解決策がないかと検索してみたとこ.. Cocos2d-x t2low 2014-02-26T22:00:00+09:00 <![CDATA[ 以下のソースには不具合があります。
    修正したソースは以下の記事から参照できます。
    tappli blog: [Cocos2d-x] CCMenuItemをタッチしてもスクロールできるようにしたい(やり直し)


    CCScrollViewとCCMenuを組み合わせて利用した時に、最初のタッチ位置がCCMenuItemだとスクロールさせることが出来ません。
    CCMenuItemがタッチイベントを奪ってしまって、CCScrollViewまで届いていないようです。
    解決策がないかと検索してみたところ、以下の記事が見つかりました。
    というよりもこれくらいしか見つけられませんでした。
    あまりCCScrollViewとCCMenuを組み合わせて使うような使い方はされていないのかも知れません。

    Make Ccscrollview Work With Ccmenuitemimage - iOS Coder Talk

    全てのコードは載っていないのですが、やっていることは単純でした。

    • CCMenuItemより先にCCScrollViewがタッチイベントを取得するようにする

    • ccTouchEnded時にタッチの移動距離を計算し、一定以下ならCCMenuにタッチイベントを渡す

    • CCMenu側では指定された範囲外だったら無視する


    という感じ。

    足りないコードを補完して、この実装をしてみると一つ問題がありました。
    スクロールはできるし、ボタン押下のイベントも来るのですが、ボタンの見た目が変化しないのです。
    それはそのはずで、CCScrollViewExのccTouchEndedでCCMenuのccTouchBeganとccTouchEndedを両方処理しているのです。
    これではダメだと書き換えたのが以下のコードです。

    .h


    class CCMenuEx : public cocos2d::CCMenu {
    public:
    CREATE_FUNC(CCMenuEx);
    virtual bool ccTouchBegan(cocos2d::CCTouch *touch, cocos2d::CCEvent *event);
    void setValidTouchRectInWorldSpace(cocos2d::CCRect rect) { this->validTouchRectInWorldSpace = rect; };
    private:
    cocos2d::CCRect validTouchRectInWorldSpace;
    };

    class CCScrollViewEx : public cocos2d::extension::CCScrollView {
    public:
    virtual void registerWithTouchDispatcher();
    virtual bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
    virtual void ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
    virtual void ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
    virtual void ccTouchCancelled(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
    CREATE_FUNC(CCScrollViewEx);
    void setMenu(cocos2d::CCMenu *menu);

    enum {
    kCCScrollViewExPriority = (cocos2d::kCCMenuHandlerPriority - 1)
    };
    protected:
    cocos2d::CCPoint pressPoint;
    cocos2d::CCMenu *menu;
    bool waitingTouchEnd;
    };

    .cpp


    bool CCMenuEx::ccTouchBegan(CCTouch *touch, CCEvent *event) {
    if (!validTouchRectInWorldSpace.size.width || !validTouchRectInWorldSpace.size.height) {
    return CCMenu::ccTouchBegan(touch, event);
    }

    CCPoint touchLocation = touch->getLocation();
    if (!validTouchRectInWorldSpace.containsPoint(touchLocation)) {
    return false;
    }

    return CCMenu::ccTouchBegan(touch, event);
    }

    void CCScrollViewEx::registerWithTouchDispatcher() {
    CCTouchDispatcher *dispatcher = CCDirector::sharedDirector()->getTouchDispatcher();
    dispatcher->addTargetedDelegate(this, kCCScrollViewExPriority, true);
    }

    bool CCScrollViewEx::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent) {
    pressPoint = pTouch->getLocationInView();
    if (menu) {
    waitingTouchEnd = menu->ccTouchBegan(pTouch, pEvent);
    }
    return CCScrollView::ccTouchBegan(pTouch, pEvent);
    }

    void CCScrollViewEx::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent) {
    if (waitingTouchEnd) {
    const float MIN_DISTANCE = 10;
    CCPoint endPoint = pTouch->getLocationInView();
    float distance = sqrtf((endPoint.x - pressPoint.x) * (endPoint.x - pressPoint.x) + (endPoint.y - pressPoint.y) * (endPoint.y - pressPoint.y));

    if(distance < MIN_DISTANCE) {
    if (menu) {
    menu->ccTouchMoved(pTouch, pEvent);
    }
    } else {
    if (menu) {
    menu->ccTouchCancelled(pTouch, pEvent);
    waitingTouchEnd = false;
    }
    }
    }
    CCScrollView::ccTouchMoved(pTouch, pEvent);
    }

    void CCScrollViewEx::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)
    {
    if (waitingTouchEnd) {
    const float MIN_DISTANCE = 10;
    CCPoint endPoint = pTouch->getLocationInView();
    float distance = sqrtf((endPoint.x - pressPoint.x) * (endPoint.x - pressPoint.x) + (endPoint.y - pressPoint.y) * (endPoint.y - pressPoint.y));

    if(distance < MIN_DISTANCE) {
    if (menu) {
    menu->ccTouchEnded(pTouch, pEvent);
    }
    } else {
    if (menu) {
    menu->ccTouchCancelled(pTouch, pEvent);
    waitingTouchEnd = false;
    }
    }
    }
    CCScrollView::ccTouchEnded(pTouch, pEvent);
    }

    void CCScrollViewEx::ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent) {
    if (menu && waitingTouchEnd) {
    menu->ccTouchCancelled(pTouch, pEvent);
    waitingTouchEnd = false;
    }
    CCScrollView::ccTouchCancelled(pTouch, pEvent);
    }

    void CCScrollViewEx::setMenu(CCMenu *menu) {
    this->menu = menu;
    CCMenuEx *ex = dynamic_cast<CCMenuEx *>(menu);
    if (ex) {
    ex->setValidTouchRectInWorldSpace(getViewRect());
    }
    }


    ccTouchMovedとccTouchEndedにコピペコードがあるのはご愛嬌。
    変更したのは、以下のとおり。

    • CCMenuにはccTouchBeganでイベントを流す

    • タッチ位置が一定以上移動したらCCMenuのタッチイベントはキャンセル(ccTouchCancelled)する

    • setMenu()にCCMenuExが渡されたら、CCScrollViewExの表示サイズをタッチ可能領域とする


    期待通りの動作はしているので、これで良しとします。

    確認はしていないですが、Cocos2d-x 3.0ではタッチイベント周りがかなり改善されているようなので、こんなことしなくても良いかも知れません。
    3.0はまだβ版のようなので、まだ必要としている人がいるかも、と記事にしてみました。


    ]]><![CDATA[ ]]>
    http://blog.tappli.com/article/87680050.html [Cocos2d-x] std::vectorの中身の保存 CCHttpClientを使って取得したデータをファイルに保存するコードを書いていました。std::vector&lt;char&gt; *data = response-&gt;getResponseData();std::string path = CCFileUtils::sharedFileUtils()-&gt;getWritablePath() + "hoge.txt";FILE *fp = fopen(path.c_str(), "w");size_t coun.. Cocos2d-x t2low 2014-02-19T22:00:00+09:00 <![CDATA[ CCHttpClientを使って取得したデータをファイルに保存するコードを書いていました。

    std::vector<char> *data = response->getResponseData();

    std::string path = CCFileUtils::sharedFileUtils()->getWritablePath() + "hoge.txt";
    FILE *fp = fopen(path.c_str(), "w");
    size_t count = fwrite(&data[0], sizeof(char), data->size(), fp);
    fclose(fp);

    こんなコードを書いたのですが、ファイルの内容は正しくありませんでした。
    しかし、fwrite()の戻り値はdata->size()と一致するのです。
    しばらく悩んで気付きました。
    size_t count = fwrite(&(*data)[0], sizeof(char), data->size(), fp);

    こうですね。
    そりゃあ変なデータが書き込まれるわけですね。

    ]]><![CDATA[ ]]>
    http://blog.tappli.com/article/87556904.html [Cocos2d-x] OS毎に処理を分ける 「Cocos2d-x 開発のレシピ」にOS毎に処理を分ける方法が載っていました。マクロで分岐させる方法と#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) ...#elif (CC_TARGET_PLATFORM ==CC_PLATFORM_ANDROID) ...#endif実行時に分岐させる方法TargetPlatform platform = CCApplication::sharedApplication()-&gt;g.. Cocos2d-x t2low 2014-02-18T22:00:00+09:00 <![CDATA[ 「Cocos2d-x 開発のレシピ」にOS毎に処理を分ける方法が載っていました。

    マクロで分岐させる方法と
    #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
    ...
    #elif (CC_TARGET_PLATFORM ==CC_PLATFORM_ANDROID)
    ...
    #endif

    実行時に分岐させる方法
    TargetPlatform platform = CCApplication::sharedApplication()->getTargetPlatform();
    if (platform == kTargetIphone || platform == kTargetIpad) {
    ...
    } else if (platform == kTargetAndroid) {
    ...
    }

    使い分けとしては、関数でできるなら関数、ヘッダで使うとき等はマクロで、とのことだけど、実行時に分岐させたいことってあるのかな?
    すぐには思いつかないな…。
    可読性が落ちるというのはわかる。




    ]]><![CDATA[ ]]>
    http://blog.tappli.com/article/87499382.html [Cocos2d-x] C++で忘れがちなこと Javaをやってた時間が長いので、よく忘れてしまうのです。staticなメンバ変数の使い方。Hoge.hclass Hoge {public: static Hoge *getInstance();private: Hoge() {}; static Hoge *instance;};Hoge.cppHoge *Hoge::getInstance() { if (!instance) { instance = new Hoge(); .. Cocos2d-x t2low 2014-02-17T22:00:00+09:00 <![CDATA[ Javaをやってた時間が長いので、よく忘れてしまうのです。
    staticなメンバ変数の使い方。

    Hoge.h
    class Hoge {
    public:
    static Hoge *getInstance();
    private:
    Hoge() {};
    static Hoge *instance;
    };

    Hoge.cpp
    Hoge *Hoge::getInstance() {
    if (!instance) {
    instance = new Hoge();
    }
    return instance;
    }

    こんなコードを書くとエラーになりますよね。
    Hoge.cppに
    Hoge *Hoge::instance;

    の1行が必要です。
    エラーが出てstaticなメンバ変数が原因だということがわかっても、毎度のようにしばらく解決できないことがあるので、今度こそ忘れないようにとメモしておきます。
    ]]><![CDATA[ ]]>
    http://blog.tappli.com/article/87083003.html [Cocos2d-x] 階層化されたCCLayerの内側からモーダルレイヤを画面の中心に表示する(改) 以前、以下のような記事を書きました。tappli blog: [Cocos2d-x] 階層化されたCCLayerの内側からモーダルレイヤを画面の中心に表示する親階層との位置を計算してモーダルレイヤを中心に表示するというものでした。今日ふと気づいたのですが、そんな面倒な計算をしなくても親階層に追加(addChild)すれば良いだけだったのでは…。CCNode *parent = this;while (parent-&gt;getParent()) { parent = .. Cocos2d-x t2low 2014-02-12T22:00:00+09:00 <![CDATA[ 以前、以下のような記事を書きました。
    tappli blog: [Cocos2d-x] 階層化されたCCLayerの内側からモーダルレイヤを画面の中心に表示する
    親階層との位置を計算してモーダルレイヤを中心に表示するというものでした。
    今日ふと気づいたのですが、そんな面倒な計算をしなくても親階層に追加(addChild)すれば良いだけだったのでは…。
    CCNode *parent = this;
    while (parent->getParent()) {
    parent = parent->getParent();
    }
    parent->addChild(modal);

    こんな感じ。
    問題なさそう。

    ]]><![CDATA[ ]]>