| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > сначало нарисовать 10 картинок.. |
| Автор: polosatij 15.11.2004, 15:40 |
| сначало нарисовать 10 картинок.. потом показать их пользователю.. как осуществить? народ.. представьте, что одна картина складывается при помощи многих.. так вот, если каждую картинку показывать юзеру на экране, то, естественно всё мигает как мне сначало нарисовать картинки, а потом показать их? я не могу себе позволить работать пиксельно с большими Array-ами, так как всё будет тормозить НА НЕТ мне нужна здесь если не молнееносная реакция, то хотябы приблежение к ней.. может кто что хорошее предложит |
| Автор: Domestic Cat 15.11.2004, 16:28 |
| я не понял, как нарисовать и что нарисовать? если задача в том, чтобы сделать из 10 разных картинок 1 рисунок, то нужно просто создать BufferedImage, взять у него графику (getGraphics()) и нарисовать туда эти рисунки. |
| Автор: igon 16.11.2004, 05:01 |
| Если нужно, чтобы 10 отдельных картинок только "выглядели", как одна, то можно использовать JLayeredPane, разместив каждую картинку в отдельном слое, самый верхний слой предварительно "залить" каким-нибудь нейтральным фоном. По окончании загрузки всех картинок "утопить" (moveToBack) верхний слой и перерисовать JLayeredPane |
| Автор: Domestic Cat 16.11.2004, 07:11 |
| Окончание загрузки не означает что все картинки будут прорисовываться одновременно и не будет мерцания. В момент "утопления" верхнего слоя мы получим то же самое, что было бы при прорисовке картинок на одной панели. Мерцание возникает из-за того, что прорисовать 10 рисунков медленнее, чем один большой. Потому лучше рисовать в один рисунок, тем более что если его составляющие со временем не меняются, то нужно будет делать эту прорисовку 1 раз. Это называется двойным буффированием. |
| Автор: polosatij 16.11.2004, 09:06 | ||||||
что-то не получается у меня.. где я ошибаюсь
где я ошибся? Добавлено @ 09:08
нет.. у меня не получиться этого.. картинка каждый раз - разная.. возможных вариантов 100^100, если не больше.. |
| Автор: Domestic Cat 16.11.2004, 10:00 | ||||
Насчет черного фона - нужно канве сделать setOpaque.
ну так тем более |
| Автор: igon 18.11.2004, 09:10 | ||
Никак не удается воспроизвести мерцание при отображения 10 отдельных фрагментов общей картинки (PIII-800, ОЗУ 512, Win2000, JDeveloper10) при использовании JLayeredPane.
|
| Автор: Domestic Cat 18.11.2004, 09:14 |
| И не получится без дабл баффера, хоть тут в лепешку расшибись |
| Автор: igon 18.11.2004, 18:28 | ||||
=> для мерцания нужен дабл баффер => счастье - это когда тебя понимают |
| Автор: Domestic Cat 18.11.2004, 19:13 |
| Извиняюсь - действительно не разобрался Проблемкa будет если тебe нужнo постоянно меняtь рисунок или его части (непрерывно). Поскольку здесь речь об игре, то я предполагаю что-то вроde этогo. Тогдa прорисовыват' придется нe 1 раз, а Н раз в секунду, ну i тогда мерцание будет |
| Автор: igon 18.11.2004, 19:57 |
| Мдя, похоже, я опять не совсем понял исходную проблему - подразумевалась-то, оказывается, анимация. В этом случае ты прав: о такой проблеме я слыхал и решается она как раз двойной буферизацией (сам, увы, не сталкивался). Хотя, таскание мышой одного (величиной с полэкрана) фрагмента при наличии других - чем не анимация? А мерцание так таки и не появилось, несмотря на усердие в таскании (уж и не знаю, |
| Автор: Domestic Cat 18.11.2004, 20:07 |
| Ну вроде как polosatij об игрe говорил. А насчет таскания мышой - там fps поменьше |
| Автор: polosatij 21.11.2004, 00:52 |
| млин.. Domestic Cat, мучаюсь всё ещё с Траблой.. очень долго не мог понять где ошибка.. и теперь вижу, что перерисовка BufferedImage мне ничего не даёт.. почему-то содержание остаётся прежним.. странно.. мне нужно как-нибудь очищать содержимое BufferedImage странно.. в paint-е всё получается замечательно (можно проверить, поменяв активное окно), а вот те же самые строчки в анонимном классе (при нажатии мыши) не работают.. хм.. |
| Автор: Domestic Cat 21.11.2004, 01:46 |
| А можно код твой посмотреть? А то так непонятно. |
| Автор: polosatij 22.11.2004, 01:05 | ||
млин.. не знаю.. может BufferedImage надо затерать прежде? может другой использовать? может еще что ------------------- посмотрел вчера, оказывается в Canvas вообще ничего нарисовать нельзя!!! может быть можно, но оно не отображается |
| Автор: Domestic Cat 22.11.2004, 18:26 | ||
Рисовать в канвe можно, тy просто делаешь неправильно. Воt пример :
|
| Автор: polosatij 22.11.2004, 19:19 | ||
| Domestic Cat почему-то очень многие дают мне пример именно так:
а почему не анонимным классом? это дело вкуса я, например, не люблю когда лишние строки валяются.. (= строки интерфейса) за пример, паси сегодня попробую чуть по другому |
| Автор: Domestic Cat 22.11.2004, 19:37 |
| можно и анонимным классом, но так увеличивается размер программы (за счет создания отдельного MyCanvas$1.class) |
| Автор: Zandr 23.11.2004, 12:26 | ||
| И дело вкуса тоже. Когда у тебя фрейм с одной кнопкой, можно
А если у тя куча кнопок, то извиняй |
| Автор: polosatij 23.11.2004, 13:35 | ||||
Domestic Cat, я посмотрел вчера твой вариант.. и свои.. привожу здесь переделку твоего варианта, под мой: (у меня пара тысяч строк в проекте, мне так просто не переделать это всё на твой лад, поэтому хочу разобраться, где и что я не правильно делаю):
почему картинка перерисовывается только после смены активных окон заранее паси Добавлено @ 13:37
до BufferedImage у меня всё работало замечательно (не устраивало лишь мигание и "частота процессора") |
| Автор: Domestic Cat 23.11.2004, 16:18 | ||
repaint() должен перерисовывать канву, а не фрейм, как у тебя:
|
| Автор: polosatij 23.11.2004, 18:31 |
| У-У-У-У-У-У-У-У-У-У-У-У-У-У-У-У-У-У-Уря-я-я-я-я-я-я.. Заработало! (с) Простоквашино точно.. а я думал.. нужно только еще один кусок подогнать.. вечером принесу.. Domestic Cat кидай домашний адрес, придётся тебе из германии пива прислать и всё-таки коты понимают друг друга (с) полосатый |
| Автор: Domestic Cat 23.11.2004, 18:45 | ||||
АААА так ты тоже Кот??? Растет силa кошачья на форумe |
| Автор: AntonSaburov 23.11.2004, 18:51 |
| Пора сынишку на форум выводить, он у меня в год Собаки родился, а то засилье какое-то. Я тут уже видел участника WildCat. Кошмар |