我正在用Javascript制作一个游戏,玩家试图收集硬币。当前,两者都是具有不同尺寸的rect(),我正在尝试加入一个函数,在玩家得到硬币时向用户发出提示。目前,这是我关于玩家与硬币碰撞检测的代码。
isTouching(player) {
return player.x + player.width > this.x &&
this.x + this.width > player.x &&
player.y + player.height > this.y &&
this.y + this.height > player.y;
}
然而,当我遍历我的硬币数组并检查碰撞时,什么也没发生。这是为什么?以下是与此相关的代码:
for (let x = 0; x < 5; x ++) { coins[x].collisions(); }
和...
collisions() {
if (this.isTouching(player)) {
alert("you got a coin!");
}
}
我的硬币和玩家都有自己的类,我的硬币存储在一个数组中。
let player;
let coins = [];
player = new Player();
for (let x = 0; x < 5; x ++) { coins.push(new Coin()); }
即使玩家触碰到金币,也没有警报。我该如何解决这个问题?
附言:我知道有很多库可以检查矩形之间的碰撞,但是我想利用自己的函数来检查碰撞。请告诉我是否需要更改我的碰撞检测系统,以及如何更改。
此外,如果我的代码不清楚,这里有一个包含程序代码的.zip文件(下载链接):https://www.mediafire.com/file/00rz1ta5s55rvzf/game.zip/file 编辑:有评论建议我使用库来检查碰撞,但从技术上讲我不允许这样做,但出于测试目的,我尝试了一下。我导入了bmoren的p5.collide2D库,这在过去对我有效,并使用了以下代码。然而,问题仍然存在,对象之间的碰撞根本没有被检测到。
利用库的新代码:
if (this.touched()) {
alert("you got a coin!");
}
touched() {
return collideRectRect(this.x, this.y, this.width, this.height, player.x, player.y, player.width, player.height);
}