gpt4 book ai didi

javascript - 强制 Canvas 更新

转载 作者:搜寻专家 更新时间:2023-10-31 22:33:16 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com