четверг, 4 октября 2012 г.

ФПС и другая техническая текстовая информация на экране.

Возьмем наш предыдущий проект и добавим в верхний левый угол экрана пару строчек текстовой информации.

Для этого нам понадобится файл шрифта. Я взял ttf, хотя в движке есть возможность добавлять шрифты разных форматов.
Создадим в папке assets проекта папочку fonts. И забросим туда наш шрифт. В моем случае это некий Postmodern_One.ttf. Ну а дальше дописываем ф код то, что я тут выложил. На самом деле это почти полная копия туториала с движка. За одним исключением. При получении значений ФПС и прошедших секунд и выводе этого на экран - нифига не работало. До тех пор, пока я не поставил (int) в 31 и 32 строчках.
//.............
private ITexture mFontTexture;
private Font mFont;
//.............
protected void onCreateResources()
    {     
     FontFactory.setAssetBasePath("fonts/");
     this.mFontTexture = new BitmapTextureAtlas(this.getTextureManager(), 256, 256, TextureOptions.BILINEAR);
     
     this.mFont = FontFactory.createFromAsset(this.getFontManager(), mFontTexture, this.getAssets(), "Postmodern_One.ttf", 16, true, Color.WHITE);
  this.mFont.load();
//............
}
protected Scene onCreateScene()
    {
//....................
     Scene scene = new Scene();
//....................        
        final FPSCounter fpsCounter = new FPSCounter();
        this.mEngine.registerUpdateHandler(fpsCounter);
        
        // *** On-screen tech-info ***
        final Text elapsedText = new Text(4,4 , this.mFont, "Seconds elapsed: XXXXX", "Seconds elapsed: XXXXX".length(), this.getVertexBufferObjectManager());
  final Text fpsText = new Text(4,24, this.mFont, "FPS: XXXXX", "FPS: XXXXX".length(), this.getVertexBufferObjectManager());
  scene.attachChild(elapsedText);
  scene.attachChild(fpsText);
  scene.registerUpdateHandler(new TimerHandler(1 / 2.0f, true, new ITimerCallback() {
   //@Override
   public void onTimePassed(final TimerHandler pTimerHandler) {
    elapsedText.setText("Seconds elapsed: " + (int)mEngine.getSecondsElapsedTotal());
    fpsText.setText("FPS: " + (int)fpsCounter.getFPS());
   }
  }));
//......................
}

5 комментариев:

  1. спасибо за подсказку про (int)fpsCounter.getFPS();
    а то ломал голову почему выводит мусор !

    ОтветитьУдалить
  2. В Ваших примерах всё хорошо, но мало исходников, новичку очень тяжело разобраться.
    Исходник:

    https://www.dropbox.com/s/2nboa7tng1iz58r/RTYPE-grav_sensor%5BGLES2%5DBG%2BText.rar

    Андрей Sapfil, этот блог нужен! И если Вы будете им заниматься очень скоро его смогут найти много людей.

    ОтветитьУдалить
    Ответы
    1. ТО есть вы хотите видеть весь проект в текущем состоянии? Но к сожалению, часть проекта представляет собой, извините, "говнокод". Не то, чтобы он сильно страшный, но от идеала далековат. Если я буду еще и тратить время на постоянный рефакторинг - я никогда не закончу проект, а статьи буду писать раз в месяц или реже.

      Хотя, с другой стороны, ничего не мешает выложить проект "AS IS". Если такой подход поможет, почему бы нет... Давайте заведу традицию выкладывать большой RAR в конце каждого поста, если людям так хочется на него посмотреть.

      Я не думаю, что это сильно поможет новичку. Ведь если в проекте уже около 10 java-файлов - человеку со стороны довольно тяжко будет разобрать его по полочкам в своей голове.

      А к ВАМ ЛИЧНО у меня просьба. Вы создаете впечатление сведущего человека. Скоро буду выкладывать пост про парсеры - там и выложу свой исходник полностью. Если не трудно - пробегитесь по нему и дайте пару рекомендаций - как навести порядок. Буду благодарен :)

      Удалить
    2. К сожалению я совсем недавно изучаю программирование (около 1,5 месяца).
      Просто многие моменты в Ваших уроках приходится долго разбирать и искать решение в сети т.к. нет исходников.
      Спасибо за Ваш труд.

      Удалить