У меня есть много объектов, которые хочу отрисовать на экран. Если дело обстоит в обычной отрисовке, то тут никаких проблем не возникает, все объекты отрисовываются моментально, глаз не успевает даже заметить что произошло, но когда мне требуется часто обновлять view (JPanel)
, то тут возникает проблема:
некоторые объекты начинают пропадать на долю секунды и снова появляться, при чём неважно, стоит ли объект на месте или двигается.
Для обновления я использовал данную функцию:
public void slowMove(int x, int y) {
int currentX = this.x;
int currentY = this.y;
Thread thread = new Thread(() -> {
while (this.x != currentX + x) {
this.x = 4 * x / Model.FIELD_CELL_SIZE + this.x;
try {
Thread.sleep(16);
} catch (InterruptedException e) {
e.printStackTrace();
}
update();
}
while (this.y != currentY + y) {
this.y = 4 * y / Model.FIELD_CELL_SIZE + this.y;
try {
Thread.sleep(16);
} catch (InterruptedException e) {
e.printStackTrace();
}
update();
}
});
thread.start();
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Объекты я получаю из сета объектов и в цикле for
отрисовываю их по одному.
public void paintComponent(Graphics g) {
g.setColor(new Color(0x000000));
g.fillRect(0, 0, 500, 500);
GameObjects gameObjects = view.getGameObjects();
if (gameObjects != null)
for (GameObject gameObject : gameObjects.getAll()) {
gameObject.draw(g);
}
super.paintComponent(g);
}
Вот пример draw
классов:
@Override
public void draw(Graphics graphics) {
Graphics2D g2 = (Graphics2D) graphics;
g2.drawImage(image, x, y, width, height, null);
}
Используй двойную буферизацию, сначала нарисуй все объекты на картинке(BufferedImage напр.), а потом уже ее.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
/*При вводе n-го количества символов при условии, что первый введённый символ находится в диапазоне от 1 до 5 программа работает не корректно*/
Поясните пожалуйста что из себя представляет в JavaFx список ObservableList и для чего он используется? Можно ли вместо обычных ArrayList использовать...