javascript - 强制 Canvas 更新

标签 javascript html canvas

有没有办法强制 Canvas 更新?我想显示加载消息,但游戏在显示之前锁定了加载。我觉得我需要在调用加载函数之前告诉 Canvas “立即绘制”,但也许还有另一种方法......

编辑:

好吧,为了清楚起见,我写了一个非常小的肮脏脚本(我在茶歇时能做的最好的事情:P)来展示我正在努力克服的事情。这里:

<html>
<head>
    <title>test page</title>
</head>

<body onload="init();">
    <canvas id="cnv" width="300" height="300">
        canvas not supported.<br/>
    </canvas>
</body>
</html>

<script type="text/javascript">  

    var ctx;

        function init()
    {
        var canvas = document.getElementById('cnv');
        ctx = canvas.getContext('2d');

        ctx.fillStyle = "rgb(255, 0, 0)";
        ctx.fillRect(0,0,300,300);

        FakeLoad();

        ctx.fillStyle = "rgb(0, 255, 0)";
        ctx.fillRect(0,0,300,300);
    }

    function FakeLoad()
    {
        var d = new Date();
        var start = d.getTime();

        while (new Date().getTime() - start < 5000)
        {
            //emulate 5 secs of loading time
        }
    }
</script>

现在的想法是脚本应该绘制一个红色方 block 来显示它的“正在加载”,并在完成时绘制一个绿色方 block 。但是,如果将其复制到 html 文件中,您将看到的只是暂停 5 秒,然后出现绿色,而不是红色。在我的脑海里,我想要一些像 ctx.Refresh(); 这样的命令。在我画出绿色方 block 告诉它“立即更新!不要等待!”之后但从回复来看,这不是解决问题的方法。

我该怎么办? :)

最佳答案

在执行较长的任务之前,您可以做的另一件事是允许 Canvas 显示,即在短暂的超时后开始 FakeLoad:

    var canvas = document.getElementById('cnv');
    ctx = canvas.getContext('2d');

    ctx.fillStyle = "rgb(255, 0, 0)";
    ctx.fillRect(0,0,300,300);

    setTimeout(function() {
      FakeLoad();

      ctx.fillStyle = "rgb(0, 255, 0)";
      ctx.fillRect(0,0,300,300);
    }, 20); // 20 ms - should be enough to draw something simple

关于javascript - 强制 Canvas 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10597827/

相关文章:

javascript - 打字游戏——希望输入的所有字母都是小写

javascript - 更新 WordPress 帖子元而不刷新页面

javascript - 如何将 json 文件中的数据获取到 angularjs 指令函数中?

javascript - 在 Canvas 上交换图像会占用内存

facebook - 创建 Canvas 后没有 'Add to my Page' 的菜单?

javascript - 如何从保存在数组中的元素中更改某个值?

javascript - 如何向jsf标签graphicImage添加多个事件

HTML/CSS如何使元素对一个元素透明但覆盖另一个元素

javascript - 识别点击的链接并将 id 传递给函数

HTML/CSS (Bootstrap) - 为什么我的文本没有居中?