Обработка rect () вызывает рисование изображения вместо прямоугольника? - PullRequest
0 голосов
/ 23 мая 2019

В моей игре бродят враги, их метод draw() прост:

core.displayBuffer - это объект PGraphics, который рисуется на экране в конце draw().

        if(facingRight) {
            core.displayBuffer.image(image,
                    x, y + offsetY, 80, 80);
        } else {
            float tX = -core.camera.x+core.game.width/2f + x;
            float tY = -core.camera.y+core.game.height/2f+ y;

            core.displayBuffer.pushMatrix();

            core.displayBuffer.translate(core.camera.x-core.game.width/2f,
                    core.camera.y-core.game.height/2f);
            core.displayBuffer.translate(tX, tY);
            core.displayBuffer.scale(-1, 1);

            core.displayBuffer.image(image,
                    -80, offsetY, 80, 80);

            core.displayBuffer.popMatrix();
        }

Затем, когда мы собираемся рисовать стены, мы просто рисуем цветной прямоугольник, подобный этому:

    core.displayBuffer.noStroke();

    if(destroyed) {
        core.displayBuffer.fill(0, 0, 0, 16);
        core.displayBuffer.rect(x, y, w, h);
    } else {
        core.displayBuffer.fill(64);
        core.displayBuffer.rect(x, y - WALL_HEIGHT, w, h);
        core.displayBuffer.fill(32);
        core.displayBuffer.rect(x, y + h - WALL_HEIGHT, w, WALL_HEIGHT);
    }

Но по какой причине стены имеют текстуру врагов? Вот цикл, в котором нарисованы объекты:

    PMatrix displayMatrix = displayBuffer.getMatrix();
    PMatrix bloomMatrix = bloomLayer.getMatrix();
    PStyle displayStyle = displayBuffer.getStyle();
    PStyle bloomStyle = bloomLayer.getStyle();

    onScreenObjects.forEach(o -> {
        displayBuffer.setMatrix(displayMatrix);
        bloomLayer.setMatrix(bloomMatrix);
        displayBuffer.style(displayStyle);
        bloomLayer.style(bloomStyle);
        o.draw(this);
    });

    displayBuffer.setMatrix(displayMatrix);
    bloomLayer.setMatrix(bloomMatrix);
    displayBuffer.style(displayStyle);
    bloomLayer.style(bloomStyle);

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

Result

Исходный код проекта: https://github.com/Matrx007/TheLostBits

Запросить дополнительную информацию, если необходимо!


Nvidia Quadro 4000. Драйвер видеокарты с 2016 года, не может его обновить, все остальные игры работают нормально. Версия обработки: 3.5.3 (библиотека) Операционная система и версия ОС: Windows 10 build 17134

Возможные причины / решения: Может быть, image() манипулирует текущей используемой текстурой, а rect() использует текстуру?


решаемые

Решение состояло в том, что Обработка не может рисовать более чем одну PGraphics одновременно Я вызвал метод beginDraw () для двух PGraphics, и я рисовал на них обоих одновременно, теперь я разделил их, и ошибка исчезла! Лучшее объяснение здесь: https://github.com/processing/processing/issues/5863

...