3 / 3 / 0
Регистрация: 08.06.2013
Сообщений: 212
1

Пишу игру-арканоид на канвасе js. Когда мячик сбил все кирпичи, надо вывести сообщение "YOU WON!'

12.05.2023, 16:32. Показов 900. Ответов 6

Author24 — интернет-сервис помощи студентам
Алерт срабатывает раньше времени, когда bricks.length = 1. Но если заключить его в setTimeout, всё работает корректно. Почему так происходит? Заранее спасибо
Javascript
1
2
3
4
5
6
7
8
if (! bricks.length) {
                context.fillStyle = 'blue'
                context.fillRect(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT)
                window.setTimeout(() => {
                    alert('YOU WON!!!')
                    window.location.reload()
                })
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.05.2023, 16:32
Ответы с готовыми решениями:

Арканоид,кирпичи разных уровней
Привет, делаю арканоид, пытаюсь сделать кирпичи 2-го уровня т.е кирпич должен уничтожаться только в...

надо решить задачу: a*b=x,надо вывести х, а когда a и b равны 0, то написать что корней множество, а когда a или b равен 0, то вывести что корней нет
Здравствуйте господа... У меня вот такая проблема, на завтра надо решить задачу: a*b=x,надо вывести...

Игра-арканоид в канвасе на React. Почему скорость мяча меняется в зависимости от состояния платформы?
Если платформа неподвижна, мячик двигается медленно (со скоростью, меньшей скорости платформы). ...

Когда запускаю игру в юнити все хорошо а когда портировал на андроид и нажимаю на кнопки запускается игра!
Когда запускаю игру в юнити все хорошо а когда портировал на андроид и нажимаю на кнопки...

6
2977 / 1150 / 314
Регистрация: 14.03.2022
Сообщений: 2,813
12.05.2023, 17:03 2
Цитата Сообщение от хгаля Посмотреть сообщение
Алерт срабатывает раньше времени, когда bricks.length = 1
А как же твое условие?
Цитата Сообщение от хгаля Посмотреть сообщение
Javascript
1
if (! bricks.length)
Оно не сработает при
Javascript
1
bricks.length = 1
1
3 / 3 / 0
Регистрация: 08.06.2013
Сообщений: 212
22.05.2023, 09:56  [ТС] 3
Вот именно. Но почему-т срабатывает
0
2977 / 1150 / 314
Регистрация: 14.03.2022
Сообщений: 2,813
22.05.2023, 10:50 4
Цитата Сообщение от хгаля Посмотреть сообщение
Но почему-т срабатывает
Значит на момент проверки условия bricks.length != 0...
Кто такой этот bricks?

Предположу (это ведь ветка про Реакт) что это некий стейт... Чуть выше ты его обновил и сразу проверяешь на его длину...
Но не учитываешь что обновление стейта асинхронное действо и собственно обновление произойдет "не сейчас", а "потом".
1
Модератор
Эксперт JS
5197 / 2079 / 406
Регистрация: 06.01.2013
Сообщений: 4,794
23.05.2023, 04:43 5
Цитата Сообщение от хгаля Посмотреть сообщение
Алерт срабатывает раньше времени, когда bricks.length = 1
А как вы это понимаете? По рисунку на канвасе? Он не обновляется, например, по дефолту, в Chrome 113 до завершения текущего контекста выполнения, который блокируется alert.

Демо такого поведения: https://codepen.io/eva-rosalene/pen/XWxoQod

Добавлено через 39 секунд
Причина этого, кажется, в атрибуте desynchronized, но я не уверена, и поменять это поведение мне не удалось.
1
3 / 3 / 0
Регистрация: 08.06.2013
Сообщений: 212
24.05.2023, 13:08  [ТС] 6
Мне тоже не удалось.
0
5158 / 2770 / 465
Регистрация: 05.10.2013
Сообщений: 7,321
Записей в блоге: 147
27.05.2023, 12:22 7
На сайте с документацией (MDN Web Docs) есть пошаговая инструкция по Арканойд с переводом на русский: 2D игра на чистом JavaScript. В ней есть раздел Отображение сообщения о победе, когда все кирпичи были уничтожены

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function collisionDetection() {
    for(var c=0; c<brickColumnCount; c++) {
        for(var r=0; r<brickRowCount; r++) {
            var b = bricks[c][r];
            if(b.status == 1) {
                if(x > b.x && x < b.x+brickWidth && y > b.y && y < b.y+brickHeight) {
                    dy = -dy;
                    b.status = 0;
                    score++;
                    if(score == brickRowCount*brickColumnCount) {
                        alert("YOU WIN, CONGRATULATIONS!");
                        document.location.reload();
                    }
                }
            }
        }
    }
}
1
27.05.2023, 12:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.05.2023, 12:22
Помогаю со студенческими работами здесь

не пойму причину загрузки цп на 98%, когда просто сижу за копьютером всё норм,стоит мне запустить игру,так всё
Уже 2 месяца не пойму причину загрузки цп на 98%, когда просто сижу за копьютером всё норм,стоит...

Создать игру арканоид на C# с спрайтами
Очень нужна помощь не могу разобраться как создать классы для игры арканоид. Как через классы...

Как добавить функцию выигрыша в игру Арканоид?
from tkinter import * import time import random class Ball: def __init__(self, canvas,...

Пишу программу которая меняет в тексте ( Panel) цвет,шрифт,размер написал все как надо выдает ошибку
Как исправить эту ошибку нужно ввести что то в var? Incompatible types Tcolor and strings ...

Вывести слово, когда надо будет
Как вывести слово, которое можно будет вывести везде и всегда. Надо что бы можно было это слово...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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