(LibGDX) Наблюдаю некоторые заикания даже при перемещении простого изображения.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 (LibGDX) Наблюдаю некоторые заикания даже при перемещении простого изображения.

Сообщение Anonymous »

Недавно я начал разрабатывать игру с использованием LibGDX, потому что, учитывая встроенную в него OpenGL, я думал, что могу ожидать более высокой производительности рендеринга, чем от игр, созданных с использованием собственной библиотеки Java.
Однако я сразу же столкнулся с проблемой. Я протестировал перемещение изображения логотипа BadLogic по умолчанию и заметил, что оно движется не совсем плавно. Он не слишком тормозит или что-то в этом роде, но я определенно часто наблюдаю некоторые небольшие подтормаживания.
Вот мой код:

Код: Выделить всё

package com.mygdx.game;

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.utils.ScreenUtils;

public class MyGdxGame extends ApplicationAdapter {
SpriteBatch batch;
Texture img;
Vector2 pos;
float speed;

@Override
public void create () {
batch = new SpriteBatch();
img = new Texture("badlogic.jpg");
pos = new Vector2();
speed = 300f;
}

@Override
public void render () {

float deltaTime = Gdx.graphics.getDeltaTime();
//System.out.println("deltaTime:"+deltaTime);

if(Gdx.input.isKeyPressed(Input.Keys.LEFT)){
pos.x -= deltaTime * speed;
}
if(Gdx.input.isKeyPressed(Input.Keys.RIGHT)){
pos.x += deltaTime * speed;
}

ScreenUtils.clear(1, 0, 0, 1);
batch.begin();
batch.draw(img, pos.x, pos.y);
batch.end();
}

@Override
public void dispose () {
batch.dispose();
img.dispose();
}
}
Как я переместил логотип:
  • Получите разницу времени в методе рендеринга с помощью:
    float deltaTime = Gdx.graphics.getDeltaTime();
  • На основе ввода клавиш (ВЛЕВО/ВПРАВО) умножьте deltaTime на значение скорости и прибавьте к значению x логотипа;
    Розыгрыш логотип основан на обновленном x.
Изображение

Это все, что я сделал. Я также попробовал добавить фиксированное значение (pos.x += 5f;) без использования дельты времени, но результат был тот же. Я все еще мог видеть небольшие заикания в его движении.
Затем я распечатал deltaTime в каждом цикле и кое-что заметил.
Изображение

Как видно из изображения, длина каждого кадра равна около 0,0167 до 0.0183.
Это подводит меня к двум вопросам:
  • FPS проекта установлен на 60, поэтому каждый кадр должен быть 1/60 = 0,0166. ... второй. Таким образом, каждый кадр занимает немного больше времени, чем предполагалось.
  • Возможно, это более важно, но... разница составляет примерно 0,0015 секунды (0,0167 – 0,0183). между кадрами, и я подозреваю, что это может быть причиной заиканий.
Для справки, вот что я получаю из игрового цикла того, что я построил по умолчанию. Java-библиотека (Thread, System.nanoTime и т. д.)
Изображение

В этом случае каждый кадр занимает от 0,0166665 до 0,166668, поэтому разница составляет около 0,0000003, что намного меньше, чем LibGDX 0,0015. И изображение движется более плавно с помощью этого игрового цикла.
Я не совсем уверен, является ли это причиной заиканий или на это есть другие факторы, но я пытаюсь это выяснить. run — довольно простая программа, поэтому я немного запутался. Как я сказал вначале, главной привлекательностью LibGDX для меня была лучшая производительность рендеринга, но я этого не получаю.
Я что-то упускаю? Если не считать этой проблемы, мне очень нравится LibGDX, поэтому я надеюсь решить ее и продолжить разработку с ее помощью. Будем очень признательны за любую помощь или понимание этого вопроса!

Подробнее здесь: https://stackoverflow.com/questions/793 ... mple-image
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Наблюдаю некоторое заикание даже при перемещении простого изображения.
    Anonymous » » в форуме JAVA
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Как избежать заикания при анимировании просмотра вверх, используя смещение или положение?
    Anonymous » » в форуме IOS
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • (Java LibGDX) Как изменить размер текстур в LibGDX?
    Anonymous » » в форуме JAVA
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • (Java LibGDX) Как изменить размер текстур в LibGDX?
    Anonymous » » в форуме Android
    0 Ответы
    30 Просмотры
    Последнее сообщение Anonymous
  • Почему некоторые классы CSS Tailwind не работают, а некоторые даже несмотря на то, что файл конфигурации специфичен?
    Anonymous » » в форуме CSS
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»