Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получить копию части экрана 
:(
    Опции темы
GhostMasterNet
Дата 22.8.2007, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Илья
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 6.9.2006

Репутация: 3
Всего: 3



Рисую в классе Canvas в объект Graphics.

Запускается поток, получает ссылку на Graphics
и начинает рисовать анимационную последовательность картинок с прозрачным фоном.

Цикл в Canvas на время анимации останавливается.

Проблема в том, что картинки из анимационного потока накладываются друг на друга и получается каша.

Возникла мысль сделать копию части фона перед началом анимации и перерисовывать только её между выводами картинок.
Но ни в Grpahics, ни в Image нужных методов не нашёл. Как быть?

Формально:
Загрузить копию части экрана в Image или в массив
PM MAIL   Вверх
SatanClaus
Дата 22.8.2007, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 20.6.2007

Репутация: 3
Всего: 3



Обьясни попроще  smile 
Если твои рисунки накладываются, тогда просто перед прорисовкой следующей картинки, зарисовывай весь экран белым цветом...
Если же у тебе нужно создать какой-то необычный фон, тогда создай для него рисунок в буффере, прорисовывай фрн, потом рисуй фон в канвас, а за ним и сам рисунок, который тебе нужен...
Или может я неправильно че-то понял?
PM MAIL   Вверх
W0LF
Дата 22.8.2007, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20



Не совсем понял что там насчет каши и что за цикл останавливается.




Цитата(GhostMasterNet @  22.8.2007,  14:52 Найти цитируемый пост)
Загрузить копию части экрана в Image или в массив 

Для этого лучше всего юзать буфер
Код

protected originalGraphics = null;
proteted bufferImage = Image.createImage(getWidth(), getHeight());
protected void paint(Graphics g) {
  originalGraphics = g;
  g = bufferImage.getGraphics();
  ...//рисуем все в g
  originalGraphics.drawImage(bufferImage, 0, 0, Graphics.TOP | Graphics.LEFT);
}

у тебя всегда есть bufferImage
чтоб его отрисовать в Image :
Код

Image myImage = Image.createImage(x, y);
Graphics myImageGraphics  = myImage.getGraphics();
myImageGraphics.setClip(x2, y2, width, height);
myImageGraphics.drawImage(bufferImage, 0, 0, Graphics.TOP | Graphics.LEFT);

ток эти действия paint и последнее скорее всего придется синхронизировать, если из разных потоков, чеб коллизий не было
мож че и натупил, сорри, голова щас забита..


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
GhostMasterNet
Дата 22.8.2007, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Илья
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 6.9.2006

Репутация: 3
Всего: 3



Цитата

Не совсем понял что там насчет каши и что за цикл останавливается.


Каша получалась когда рисовал картинки одну поверх другой. Из-за прозрачного фона.
А цикл - где рисуется сцена и анализируются нажатые клавиши.

Попробую описать, как решил проблему.

Код

/*
 *  Сцена - деревья, враги, игрок. drawScene - рисует всё это
 *  Анимационные картинки - враг ловит игрока и делает с ним что-либо -  поток animationClip
 * это мы рисуем в позиции, где находится игрок. 
 *
 */
         ...
         Image bkPiece = Image.createImage(AREA_WIDTH, AREA_HEIGHT); // ширина и высота анимационных картинок. 
         Graphics g = bkPiece.getGraphics();  
         /*Переносим систему координат так, чтобы при  рисовании сцены нужная область была в нашем прямоугильнике */
         g.translate( - player.getLeft(), - player.getTop() );           
         drawScene( g );  // выполняем рисование сцены не на экран, а "в картинку" 
        /*выполняем анимационные действия, передаём клипу копию фона под ним.
          Она будет прорисовываться перед каждым кадром*/
          animationClip.start( bkPiece, player.getLeft(), player.getTop() );  
           ...



PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.0623 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.