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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> оптимальная прорисовка поля 
:(
    Опции темы
voltaren
Дата 22.11.2007, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



проверку своей программы я проводил на nokia 5500d - s60v3, nokia 6680 - s60v2, Nokia 9300i - s90, Siemens CX65, Motorola e398, Nokia e50, Nokia 2630 и плохие результаты, вернее скажем всего 20 кадров в секунду минимум были на Siemens CX65, Motorola e398 и самая катастрофа была на Nokia 2630
а почему Вы спросили?? что с этой платформой что то не так?
PM MAIL   Вверх
eugine_s
Дата 22.11.2007, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 14.11.2007
Где: Киев

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



Цитата(voltaren @  22.11.2007,  15:52 Найти цитируемый пост)
а почему Вы спросили?? что с этой платформой что то не так?


Одно время были проблемы с Nokia S60 2 Ed.
Жутко тормозил flushGraphics();

Оказалось тормозила связка drawRegion() + flushGraphics();

Вопрос решил использованием Nokia API DirectGraphics

Вообщем совет на эту платформу такой: использовать MIDP 1.0 + Nokia API
PM MAIL   Вверх
voltaren
Дата 22.11.2007, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



на какую имено платформу?? подтормаживает то и на сименсах и на мотороле
а вот интересно нокия 2630 потдерживает nokia API или только MIDP 2.0 и что еще быстрее на ней работать будет...
PM MAIL   Вверх
eugine_s
Дата 22.11.2007, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 14.11.2007
Где: Киев

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



Цитата(voltaren @  22.11.2007,  16:24 Найти цитируемый пост)
на какую имено платформу?? 

Для Нокия S60 2 Ed


Цитата(voltaren @  22.11.2007,  16:24 Найти цитируемый пост)
подтормаживает то и на сименсах и на мотороле


Если на всех подтормаживает, то что-то с кодом не то. 
Выложи код - посмотрю.



Цитата(voltaren @  22.11.2007,  16:24 Найти цитируемый пост)
а вот интересно нокия 2630 потдерживает nokia API или только MIDP 2.0 и что еще быстрее на ней работать будет... 

2630 - новый телефон, даже если и есть нокия АПИ, то лучше МИДП 2.0 использовать.
PM MAIL   Вверх
voltaren
Дата 22.11.2007, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



да с кодом то все в порядке smile сам код(то есть просчет и все действия, и даже прорисовка в двойной буфер) быстро выполняется, 6-7 мс на медленных телефонах, все время занимает функция flushGraphics();. а пробовать вызыпать flushGraphics(int,int,int,int) лишь еще замедляется дело...
просто думал может как то можно обойтись без, скажем если через MIDP 1.0 делать, потому что дело полностью в ней :(
PM MAIL   Вверх
eugine_s
Дата 22.11.2007, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 14.11.2007
Где: Киев

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



Цитата(voltaren @  22.11.2007,  17:34 Найти цитируемый пост)
да с кодом то все в порядке smile сам код(то есть просчет и все действия, и даже прорисовка в двойной буфер) быстро выполняется, 6-7 мс на медленных телефонах, все время занимает функция flushGraphics();. а пробовать вызыпать flushGraphics(int,int,int,int) лишь еще замедляется дело...
просто думал может как то можно обойтись без, скажем если через MIDP 1.0 делать, потому что дело полностью в ней :(


Из ваших слов можно сделать вывод, что с кодом у вас не все в порядке.
Если используется flushGraphics() значит у вас есть класс extends GameGraphics, а этот GameCanvas сам по себе имеет двойную буферизацию, а вы говорите, что дополнительно еще прорисовываете в двойной буфет. Или я не прав?

Свой пример я привел: по все показателям замера времени тормозил flushGraphics() на Nokia S60. Когда же убрал drawRegion() и заменил на аналог в Nokia API: после этого flushGraphics() перестал тормозить. Игра стала летать.

Как обойтись без flushGraphics()? 

shomer кажется привел пример, как это сделать использую Canvas:

Код

class SomeCanvas extends Canvas implements Runnable
{

public void run()
{
    while (running)
    {
         repaint();
    }


public void paint(Graphics g)
{
    // тут уже нужно использовать двойную буферизацию
    .... //рисуем на внеэкранный буфер


    g.draw(bufferImage, 0, 0, 0); // рисуем из буфера на экран
}

}

}




PM MAIL   Вверх
voltaren
Дата 22.11.2007, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



нет еще одного двойного буфера нету, я подразумеваю двойную буферизацию которая реализована в GameCanvas.
а если не секрет то что делает функция drawRegion()?
я знаю как реализовавать самопальную двойную буферизацию, просто я интересовался в первом посте, будет ли это быстрее работать? там же я и предложил 5 вариантов как можно отрисовывать сцену smile
просто обидно, игра потенциально может работать очень быстро, а из за одного вызова функции flushGraphics тормозит...
PM MAIL   Вверх
eugine_s
Дата 22.11.2007, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 14.11.2007
Где: Киев

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



Цитата(voltaren @  22.11.2007,  18:02 Найти цитируемый пост)
просто обидно, игра потенциально может работать очень быстро, а из за одного вызова функции flushGraphics тормозит... 


Даю 100% гарантии, что причина тормознутости не в flushGraphics(). Даю 100 потому, что сам делал игры "потяжелее" чем шарики с использование flushGraphics() и знаю, что сам по себе этот метод не тормозит.
Портации делались на все указанные телефоны (ну может не совсем эти, но по списку совместимости точно на все). Глюк с тормозами был только на s60.
А если где-то тормозило, то из-за неправильного кода, неоптимальности и т.д... но никак не из-за использования flushGraphics().

Причину нужно искать не во flushGraphics().

Причин может быть много, например, перед тем как нарисовать шарик, ты создаешь Image этого шарика, а потом отрисовываешь и так при каждой отрисовке.  smile 

Без кода можно только гадать..

Так что код в студию или стоит закрывать тему.

PM MAIL   Вверх
voltaren
Дата 22.11.2007, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ну не надо думать что я программирование занимаюсь smile первую неделю или первый месяц, как никак уже почти десять лет smile да и алгоритм я специально оптимизировал как мог, там фактически одна математика, и прорисовка drawImage...
а на счет ста процентов, ну не знаю, все таки время то не обмануть, если я провожу замер и вижу, что вся игра выполняется за 7 мс а flushGraphics за 33 то наверное это о чем то говорит.
Конечно может быть летающие шарики можно сделать значительно оптимальнее, неже ли это сделал я, с точки зрения математики, и это я уже начинаю понимаю smile и конечно проведу оптимизацию, но это уменьшит цифру 7 мс но не 33 мс smile
PM MAIL   Вверх
eugine_s
Дата 22.11.2007, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 14.11.2007
Где: Киев

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



 smile 

voltaren, я исхожу из того, что Нокия, Моторола, Сименс не могли на стольких телефонах сразу криво реализовать метод flushGraphics(). 
Понимаю, если бы это были какие-то три "корейца"... плюс у меня самого нормально идет приложение.

Поэтому, ты как человек с большим опытом работы в программировании должен понимать, что где-то не с той стороны подходишь к решению своей проблемы. Или ты так не думаешь?

Раз уж ты не хочешь код показывать, то сам подумай: flushGraphics() работает нормально, проблема в другом месте. 

Может у тебя память под завязку занята, поэтому когда flushGraphics() вызывается, то идет вызов сборщика мусора, а он уже тормозит.


PM MAIL   Вверх
shomer
Дата 22.11.2007, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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

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


 




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


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

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