Не могу изменить цвет context.FillStyle, используя If else? - PullRequest
0 голосов
/ 02 февраля 2020

Я создаю игру Tetris и у меня возникают проблемы с пониманием того, почему следующий код не работает ..

function createPeice(type) {
    if (type === "T"){
     context.fillStyle = "red";
        return [
            [0, 0, 0],
            [1, 1, 1],
            [0, 1, 0],
        ];

Все остальные мои кусочки синего цвета через этот код в моей основной матричной функции .. .

context.fillStyle = "blue";
        context.fillRect(x + offset.x,
             y +offset.y, 1,1);

Как видите, я пытаюсь изменить цвет каждой части в зависимости от того, какая часть создана. Я ожидал, что это сработает, но по какой-то причине он не меняет цвет (но также не нарушает программу).

Одна вещь, на которую я обратил внимание, - это возможность использовать оригинальный context.fillStyle = [ «красный», «синий», «желтый»], чтобы выбрать случайный цвет из массива каждый раз, когда кусок упал, но у меня ничего не получилось.

Любые советы о том, как заставить это работать, и лучше все же, может кто-нибудь объяснить мне, почему мой if-else не работает?

Ответы [ 2 ]

0 голосов
/ 04 февраля 2020

Вы не предоставили достаточно информации, чтобы понять, почему ваша программа не работает должным образом. Задавая вопрос, вы должны предоставить нам достаточно информации, чтобы воспроизвести проблему.

Вторая часть вопроса. Выбрать случайный элемент из массива очень просто. Следующая функция сделает это.

function randomItem(array) {
    return array[Math.random() * array.length | 0];
}

Или для очень длинных массивов

function randomItem(array) {
    return array[Math.floor(Math.random() * array.length)];
}

Использование

const COLORS = ["#F00", "#0A0", "#00F"];  // Define once

const myColor = randomItem(COLORS);
0 голосов
/ 02 февраля 2020

В этом ответе есть небольшая догадка, потому что вы потенциально пропускаете другие вещи, которые происходят между ...fillStyle = "red"; и drawRect, но:

Он не заполнен красным, потому что вы установили заливку цвет на синий прямо перед нанесением. Вот как работает контекст 2D-рисования на холсте - он «немедленный». Настройка fillStyle будет принимать много разных значений во всей программе, но это значение, установленное при каждом вызове чертежа, которое используется.


context.fillStyle = ["red", " синий "," желтый "], чтобы выбрать случайный цвет

https://html.spec.whatwg.org/multipage/canvas.html#dom -context-2d-fillstyle-dev Из атрибута c, атрибут fillStyle «понимает» строки CSS цветов, градиентов и узоров. Идея установить его в массив, чтобы рендерер выбирал один случайно, на данный момент, является чистой фантазией. Я бы сказал, что хорошо, что он потерпел неудачу - не для того, чтобы аплодировать отсутствию функций и плевать на воображение, но чтобы отпраздновать платформу, имеющую подробную документацию и спецификации, которые охватывают все, что разработчики сделали потрудились запрограммировать. 1019 *

...