有没有办法强制 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/