Проблема со столкновениями между статическими и подвижными объектами с непрямоугольным контуром

#phaser-framework

#phaser-фреймворк

Вопрос:

В рамках работы мне сказали создать небольшую игру в phaser, в которой я должен перетаскивать некоторые объекты с помощью мыши на некоторые статические объекты в сцене и определять, было ли выполнено удаление соответствующего статического объекта. Все статические и нестатические объекты имеют непрямоугольные границы, поэтому я использовал редактор физики, чтобы нарисовать их границы и импортировать их в Phaser. Чтобы обнаружить столкновения при перетаскивании объекта, я использую обратные вызовы matter для ‘collisionstart’ и ‘collisionend’. Скажем, например, я пытаюсь перетащить яблоко на дерево, как только тело яблока сталкивается с контуром дерева, срабатывает «collisionstart», но когда я перемещаю яблоко внутри границы дерева, «collisionstart» и «collisionend» срабатывают несколько раз. Таким образом, это кажется ненадежным способом обнаружения перекрытия между двумя объектами.

Код столкновения:

             var canDrag = this.matter.world.nextGroup();
            currentObject = this.matter.add.image(360, 360, 'Carrot', 0, { chamfer: 16 }).setCollisionGroup(canDrag);
            currentObject.body.label = 'Carrot';
            this.matter.add.mouseSpring({ collisionFilter: { group: canDrag } });

            this.matter.world.on('collisionstart', function (event, bodyA, bodyB)
            {
                if ((bodyA.parent.label == 'Tree') || (bodyB.parent.label == 'Tree')) {
                    tree.tint = tintColor;
                }
            });
            this.matter.world.on('collisionend', function (event, bodyA, bodyB)
            {
                if ((bodyA.parent.label == 'Tree') || (bodyB.parent.label == 'Tree')) {
                    tree.tint = normalColor;
                }
            });
 

Комментарии:

1. Привет, Jasmeet! Можете ли вы предоставить свой объект конфигурации Phaser, а также код для ваших событий столкновения? Также было бы полезно использовать codepen, иллюстрирующий вашу проблему. Нам будет намного легче помочь вам, если мы сможем точно увидеть, что происходит не так.

2. Моя конфигурация: экспорт по умолчанию { тип: Фазер. АВТО, масштабирование: { режим: Фазер. Масштаб. ПОДГОНКА, автоцентр: Фазер. Масштаб. CENTER_BOTH, ширина: 720, высота: 720 }, физика: { по умолчанию: «материя», материя: { гравитация: { x: 0, y: 0 }, debug: true } } };

3. Когда я перетаскиваю currentobject по дереву, он окрашивается, а затем теряет свой оттенок из-за запуска «collisionend», хотя мой объект находится внутри границы дерева.