javascript - 清除 Canvas 后不绘制图像(html5 Canvas )

标签 javascript canvas

我正在尝试使用 javascript 制作 boomshine 游戏的变体,当我使用 arc 函数绘制圆形时一切正常。但是,当我尝试用 drawImage 函数替换 arc 函数以使用硬币图像而不是圆形时,当我清除 Canvas 以删除之前绘制的圆形时,我开始遇到问题。如果我在渲染图像之前不清除 Canvas ,则图像将绘制在 Canvas 上,但旧图像仍在 Canvas 上。但是当我在再次渲染图像之前清除 Canvas 时, Canvas 上什么也没有绘制。

我已经包含了屏幕截图,链接在下面。

这就是我清除 Canvas 的方式:

var ctx = game.context;
ctx.fillStyle = "darkgray";
ctx.fillRect(0, 0, game.canvas.width, game.canvas.height);

这是我绘制图像的方式:

function drawImageBall(x,y,radius,startAngle,color)
{
var img = document.createElement('img');
img.src = 'img/coin-icon.png';

var tmpCtx= game.context;
var ax = x-radius;
var ay = y-radius;

img.onload = function() {
    tmpCtx.save();
    tmpCtx.beginPath();
    tmpCtx.arc(x, y, radius, 0, Math.PI * 2, true);
    tmpCtx.closePath();
    tmpCtx.clip();

    tmpCtx.drawImage(img, ax, ay, img.width, img.height);

    tmpCtx.beginPath();
    tmpCtx.arc(0, 0, radius, 0, Math.PI * 2, true);
    tmpCtx.clip();
    tmpCtx.closePath();
    tmpCtx.restore();
};
}

Clearing canvas (screenshot) Without clearing canvas (screenshot)

最佳答案

请记住,下载 img 需要一些时间。

在下载期间,Javascript 不会停止(!)。相反,JS 将继续执行任何后续代码。这会导致您出现意想不到的问题。

因此在您的应用启动时只下载一次 img。这样您的 drawImage 就会按照您期望的顺序完成,因为在下载图像时不会有延迟。

关于javascript - 清除 Canvas 后不绘制图像(html5 Canvas ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36897057/

相关文章:

javascript - 从ajax数据设置App

javascript - 如何向 Canvas 元素添加 onClick 事件处理程序并控制鼠标移动操作?

html - Canvas ,负坐标 : Is it bad to draw paths that start off canvas, 并继续?

javascript - HTML5 Canvas 和 JS 帧率慢慢降至 0

javascript - 使用 setTimeout() 检查 JSON 文件中的更改

javascript - javascript中的smarty变量

javascript - 如何停止执行yii2页面上的所有js?

javascript - 在谷歌应用程序脚本中解析 html 的最佳方法是什么

javascript - 在 iOS Swift 中处理 Javascript 文件下载

javascript - 水平滚动 Canvas