Синяя полоса "пробел" прямо в переходный период, показанный здесь. По сути, я рисую каждую строку 1 и 0 с таймером, который работает хорошо, пока не достигнет конца кадра, и в этот момент я сдвигаю все предыдущие рисунки на одну строку и рисую следующую строку, чтобы она выглядела какэто прокрутка вниз.Я делаю это с вложенными изображениями между двумя BufferImages.Однако прямо в переходный период на фоне изображения, на которое я копирую, рисуется синяя полоса шириной около пикселя, как будто она не рисует первую строку новых данных.После этого он ведет себя так, как мне хотелось бы.
Мой код довольно уродлив от отладки, чтобы добраться до этой точки.Ранее он просто рисовал один и тот же ряд снова и снова, создавая вертикальные линии.
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(oldim, 0, 0, this);
}
public void addCell() {
int size = 1;
int shiftd = rac.getGen() - oldim.getHeight() > 0 ? rac.getGen() - panheight : 0;
int shiftl = rac.getNumCells() - panwidth > 0 ? rac.getNumCells() - panwidth : 0;
if (rac.getGen() - oldim.getHeight() > 0) {
Graphics2D g2 = newim.createGraphics();
g2.drawImage(oldim.getSubimage(0, 1, oldim.getWidth(), oldim.getHeight()-1),0, 0, Color.BLUE,null);
g2.dispose();
g2 = oldim.createGraphics();
g2.drawImage(newim,0,0,this);
for (int i = 0; i < rac.getNumCells(); i++) {
if (rac.getCells()[i] == 1) {
g2.setColor(Color.BLACK);
} else {
g2.setColor(Color.WHITE);
}
g2.fillRect(i * size - shiftl, oldim.getHeight()-1, size, size);
}
g2.dispose();
BufferedImage temp = newim;
newim = oldim;
oldim = temp;
}
else {
Graphics g = oldim.createGraphics();
for (int i = 0; i < rac.getNumCells(); i++) {
if (rac.getCells()[i] == 1) {
g.setColor(Color.BLACK);
} else {
g.setColor(Color.WHITE);
}
g.fillRect(i * size - shiftl, rac.getGen() * size - shiftd, size, size);
}
g.dispose();
}
repaint();
}