![]() |
|
Модераторы: javastic, AntonSaburov |
![]()
|
|
| shomer |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 7.11.2007 Репутация: нет Всего: нет |
Выкладываю вариант отрисовки своих шрифтов.
------------------------------------------- Шрифт - png файл - белые буквы на прозрачной основе вида для примера символы О и Р где о-прозрачный пиксел х-белый OOOOOOOOOO OOXOOXXXOO OXOXOXOOXO OXOXOXXXOO OOXOOXOOOO OOOOOOOOOO OOOXOOOOXO линия меток конца символа конструктор загружает шрифт из файла и по строке меток определяет ширину каждого символа записывая в массив начало отображения каждого символа и его ширину. Представлено три метода: отрисовка строки белым цветом, заданным цветом и цветом фона и метод многострочной отрисовки текса с использованием \n и \t (перенос, табуляция). пример мидлета на моем TS2050 выдает 7 fps. Присоединённый файл ( Кол-во скачиваний: 19 )
FontGameCanvas.rar 28,47 Kb |
|||
|
||||
| javastic |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1214 Регистрация: 18.3.2005 Где: St.Petersburg Репутация: 19 Всего: 27 |
Эмулятор от SE закрывается намертво после запуска мидлета.
-------------------- 01101010 01100001 01110110 01100001 01110011 01110100 01101001 01100011 scjp, mcp |
|||
|
||||
| eugine_s |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 14.11.2007 Где: Киев Репутация: 17 Всего: 17 |
Запустилось на эмуляторе K700.
Давай разбирать ошибки: 1. Бросается в глаза Demo.java Метод run(): try{ Thread.sleep(20);} catch (Exception ex) {}; Зачем поток усыплять? 2. Зачем используешь float ? Это далеко не тот случай когда нужно использовать флоат (вычисления с плавающей точкой занимают больше времени чем целочисленое исчисление). 3. Сам фпс как-то кривова-то считается, лучше в run() делать вот так: засек время() отрисовал экран: DrawScreen(); опять засек время и вывел фпс; 4. Собственно пункты 1-3 это лирическое отступление, а по теме вопроса: Скажи, зачем тебе getRGB() от твоего шрифта? точнее доступ к каждой точке твоего шрифта? Это не правильно решение, если тебе нужно использовать в программе несколько шрифтов, то лучше в джарник закинуть два(или сколько надо) шрифтов. Соотвественно не нужно будет потом делать g.drawRGB() когда потребуется отрисовка буквы. Что тебе нужно сделать, чтобы быстро работала отрисовка своего шрифта: 1. Сделать описание для каждой буквы(точнее каждого символа из твоего шрифта) в таком формате (x,y,w), где х - х-координата, у - у-координата символа на картинке, w - ширина символа а также для всех символов достаточно одной h = высоты (у всех же одинаковая высота?) Это описание занеси в файл и в конструкторе твоего шрифта считай из файла в массив(ы), или создай final массивы в коде Font.java. 2. Конструктор шрифта делает: - загружает картинку - если требуется инициализирует массив(ы) координат и размеров символов шрифта 3. Теперь твой DrawStr(String str, int x, int y) превращается в: находим координаты символа, который нужно отрисовать и методом g.drawRegion() рисуем твой символ. (вместо drawRegion можно использовать setClip + drawImage) |
|||
|
||||
| shomer |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 7.11.2007 Репутация: нет Всего: нет |
javastic-у
Пример запускал на Wireless Toolkit 2.5.1 эмуляторе. Работает почему то медленней чем на реальном телефоне раза в три четыре. eugine_s-у 1. без Thread.sleep(20) на тефоне не обрабатывает клавиатуру (реакция на нажатия отсутствует, пришлось вытаскивать аккумулятор). 2. float для точности 3. FPS кривой - точно. 4. в данном случае дань универсальности ( имеем потерю в скорости) получая меньший размер мидлета получаем больший расход памяти Есть одна задумка нужно опробовать с замером fPs... на разных телефонах setClip + drawImage и drawRegion, пока не интересно. Надо немного время размышлять однако Это сообщение отредактировал(а) shomer - 14.11.2007, 19:28 |
|||
|
||||
| Samuil |
|
|||
![]() в(Job)ываю ![]() ![]() Профиль Группа: Участник Сообщений: 705 Регистрация: 26.4.2006 Где: Uzbekistan.Tashke nt Репутация: 5 Всего: 6 |
Прозрачные пикселы на старых телефонах будут?
|
|||
|
||||
| eugine_s |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 14.11.2007 Где: Киев Репутация: 17 Всего: 17 |
Нет, нет тут никакой универсальности и не нужна она вообще в этом случае. Сколько нужно будет шрифтов в программе? А как же тогда картинки рисовать? Ничего не нужно пробовать, если на эмуляторе тормозит, то на девайсах точно будет. Проблема в вашей "дани универсальности". Убрать getRGB() и drawRGB() + оптимизировать саму картинку шрифта (не нужно делать для каждого символа одинаковые отступы, если символ "."(точка) занимает 1 пиксель в ширину, то и нужно оставлять 1 пиксель а не 6. |
|||
|
||||
| shomer |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 7.11.2007 Репутация: нет Всего: нет |
Samuil-у:
прозрачность от староватости телефона имеет нелинейную зависимость лучше пользовать int numAlphaLevels() для любопытства eugine_s-у: setClip + drawImage и drawRegion - бью им челом Интересно почему на Wireless Toolkit 2.5.1 эмуляторе fps в счетыре раза ниже чем на телефоне а Sjboy Emulator вообще мидлет не берет. Точка - пиксел, а сможет и нет Имхо drawImage и drawRGB равнозначны ( хотя реализации не видел ( как посмотреть Есть желание сформировать растровый массив строки для последующей обработки альфа_цветом с одной отрисовкой а не посимвольно как сейчас. Угнетает мысль о new и таймингах массива... |
|||
|
||||
| shomer |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 7.11.2007 Репутация: нет Всего: нет |
Старый метод
Новый метод
Скорость вывода выросла и даже в .. раз. А я боялась Оказывается посимвольная отрисовка хорошо подтормаживает Особенно заметно при многострочном выводе ( хотя может и открыл Америку) Это сообщение отредактировал(а) shomer - 15.11.2007, 23:52 |
||||
|
|||||
![]()
|
FAQ раздела лежит здесь! |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java ME (J2ME) | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |