![]() |
Модераторы: javastic, AntonSaburov |
![]() ![]() ![]() |
|
valerchi |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 27.5.2008 Где: Геническ Репутация: нет Всего: нет |
Я загрузил в массив картинки, но всё осталось также
|
|||
|
||||
eugine_s |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 14.11.2007 Где: Киев Репутация: 17 Всего: 17 |
и из старого кода убрал загрузку картинок в цикле отрисовке ?
Нужно код посмотреть. |
|||
|
||||
valerchi |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 27.5.2008 Где: Геническ Репутация: нет Всего: нет |
всё сделал, но результат остался тот же изображение не сливается, идёт мерцание и покадровая загрузка. Вот мой код , может я что не так сделал?
.......... Ещё хотел сказать , что у меня картинки разные (какие смог найти ) - разных размеров и рисунков
Это сообщение отредактировал(а) W0LF - 29.5.2008, 17:40 |
|||
|
||||
Dancer |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 29.4.2005 Где: Nizhniy Novgorod Репутация: 33 Всего: 37 |
да тут большее зло это то, что пытаемся в Form пихать каждую картинку и эту формочку через setCurrent() рисовать. Это очень медленная операция. Для такой анимашки нужно пользовать Canvas и определять paint() для него и рисовать лишь в этом Canvas.
То есть при старте аппликухи делается объект класса наследника от Canvas, и именно этот класс пихаем на дисплей, а paint() этой самой канвы и делает отрисовку. как всё отрисовали, повисели малешко, а после этого уже формочку (незабыв почистить память от Image[]) -------------------- У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! ![]() |
|||
|
||||
valerchi |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 27.5.2008 Где: Геническ Репутация: нет Всего: нет |
всё сделал, но результат тот же - картинки не сливаются, а покадрово мерцают и проскакивает фоновый рисунок телефона.
Вот мой код, может я что сделал нетак
Это сообщение отредактировал(а) W0LF - 29.5.2008, 17:41 |
|||
|
||||
Dummy |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 21.5.2007 Репутация: 7 Всего: 19 |
valerchi, зло этого кода даже не в медленности операций отрисовки элементов формы по сравнению с канвасом, а в том, что при выполнении такой связки:
на каждой итерации происходит перекомпоновка формы, т. к. setCurrent(null) не скрывает форму. Вызов f.delete(0) приводит к тому, что на форме не остается компонентов, и нужно ее перекомпоновать, чтобы отрисовывался только фон. f.append(i) добавляет новый ImageItem, после чего нужно опять перекомпоновать форму. Тебе предложили для отрисовки использовать примерно следующий подход. Создать потомка от Canvas, который бы в paint() отрисовывал очередной кадр анимации. Например, так:
А потом, где нужно, сделать следующее:
На каждой итерации while будет рисоваться следующий кадр. Это сообщение отредактировал(а) Dummy - 28.5.2008, 20:49 |
||||||
|
|||||||
valerchi |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 27.5.2008 Где: Геническ Репутация: нет Всего: нет |
Извини, ничего не понял. Я до canvasa ёщё не дошёл - не учил.....
Пытаюсь сейчас разобраться, но, думаю, что где-то через неделю разберусь, а хотелось бы сейчас..... Я так понял, что нужно в папке /res создать два файла. Первый назвать AnimationCanvas.java : вот его код:
А второй создать с именнем Glaz.java : Вот его код:
Если можно, объясни, как для "чайника", а нет, буду постепенно разбираться. Это сообщение отредактировал(а) W0LF - 30.5.2008, 12:24 |
||||
|
|||||
Dummy |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 21.5.2007 Репутация: 7 Всего: 19 |
Form - это Displayable, который рисует свои элементы сам. Canvas - это Displayable, код рисования на котором определяется мидлетописателем. Поэтому общая идея заключалась в том, чтобы выделить рисование анимации в подкласс класса Canvas, который мы с моей легкой руки назвали AnimationCanvas. Этот класс принимает в конструкторе массив кадров, которые он будет один за другим отрисовывать, при каждой новой перерисовке - следующий кадр.
Предлагаемая последовательность действий:
Нет. В папку /res по традиции кладутся ресурсы, а не исходники. Не стоит нарушать традицию, тем более что некоторые средства разработки (WTK? не помню уже) , возможно, будут принимать папку /res как предопределенную папку для ресурсов. Ну, например, положи их в /src/app. Тогда в начале каждого файла у тебя будет такая строчка: [code=java] package app [code] И jad-файл тоже нужно будет обновить. Почитай повнимательнее про Canvas, обращая внимание на применение Graphics, repaint() и serviceRepaints(). |
|||
|
||||
W0LF |
|
|||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
-------------------- iOS developer |
|||
|
||||
valerchi |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 27.5.2008 Где: Геническ Репутация: нет Всего: нет |
Вот, что я попробовал сделать, только не знаю, как очистить "g.drawImage", чтобы очистить картинку, для загрузки новой картинки:
Это первый файл Glaz.java : import javax.microedition.lcdui.*; import javax.microedition.midlet.MIDlet; public class Glaz extends MIDlet { private Image i; public void startApp() { // создать объект графика Graph graph = new Graph(); // получить ссылку на менеджер дисплея Display display = Display.getDisplay(this); // вывести график на экран display.setCurrent(graph); // получить строку атрибута имени мидлета } public void pauseApp() { } public void destroyApp(boolean unconditional) { // уведомить систему о завершении notifyDestroyed(); } } Это второй файл Graph.java : import javax.microedition.lcdui.*; import javax.microedition.midlet.MIDlet; import java.io.*; public class Graph extends Canvas { private Image i; private int x; // функция прорисовки экрана public void paint(Graphics g) { for (x=0; x!=19; ++x) { try { i = Image.createImage("/" + Integer.toString(x+1) + ".png"); } catch (IOException ioe) { ioe.printStackTrace(); } } g.drawImage(i, 90, 100, g.HCENTER | g.VCENTER); g.drawImage(255, 255, 255); } } |
|||
|
||||
valerchi |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 27.5.2008 Где: Геническ Репутация: нет Всего: нет |
Ничего не понимаю, по идее должно быть так: очищаем экран и добавляем туда картинку и всё это помещаем в цикл повторений. Делаю так :
..... а ничего не получается. Высвечивает только последняя картинка. |
|||
|
||||
Dummy |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 21.5.2007 Репутация: 7 Всего: 19 |
Правильно, что высвечивается только последняя. Потому что при каждой перерисовке ты рисуешь 20 картинок на одном и том же месте. А нужно - при каждой перерисовке одну, а затем обновлять индекс. Я уже написал вариант, как это сделать. Смотри внимательнее.
|
|||
|
||||
valerchi |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 27.5.2008 Где: Геническ Репутация: нет Всего: нет |
Получилось вот, что :
Массив я не брал, хотел сделать всё проще. Но на эмуляторе картинки налаживаются друг на друга. Как сделать, чтобы очистить экран, а потом показать картинку? |
|||
|
||||
Dummy |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 21.5.2007 Репутация: 7 Всего: 19 |
Брр. Что-то мы ходим вокруг одного и того же... Примерно с такого же по эффективности решения мы и начинали
![]() Затирать на канвасе можно только заливкой экрана фоновым цветом или рисованием фоновой картинки. Все делается ручками. |
|||
|
||||
valerchi |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 27.5.2008 Где: Геническ Репутация: нет Всего: нет |
Ничего не понимаю, уже очистил экран, - залил его белым, а всё равно картинки налаживаются друг на друга
Добавлено через 4 минуты и 53 секунды Всё, на счёт "закраски" разобрался, сейчас попробую в телефоне. |
|||
|
||||
![]() ![]() ![]() |
FAQ раздела лежит здесь! |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java ME (J2ME) | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |