Запуск слишком большого количества событий при добавлении слушателя к моим спрайтам

Я пытаюсь создать базовый пример Cocos2d-js с кучей шаров, которые я могу щелкнуть, чтобы переместить. Я делаю шары так:

        var listener = cc.EventListener.create({
            event: cc.EventListener.TOUCH_ONE_BY_ONE,
            swallowTouches: false,
            onTouchBegan: ballTouchBeganEventHandler
        });

        var BallTile = cc.Sprite.extend({
            ctor: function(image, position)
            {
                this._super();
                var ballSize = g_settings.ballSize;
                this.initWithFile(image, cc.rect(0, 0, ballSize, ballSize));
                this.setPosition(position);
                cc.eventManager.addListener(listener.clone(), this);
            }
        });

        var ball1 = new BallTile(ballImage1, ballPosition1);
        var ball2 = new BallTile(ballImage2, ballPosition2);
        var ball3 = new BallTile(ballImage3, ballPosition3);

Проблема в том, что независимо от того, какой из шаров я нажимаю, событие запускается три раза (один раз для каждого шара), а не только один раз для шара, по которому щелкнули. Я использую один и тот же прослушиватель событий для каждого мяча, но я бы предположил, что он сработает только один раз для мяча, по которому на самом деле нажали, а не один раз для каждого мяча, имеющего прослушиватель событий.

Что мне не хватает?


person Maffelu    schedule 19.10.2015    source источник
comment
Что произойдет, если вы установите swallowTouches в true, а затем обязательно вернете true из ballTouchBeganEventHandler?   -  person Anders Carstensen    schedule 19.10.2015
comment
@AndersKellerCarstensen: вот и все. Пожалуйста, добавьте это как ответ, и я по праву награжу вас зеленым чеком :)   -  person Maffelu    schedule 19.10.2015


Ответы (1)


Попробуйте установить swallowTouches в true, а затем обязательно вернуть true из ballTouchBeganEventHandler.

person Anders Carstensen    schedule 19.10.2015