我正在尝试检查一个精灵是否通过了其他两个精灵之间的界限。我试图检查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
到当前位置,然后检查一个交叉点。