2

私の単純なプロジェクトでは、タッチ イベントを使用してボタンの状態を変更します。この場合、すべて正常に動作します。

cc.eventManager.addListener(
{
    event: cc.EventListener.TOUCH_ALL_AT_ONCE,
    swallowTouches: false,
    onTouchesBegan: onTouchesBegan,
    onTouchesEnded: onTouchesEnded
}, this);

しかし、この場合、私の onTouchEnded 関数は一度も呼び出されていません:

cc.eventManager.addListener(
{
    event: cc.EventListener.TOUCH_ONE_BY_ONE,
    swallowTouches: false,
    onTouchBegan: onTouchBegan,
    onTouchEnded: onTouchEnded
}, this);

デバッグをしばらく行った後、cc.eventManager._onTouchEventCallback 関数で「if」ステートメントを見つけました。

} else if (listener._claimedTouches.length > 0
    && ((removedIdx = listener._claimedTouches.indexOf(selTouch)) != -1))
{

私の場合、 "listener._claimedTouches" == 0 であり、if ステートメントは onTouchMove および onTouchEnded リスナーの呼び出しを拒否します。

なぜ「listener._claimedTouches」== 0なのか、なぜそのようなことが起こったのか、誰にも分かりますか?

4

1 に答える 1

6

「return true;」を追加する必要があります。onTouchBegan の最後にあるステートメント。onTouchBegan が true を返すと、onTouchEnd がトリガーされます。

var listener = cc.EventListener.create({
    event:cc.EventListener.TOUCH_ONE_BY_ONE,
    swallowTouches:false,
    onTouchBegan: function(touch, event) {
        return true;
    },
    onTouchEnded: function(touch, event) {
        //do sth.
    }
});
cc.eventManager.addListener(listener, this);
于 2015-10-26T10:27:08.120 に答える