В моей игре бродят враги, их метод 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()
делает что-то странное на заднем плане?
Исходный код проекта: 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