Форум программистов, компьютерный форум, киберфорум
JavaScript: HTML5 Canvas
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 19.08.2020
Сообщений: 2
1

Отрисовка происходит после всех задержек, как исправить?

18.03.2022, 22:55. Показов 537. Ответов 1

Author24 — интернет-сервис помощи студентам
Такая задача - надо отрисовать на канвасе несколько фигур(кругов) с заданной задержкой. Задержка работает, в лог пишет с правильной задержкой, но отрисовка происходит только после всех задержек, как исправить?
Не пишите что можно в цикл поместить, для простоты написал подряд, сути проблемы не меняет.
Код (упрощен, но основа сохранена):
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<button onclick="draw()">
<canvas id="canvas" onclick="setArc(event.clientX,event.clientY)" width="400%" height="231px"
                        style="border: 1px solid red; background-color: black;"></canvas>
<script>
    function fillCircle(x, y, radius, color) {
        canvas = document.getElementById('canvas');
        context = canvas.getContext('2d');
        context.fillStyle = color;
        context.beginPath();
        context.arc(x + radius / 2, y + radius / 2, radius / 2, 0, 2 * Math.PI);
        context.fill();
    }
    function showArc(X, Y) {
        fillCircle(X, Y, 8, "WHITE")
    }
    function Delay(ms) {
        startTime = Date.now()
        while (Date.now() - startTime < ms) {}
    }
    function draw()
    {
        showArc(100, 20)
        Delay(100)
        console.log(1)
        showArc(100, 40)
        Delay(100)
        console.log(2)
        showArc(100, 60)
        Delay(100)
        console.log(3)
        showArc(100, 80)
        Delay(100)
        console.log(4)
        showArc(100, 100)
        Delay(100)
        console.log(5)
        showArc(100, 120)
        Delay(100)
        console.log(6)
        showArc(100, 140)
        Delay(100)
        console.log(7)
        showArc(100, 160)
        Delay(100)
        console.log(8)
        showArc(100, 180)
        Delay(100)
        console.log(9)
        showArc(100, 200)
        Delay(100)
        console.log(10)
    }
</script>
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.03.2022, 22:55
Ответы с готовыми решениями:

После суммирования ячеек во всех ячейках присваиваются значение последней. Как исправить?
Sub ekz() Dim b As Integer Dim k As Integer Dim e As Integer Dim c As Integer Dim f As Integer...

Не происходит отрисовка на DC Static`а
День добрый. Столкнулся с проблемой отрисовки изображения на окне после переписывания кода с...

Не происходит отрисовка JPanel
Добрый день. Пишу игру, в которой, разумеется, должно быть игровое поле. Поле это является...

WebGL: не происходит отрисовка фигуры.
Здравствуйте. Запустил следующий код, который был предназначен для того, чтобы нарисовать на холсте...

Из-за чего происходит вылет? Как исправить?
По заданию из K&amp;R сделала программу вывода гистограммы длин слов: #include&lt;stdio.h&gt; #define...

1
0 / 0 / 0
Регистрация: 19.08.2020
Сообщений: 2
19.03.2022, 11:55  [ТС] 2
Попробовал пока передавать код строкой, но пишет
Код
Uncaught TypeError: actions[i] is undefined
    <anonymous> file:///D:/learn/DIPLOM/end_live_lection/test.html:45
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<button onclick="draw()">
<canvas id="canvas" width="200px" height="200px"
    style="border: 1px solid red; background-color: black;"></canvas>
<script>
    function fillCircle(x, y, radius, color) {
        canvas = document.getElementById('canvas');
        context = canvas.getContext('2d');
        context.fillStyle = color;
        context.beginPath();
        context.arc(x + radius / 2, y + radius / 2, radius / 2, 0, 2 * Math.PI);
        context.fill();
    }
    function Delay(ms) {
        startTime = Date.now()
        while (Date.now() - startTime < ms) {}
    }
    function draw()
    {
        setTimeout("fillCircle(50,20,8,'WHITE')",100)
        setTimeout("fillCircle(50,40,8,'WHITE')",300)
        setTimeout("fillCircle(50,60,8,'WHITE')",500)
        setTimeout("fillCircle(50,80,8,'WHITE')",700)
        setTimeout("fillCircle(50,100,8,'WHITE')",900)
        setTimeout("fillCircle(50,120,8,'WHITE')",1100)
        setTimeout("fillCircle(50,140,8,'WHITE')",1400)
        actions = []
        for (i = 0; i < 10; i++)
        {
            action = {
                x: Math.random()*100+70,
                y: Math.random()*100,
                time: i*500,
                type: "Arc"
            }
            actions.push(action)
        }
        for (i = 0; i < actions.length; i++)
        {
            //fn = function() {fillCircle(actions[i].x, actions[i].y,8,'WHITE'); console.log(actions[i].time - actions[0].time)}
            if (i > 0)
            {
                delay = actions[i].time - actions[0].time
                //setTimeout(fn(), delay)
                //setTimeout("fillCircle(Math.random()*50,140,8,'WHITE')", delay)
                setTimeout("fillCircle(actions[i].x,actions[i].y,8,'WHITE')", delay)
            }
            else fillCircle(actions[i].x,actions[i].y,8,'WHITE')
        }
    }
</script>
0
19.03.2022, 11:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.03.2022, 11:55
Помогаю со студенческими работами здесь

Не происходит отрисовка пользовательского контрола при загрузке формы
using System; using System.Collections.Generic; using System.ComponentModel; using...

Отрисовка ListBox: при нажатии на элемент не происходит выделение
почему при нажатии на элемент ListBox'a не происходит выделение? procedure...

Не происходит автоматическая отрисовка при выводе JPanel на экран
В общем у меня дилемма:. Есть класс DrawCos, который наследуется от JPanel и отрисовывает...

Почему если n>29 происходит зависание потоков,как исправить ?
#include &lt;windows.h&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt; #include &lt;dos.h&gt; #include &lt;iostream&gt;...

Игра пинг-понг: отрисовка происходит там, где не должна
Написал отрисовку кадра в консоль и управление объектами. Начал тестировать многопоточность и в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru