我正在制作一个小画布游戏,并添加一些玩家可以收集的道具。这是我用来使它们出现的方法:
thePowerUps.forEach ( function(t)
{
c.beginPath();
c.save();
c.translate(t.x,t.y);
c.fillStyle = t.fill;
c.moveTo(t.x - 15, t.y - 15);
c.lineTo(t.x + 15, t.y - 15);
c.lineTo(t.x + 15, t.y + 15);
c.lineTo(t.x - 15, t.y + 15);
c.lineTo(t.x - 15, t.y - 15);
c.fill();
c.restore();
c.closePath();
});
所以我正在循环绘制每个电源阵列。在我的测试用例中,tx 和 ty 都是 200。但是这段代码在 400、400 位置绘制了 power up。我控制台记录了 power ups 数组,它为 x 和 y 返回了 200。如果我将玩家角色移动到坐标 200,200 上,则在 400,400 处绘制的加电消失并且加电代码执行。
因此,出于所有功能目的,它位于正确的位置。它只是没有出现在那里。然而玩家、坏人和子弹都在正确的坐标中。
我试过这样做;
c.beginPath();
c.save();
c.translate(150,150);
c.fillStyle = 'orange';
c.moveTo(150 - 15, 150 - 15);
c.lineTo(150 + 15, 150 - 15);
c.lineTo(150 + 15, 150 + 15);
c.lineTo(150 - 15, 150 + 15);
c.lineTo(150 - 15, 150 - 15);
c.fill();
c.restore();
c.closePath();
一个“静态”框,无需查找数组中的值。这也绘制了错误的位置(在本例中为 300,300)。我尝试将它放在游戏循环中的不同位置(包括正确绘制部分的代码之前和之后)。没有效果。
这是僵尸坏人的代码,它们绘制在正确的位置:
c.beginPath();
c.save();
c.translate(i.x,i.y);
zomAngle = getZomAngle(i.x, i.y);
if (Player1.x - i.x < 0) {
c.rotate(zomAngle);
}
else {
c.rotate(zomAngle);
c.scale(-1,1);
}
c.translate(-i.x,-i.y);
c.fillStyle = i.fill;
c.moveTo(i.x - 18, i.y);
c.lineTo(i.x + 18, i.y + 15);
c.lineTo(i.x + 18, i.y - 15);
c.lineTo(i.x - 18, i.y);
c.fill();
c.restore();
c.closePath();
正如你所看到的,这基本上是一样的,除了坏人有一个轮换来让他们面对玩家。我尝试将它添加到加电中,但它没有任何效果——它们仍然会通过行走超过 200,200 来触发,无论它们实际上是在哪里绘制的。
有任何想法吗?