Comments前回は、Pepperでファイルのダウンロードを行いました。今回は、cocos2d-xのタッチイベントについてのお話です。ver3.3TableViewとMenuの併用については、以下の構成を想定します。この時、タッチ開始箇所がMenu上の場合、TableViewのスクロールを行うことが出来ません。これは、タッチイベントの「優先度」と「制御設定」によって起こる問題でcocos2d-xでのタッチイベントの「優先度(Priority)」は、下記のように決まります。今回のケースで、関係しているのは3番です。図1を見ても分かるように、MenuはTableViewがもつcellの子Nodeとなるためタッチイベントが実行される順序は次のようになります。Menuタッチイベント→TableViewタッチイベントこの流れだけを見ると、タッチ開始箇所がMenuだった場合でもTableViewのスクロールが行われるように見えますが実際にはスクロールはせず、TableViewは静止したままです。理由としては、リスナーの通知制御設定です。cocos2d-xのタッチイベントリスナーにはsetSwallowTouchesという関数が用意されており指定したNodeにのみイベントを発生させる場合はtrue下のNodeにもイベントを発生させる場合はfalseを設定することで、タッチイベントの通知を制御することが出来ます。Menuクラスでは、内部でsetSwallowTouches関数にtrueを設定しておりタッチイベントがTableViewクラスに登録されているリスナーまで通知されないため下記のように設定することで、タッチ開始箇所がMenuの場合でもスクロールを可能にすることができます。}上記設定で、Menu上スクロールには対応できましたが、この状態では不完全です。スクロール後、タッチエンド時にMenu上に指があった場合、Menuに登録したタッチイベントが実行されてしまいます。一般的な挙動としては、スクロール後の一発目のエンドイベントではMenuやButtonのタッチイベントは弾きたいところです。この挙動を実現するためには、TableViewを拡張します。TableView(ScrollView)クラスでは、ドラッグフラグ用の変数が_touchMovedという名前で宣言されていますがprotectedのため、getter関数を追加します。_touchMoved;}_touchMoved用のgetter関数を追加できましたら、あとはMenuタッチイベント処理のなかで、ドラッグ判定を入れるだけとなります。return;}以上で、TableViewとMenu併用時のイベント制御についての説明は終了となります。今回の方法はフレームワークのソースコードを直接修正するオープンソースならではのやり方ですがバージョンアップの際、その都度修正しなおさなければいけないためTableViewやMenuを継承した新規クラスを作成し、それらのクラスで今回の設定するのがよいでしょう最後まで御覧いただきありがとうございました。);}弊社では全国各地の請負い(ご自宅)で作業協力頂ける、フリーランスエンジニアの方を常時探しております。ご興味ある方は、お気軽にお問い合わせ下さい。コメントをキャンセルメールアドレスが公開されることはありません。BlogFeathersFeathersHTMLJavaScript。