![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Su_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 1.8.2007 Репутация: нет Всего: нет |
Добрый день!
Как сделать корректно мигающий полигон или квадрат . Я пускаю поток, который каждую 2 секунду обрисовывает тот же полигон только другого цвета , получается что надо. в 1 секунду полигон -красный , во 2 - синий , и так в цикле ..
метод preview_sector просто рисует полигон.. Получается что они накладываются друг на друга .. Вроде как сборщик мусор работает и память особо не забивает. Есть какой-нибудь способ по красивее? |
|||
|
||||
| pathfinder |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 3.3.2010 Репутация: 7 Всего: 10 |
1) Заместо потока использовать таймер.
2) Заместо if - else - if использовать это
|
|||
|
||||
| Su_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 1.8.2007 Репутация: нет Всего: нет |
Спасибо перепишу у себя.Но по сути это другая интерпретация моего метода.. Я боюсь что в нем может быть утечка памяти , т.к. мы рисуем поверх , не удаляя старое
preview_sectors:
|
|||
|
||||
| pathfinder |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 3.3.2010 Репутация: 7 Всего: 10 |
В приведенном коде утечек не видно. Можете хоть тысячу раз в цикле вывести один и тот же полигон, к утечке памяти это не приведет, лишь скажется на скорости работы программы.
|
|||
|
||||
| Su_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 1.8.2007 Репутация: нет Всего: нет |
А как скажется? т.е. из чего может пострадать скорость работы программы , если не от недостатка оперативной памяти?
|
|||
|
||||
| pathfinder |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 3.3.2010 Репутация: 7 Всего: 10 |
Отрисовка вся производится в экранный буфер суть прямоугольный массив(при этом Graphics отвечает за то что-бы пикселы выходящие за текущий прямоугольник отсечения не отрисовывались). Поэтому отрисовка скажем 100 одинаковых квадратов размером 500х500 пикселов будет эквивалентна по скорости отрисовки одного квадрата 5000х5000 пикселов. При этом чем сложнее фигуры(например полигоны) тем больше "сил" будет тратится на то, что-бы отрисовать ту часть фигуры, что помещается в прямоугольник отсечения(Clip rect).
|
|||
|
||||
| Su_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 1.8.2007 Репутация: нет Всего: нет |
Ясно, а что будет происходить когда один квадрат накладывается на другой , и так до бесконечности ... Как я понимаю при накладывание он автоматически будет освобождать то что находится под?)
|
|||
|
||||
| pathfinder |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 3.3.2010 Репутация: 7 Всего: 10 |
Graphics при отрисовке примитивов(прямых, овалов, прямоугольников и тп) не сохраняет их.
Т.е. Polygon somePolygon = ...; graphics.fillPolygon(somePolygon); // somePolygon прорисовался на экранном буфере, сам полигон нигде внутри graphics не сохранился // каковы бы ни были затраты на прорисовку они уже затратились graphics.fillPolygon(somePolygon); // еще раз тот же самый полигон отрисовываем, итогом чего просто стало повторная прорисовка одних и тех же пикселей. т.е по факту такой код по эффективности равно значен этому
Операции отрисовки можно приближенно представить себе как операции присваивания значений цвета элементам двухмерному прямоугольному массиву: graphics.setColor(color); graphics.fillRect(x, y, width, height); заполняем элементы массива примерно вот так for (int i=x; i<x+width; i++) { for (int j=y; j<y+height; j++) { screenBuffer[i][j] = currentColor; } } |
|||
|
||||
| Su_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 1.8.2007 Репутация: нет Всего: нет |
Спасибо большое за подробный ответ, теперь до конца понял как это происходит.! !!!
|
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |