Javascript Canvas的clearRect方法问题

标签 javascript canvas html5-canvas

我在游戏敌人和玩家中有 2 个球,每当我想更改坐标时,我都会清除玩家矩形,但由于某些原因敌人消失了。有人有一些建议该怎么做吗?也许是因为我在使函数 moveleft moveright 时做错了。如果您还发现代码有问题,请提供提示。

var c = document.getElementById('myCanvas');
var ctx = c.getContext('2d');
var Player1 = {
  x: 150,
  y: 70,
  velX: 20,
  velY: 12,
  hp: 20,
  startAngle: 40,
};
var Enemy = {
  x: 200,
  y: 150,
  velX: 12,
  velY: 12,
  hp: 20,
  startAngle: 40,
};

function drawPlayer1() {
  ctx.fillStyle = "red";
  ctx.beginPath();
  ctx.arc(Player1.x, Player1.y, Player1.startAngle, 0, 2 * Math.PI);
  ctx.fill();
}

function drawEnemy() {
  ctx.fillStyle = "blue";
  ctx.beginPath();
  ctx.arc(Enemy.x, Enemy.y, Enemy.startAngle, 0, 2 * Math.PI);
  ctx.fill();
}

function move(event) {
  // the event.keyCode is Deprecated, use event.code or event.key
  if (event.keyCode == '39' || event.key === ' ') {

    if (Player1.x < c.width - Player1.startAngle) {
      updatePositionRight();
    }
  }
  if (event.keyCode == '37' || event.key == ' ') {

    if (Player1.x > 0 + Player1.startAngle) {
      updatePositionLeft();
    }

  }
  if (event.keyCode == '38' || event.key == ' ') {
    if (Player1.y > 0 + Player1.startAngle) {
      updatePositionUp();
    }

  }
  if (event.keyCode == '40' || event.key == ' ') {

    if (Player1.y < c.height - Player1.startAngle) {
      updatePositionDown();
    }
  }
}

function updatePositionRight() {

  // update Player1's property
  Player1.x += Player1.velX;

  // erase the canva
  ctx.clearRect(0, 0, c.width, c.height);

  // redraw Player1
  drawPlayer1();
}

function updatePositionLeft() {

  // update Player1's property
  Player1.x -= Player1.velX;

  // erase the canvas
  ctx.clearRect(0, 0, c.width, c.height);

  // redraw Player1
  drawPlayer1();
}

function updatePositionDown() {

  // update Player1's property
  Player1.y += Player1.velY;

  // erase the canvas
  ctx.clearRect(0, 0, c.width, c.height);

  // redraw Player1
  drawPlayer1();
}

function updatePositionUp() {

  // update Player1's property
  Player1.y -= Player1.velY;

  // erase the canvas
  ctx.clearRect(0, 0, c.width, c.height);

  // redraw Player1
  drawPlayer1();
}
// bind event
window.addEventListener('keydown', move, false);
// initialize
function drawEntities() {
  drawPlayer1();
  drawEnemy();
}
drawEntities();
<canvas id="myCanvas" width="600" height="600" style="border:1px solid black"></canvas>

最佳答案

您还需要使用每个 updatePositionXXX 函数重新绘制您的敌人。目前,只有 player1clearRect 调用后重绘。

关于Javascript Canvas的clearRect方法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46291482/

相关文章:

javascript - 需要帮助使用 Javascript 设置表格高度中的 div

javascript - React-router-dom v6 仅渲染默认路由

javascript - 计算窗口宽度减去精确的像素数

javascript - 使用 ExtJS 自定义 div 标签上的类属性

javascript - Canvas 响应 - Fabricjs

javascript - 我如何处理我的 HTML5 Canvas 中的许多图像?

text - 如何在给定右下角 x,y 的 html-5 Canvas 上绘制文本

javascript - 我可以使用 jQuery 和外部 JSON 数据以编程方式绘制 HTML5 Canvas x/y 点吗?

javascript - 当用户滚动时在 map 上绘制圆圈

javascript - 清除整个转换后的 HTML5 Canvas,同时保留上下文转换