移相器 - 如何检查其他两个精灵之间移动的精灵



我正在尝试检查一个精灵是否通过了其他两个精灵之间的界限。我试图检查Sprite是否重叠一个相位器。

this.lineGreenToRed = new Phaser.Line(this.ballGreen.x, this.ballGreen.y, this.ballRed.x, this.ballRed.y);
this.checkPassed = this.lineGreenToRed.pointOnLine(this.ballBlue.position.x, this.ballBlue.position.y);
if (this.checkPassed) {
    console.log('GreenToRed passed');
    //counter++;
};
console.log(this.checkPassed);

查看控制台时,每当我的精灵不在/越过线上时,都会计算错误事件。在线上移动有时会给我带来真实的事件,但并非总是如此。看起来这些帧变化太快了,无法检测到它。重叠似乎是不可能的。

我也尝试了:

this.GreenToRedArray = this.lineGreenToRed.coordinatesOnLine();

和in Update((:

this.GreenToRedArray.forEach(this.checkPoint, this);

,然后:

checkPoint : function(element){
      if (this.ballBlue.position.x == element[0] && this.ballBlue.position.y == element[1]){
        console.log('GreenToRed passed');
        this.score++;
        console.log(this.score);
        this.scoreText.setText(this.score);
    }
},

只要我在线路上移动很慢,就可以起作用,但是只要事情移动得更快,它就不会抓住它了。

我如何检查一个精灵是否在其他两个精灵之间的线上移动?

将其视为两个球,标记了一个进球,第三个球正在通过这两个球之间射击。

非常感谢您的任何帮助。

我没有太多使用Phaser.Line S,所以经过一些研究,从我其他地方看到的内容,我可能建议您稍有不同。

一个选项是将目标线更改为Phaser.Sprite,然后检查overlap

另外,您可以检查矩形交叉点,例如在没有物理示例的重叠中。

function update() {
    if (checkOverlap(this.ballBlue, this.goal)) {
        console.log('overlapping');
    }
}
function checkOverlap(spriteA, spriteB) {
    var boundsA = spriteA.getBounds();
    var boundsB = spriteB.getBounds();
    return Phaser.Rectangle.intersects(boundsA, boundsB);
}

可以进行调整,因此,如果您不想使用精灵,则可以使用Phaser.Rectangle而不是Phaser.Line,相应地更改功能。

我想您还可以从球的先前位置绘制另一个Phaser.Line到当前位置,然后检查一个交叉点。

最新更新