首页 > 解决方案 > 具有非矩形轮廓的静态和可移动对象之间的碰撞问题

问题描述

作为工作的一部分,我被告知要在移相器中构建一个小游戏,我必须使用鼠标在场景中的一些静态对象上拖放一些对象,并确定是否在匹配的静态对象上完成了拖放。静态和非静态对象都有非矩形边界,所以我使用物理编辑器绘制它们的边界并将它们导入 Phaser。为了在拖动对象时检测碰撞,我对“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;
                }
            });

标签: phaser-framework

解决方案


推荐阅读