Используя JavaFX8 и JDK 1.8.0_74 в IntelliJ, я создал приложение для основного пиксельного редактора. У меня есть два окна (этапы). Один из них представляет собой матрицу 32x128 объектов окружности, расположенную в грид-панели, а другую, вдова Tools; У меня есть один Controller.java. Используя мышь, окно «Инструменты» предоставляет инструменты для рисования линий, прямоугольников и т. Д. И меню для «Настройка», «Файлы» и «Списки воспроизведения». Меню «Файлы» предоставляет пользователю функции «Открыть», «Сохранить» и «Удалить». Чтобы просмотреть сохраненный файл изображения в пикселях, пользователь нажимает «Открыть» и через FileChooser, открывается выбранный файл и отображается каждое свойство цвета Circle. Файл сохраненного пикселя может быть отправлен через Wi-Fi в матрицу RGB LED, также 32x128.JavaFX8 Временная шкала для прокрутки сетки объектов круга?
Для просмотра фото и видео перейдите по ссылке: https://virtualartsite.wordpress.com/
можно прокручивать отображаемый пиксель арт файл влево, вправо, вверх или доу, используя временную шкалу. Тем не менее, я также хотел бы обернуть изображение в пикселях, но не смог устранить небольшие аномалии, которые появляются в начале обертки, в то время как остальные 95% обертывания верны?
Критический код класса WrapLeft выглядит следующим образом:
public static void runAnimation() {
timeline = new Timeline(
new KeyFrame(Duration.millis(200), event -> {
wrapFileLeft(pixelArray);
}));
timeline.setCycleCount(100);
timeline.play();
}
public static void wrapFileLeft(Circle[][] pixelArray){
// save pixelArray[r][0] in pixelArrayTmp[r][0] and wrap to end, pixelArray[r][col-1]
Circle[] pixelArrayTmp = new Circle[row];
for (int r = 0; r < row; r++) {
pixelArrayTmp[r] = pixelArray[r][0];
}
// move all the pixelArray columns one column to the left
for (int c = 0; c < col-1; c++) {
for (int r = 0; r < row; r++) {
Color color = (Color) pixelArray[r][c+1].getFill();
pixelArray[r][c].setFill(color);
}
}
// move the pixelArrayTmp[r][0] column into the new, blank, end column of pixelArray[r][col-1]
for (int r = 0; r < row; r++) {
Color color = (Color) pixelArrayTmp[r].getFill();
pixelArray[r][col-1].setFill(color);
} } }
Логика временно сохранить столбец 0, переложить все остальные столбцы влево на одну позицию и заменить столбец 127 с колонкой 0. Это все сделано в одном CycleCount(). Аномалии происходят в первые четыре смены слева; Объекты Circle с цветами, отличными от черного, меняются на соседний цвет. Но после четырех сдвигов все оставшиеся сдвиги кажутся правильными?
Мое лучшее предположение заключается в том, что логический порядок выполнения выходит из строя, потому что я не использую Timeline правильно или пытаюсь выполнить слишком много в одном KeyFrame? Увеличение продолжительности, по-видимому, не влияет на аномалии.
Благодарим за помощь.
Ваше исправление работает в первый раз, когда я внес надлежащие изменения. Это в третий раз, когда вы предоставили мне отличный ответ, который включает объяснение с кодом. Проведя часы, пытаясь понять проблему и потерпеть неудачу, ваш ответ делает мой день! БЛАГОДАРЮ. – sgroen