2016-05-26 2 views
2

Я возился с моим настраиваемым игровым движком, который использует API Java2D для рисования на холсте (активный рендеринг).Java2D основанный игровой движок отстает, когда нет ввода

То, что я заметил, это то, что простая сцена с квадратным перемещением становится более гладкой, если я либо активно нажимаю клавиши на клавиатуре своего ноутбука, либо передвигаю мышь вокруг (внутри границ рамки). Если я ничего не делаю, движение кажется вялым.

В моем игровом движке используется фиксированная временная рендеринга, где на один чертеж может появляться несколько обновлений.

Моя структура кадра: JFrame имеет дочерний холст, в котором используется поток для выполнения обновления/рендеринга.

Операционная система - это Linux, может быть проблема с фокусом? Счетчик FPS сообщает о том же fps в обоих случаях.

Мой код цикла заключается в следующем:

while(active) { 
    g = (Graphics2D) bs.getDrawGraphics(); 
    now = System.currentTimeMillis(); 
    double delta = now - prev; 
    while(delta >= 0) { 
     update(dt); 
     updateTicks++; 
     delta -= dt; 
    } 
    render(g); 
    bs.show(); 
    if(System.currentTimeMillis() - fpsTimer > 1000) { 
     fpsTimer += 1000; 
     System.out.printf("FPS: %d\n", updateTicks); 
     updateTicks = 0; 
    } 
    prev = now; 
    try { 
     Thread.sleep(5); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 

Я не думаю, что это проблема, хотя.

обновление: есть небольшое падение кадров в секунду: 5/7 обновлений в секунду, если не обеспечить ввод в frame..Something происходит за кулисами ..

+0

Вы проверили временной интервал между тиками, чтобы быть уверенным, что это определенно фиксированные шаги времени? – ManoDestra

+0

Да, это фиксированный временной шаг, потому что я применяю его в своем коде. Но это не главная проблема. Я спрашиваю себя, почему увеличение плавности, если я перемещаю мышь над рамкой. – Warrior

+0

Я подозреваю, что он заставляет дополнительные перерисовки холста путем аннулирования области из-за того, что мышь находится над холстом/кадром. – ManoDestra

ответ

0

Проверка на какую нить ваша логическая обработка ввода.

+0

AWT Event dispatch thread обрабатывает входной файл, поэтому это другой поток. Я попытался отключить логику обработки событий, и это поведение продолжает проявляться. – Warrior

+0

Попробуйте перерисовать форму. –

 Смежные вопросы

  • Нет связанных вопросов^_^