#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
, в том месте, где он должен быть. Я пишу некоторый псевдокод в ответе