Повторение текстуры каждые 2 секунды в libGDX

#android #eclipse #timer #libgdx #task

#Android #eclipse #таймер #libgdx #задача

Вопрос:

Я разрабатываю игру в libgdx. Я хочу какой-то таймер, который говорит каждые 2 секунды рисовать текстуру. Я искал в Интернете, но не смог найти никакой хорошей помощи.

Ответ №1:

Самым простым способом было бы сохранить float timer и в render(float delta) методе, с помощью которого вы его увеличиваете delta . Если timer больше 2 ( delta время, прошедшее с последнего кадра, в секундах), уменьшите значение timer на 2 и draw ваше Texture .
Псевдокод:

 public void render(float delta) {
    // Clear your Screen here
    timer =delta;
    if (timer >= 2) {
        timer-=2;   // If you reset it to 0 you will loose a few milliseconds every 2 seconds.
        spriteBatch.draw(myTexture, position.x, position.y);
    }
 }  
  

Я полагаю, вы знаете, как использовать SpriteBatch и Texture , если нет, ищите его в документации libgdx.

Редактировать: render() метод имеет дельту с плавающей запятой в классах, которые реализуют Screen интерфейс. Вы можете получить доступ delta отовсюду, используя Gdx.Graphics.getDeltaTime() или Gdx.Graphics.getRawDeltaTime .
Исходная дельта является фактической delta , в то время как «нормальное» время дельты может быть сглажено в течение n кадров.

Еще одно редактирование:

Я полагаю, у вас есть все позиции, в которых вы хотите draw() Texture сохранить Array<Vector2> texPositions . Итак, необходимый вам код будет следующим (псевдокод, не копируйте и не вставляйте, но постарайтесь понять!):

  public void render(float delta) {
    // Clear your Screen here
    timer =delta;
    if (timer >= 2) {
        timer-=2;   // If you reset it to 0 you will loose a few milliseconds every 2 seconds.
        spriteBatch.draw(myTexture, position.x, position.y);
        texPositions.add(new Vector2(position.x, position.y));
    }
    for (Vector2 texPos : texPositions) {
         // Modify the position.x of the Texture by 5*delta, it moves along the x-axis
         texPos.add(5*delta, 0);
         spriteBatch.draw(myTexture, texPos.x, texPos.y);
    }

 }  
  

Комментарии:

1. Привет, спасибо за ваш комментарий. Если я набираю значение с плавающей запятой при рендеринге, я получаю сообщение об ошибке. Мой метод рендеринга переопределен.

2. Вместо этого вы можете использовать Gdx.graphics.getDeltaTime()

3. Вы не должны использовать Screen класс. Просто добавьте строку float delta = Gdx.graphics.getDeltaTime(); в начало вашего метода рендеринга.

4. Спасибо, код работает, но не совсем так, как я хотел. Через 2 секунды текстура отображается всего на 0,1 секунды. затем она исчезает. чего я действительно хочу, так это того, что через 2 секунды он должен нарисовать текстуру, и она должна оставаться там, а еще через 2 секунды он должен нарисовать другую такую же текстуру в том же месте. В моей текстуре есть код, который говорит двигаться вниз. итак, если вы понимаете, что это игра, в которой текстуры начинаются сверху и опускаются каждые 2 секунды. я надеюсь, что вы сможете помочь мне с его текстурой. Спасибо

5. @user2959870 Итак, пусть код будет таким, какой он есть, и под if добавьте SpriteBatch.draw() для вашего другого Texture , в том месте, где он должен быть. Я пишу некоторый псевдокод в ответе