Phaser - 如何检查sprite在两个其他精灵之间移动?

时间:2017-04-21 09:24:57

标签: phaser-framework

我试图检查一个精灵是否正在通过另外两个精灵之间的线路。我试图检查精灵是否与Phaser.Line重叠:

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();

并在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);
    }
},

只要我在线上移动速度很慢,这就有效,但只要事情移动得快一点,它就不会再抓住了。

有关如何检查一个精灵是否在另外两个精灵之间的线上移动的任何提示?

把它想象成两个球,标记出一个目标,第三个球在这两个球之间射击。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

我还没有过多使用Phaser.Line,所以经过一些研究,以及我在其他地方看到的情况,我可能会建议稍微改变一下。

一种选择是将目标行更改为Phaser.Sprite,然后检查overlap

或者,您可以检查矩形交叉点,如Overlap Without Physics示例中那样。

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,并检查一个交叉点。