Вниз  Ваши программы и игры на Java
- 25.01.2011 / 16:24
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
dzanis, Сделай лучше подсчет фпс в проге на fscriptME и в проге на бейсике, и выложи. Так нагляднее будет сравнивать результаты. А то один говорит медленно, другой быстро)
__________________
 let live
- 25.01.2011 / 16:35
dzanis
  Пользователь

dzanis 
Сейчас: Offline
aNNiMON, Ок так и сделаю.несовсем понял твой пример про фпс в Микростатьи и хитрости J2ME А в басике какой метод возврашает миллисикунды?
- 25.01.2011 / 16:48
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
dzanis, Да тот пример старый, я откуда-то брал.
Про бейсик, лучше спросить у народа, я его уже забыл)
__________________
 let live
- 25.01.2011 / 16:56
dzanis
  Пользователь

dzanis 
Сейчас: Offline
Просто я его уже пробывал,и фпс было на нуле.Я так понимаю раз это количество кадров в секунду,то счётчик iFPS++; надо ставить перед самим методом repaint();.Ладн разберусь.
- 25.01.2011 / 17:09
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
dzanis, Попробуй так
  1. long time, prevtime, delta;
  2. int framecount, fps;
  3. /**/
  4. time = System.currentTimeMillis();
  5. delta = time - prevtime;
  6. framecount++;
  7. if(delta >= 1000) {
  8.     fps = framecount * 1000 / delta;
  9.     prevtime = time;
  10.     framecount = 0;
  11. }

__________________
 let live
- 25.01.2011 / 17:21
MG42
  Пользователь

MG42 
Сейчас: Offline
dzanis (25.01.2011/16:35)
А в басике какой метод возврашает миллисикунды?
10 m%=millisecоnds(0)
20 програма x....
300 m1%=milliseconds(0)-m%
310 print m1%//возратит исполнение(програмы x) в милисекундах
- 25.01.2011 / 17:31
dzanis
  Пользователь

dzanis 
Сейчас: Offline
MG42, спасибо,суть понял.
  aNNiMON я нашол и портанул такой пример:
  1. static long FPS, FPS_Count, FPS_Start;
  2.     static String getFPS() {
  3.  
  4.         FPS_Count += 1;
  5.         if (FPS_Start == 0) {
  6.             FPS_Start = System.currentTimeMillis();
  7.         }
  8.  
  9.         if (System.currentTimeMillis() - FPS_Start >= 1000) {
  10.             FPS = FPS_Count;
  11.             FPS_Count = 0;
  12.             FPS_Start += 1000;
  13.  
  14.         }
  15.         return Long.toString(FPS);
  16.     }
перед методом repaint();
просто пишем
  1. g.setColor(0xFF0000);
  2.         g.drawString(getFPS(), 0, 0, 20);

- 26.01.2011 / 08:52
aleksey
  Пользователь

aleksey 
Сейчас: Offline
dzanis (25.01.2011/16:56)
Просто я его уже пробывал,и фпс было на нуле.Я так понимаю раз это количество кадров в секунду,то счётчик iFPS++; надо ставить перед самим методом repaint();.Ладн разберусь.
Не совсем. Когда графики на экран выводится много, то телефон между вызовами repaint() может не успевать нарисовать всё на экране и в следствие этого начинает в прямом смысле халявить, т.е пропускать некоторые вызовы repaint(). Поэтому если ты поставишь там iFPS++, то он может быть больше чем на самом деле. Чтобы этого не происходило надо после repaint() добавить serviceRepaints(). Таким образом ты заставляешь телефон перерисовывать экран всегда, а не лениться
- 26.01.2011 / 14:39
dzanis
  Пользователь

dzanis 
Сейчас: Offline
aleksey, Про serviceRepaints() я интуитивно догадывался.Этот метод часто использовали на ранних моделях,например сименсах.Но сейчас разница мала заметна,т.к. мобилы с довольно мошными процами.
- 26.01.2011 / 21:12
aleksey
  Пользователь

aleksey 
Сейчас: Offline
dzanis, да это конечно не обязательно. Но разница бывает ощутима. И 2 дня назад я в этом убедился. У меня достаточно много графики рисуется на экране и когда начинается постоянная перерисовка, то появляются тормоза. Как я с этим не боролся, всё равно немного тормозило. Но как поставил serviceRepaints() мои проблемы исчезли :)
Кстати перерисовка заданной области даёт заметный прирост скорости
Наверх  Всего сообщений: 1145
Фильтровать сообщения
Поиск по теме
Файлы топика (226)