Текстуры спрайтов ведут себя как одна и та же текстура. Java libgdx - PullRequest
0 голосов
/ 16 сентября 2018

Я пытаюсь сделать роботов, которые ходят влево или вправо, зависит от свойства из Tiledmap.Ходьба работает нормально, но у меня есть проблемы с текстурой облицовки.Текстура каждого робота обращена к текстуре последнего робота, как если бы они использовали одну и ту же текстуру.Чтобы установить текстуру, я использую region = Assets.instance.robotsAnimations.robotOne.getKeyFrame(timer);, и каждый робот использует одну и ту же текстуру вместо своей новой собственной текстуры.Как с этим бороться?

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Все роботы используют один и тот же TextureRegion.
У вас есть статический класс Assets, который содержит один экземпляр RobotsAnimations, и все роботы указывают на одну и ту же анимацию в RobotsAnimations.
Так, когда один переворачивает регионАнимации все остальные роботы используют также перевернутый.Создайте свою анимацию в классе роботов, чтобы у каждого робота была своя собственная анимация:

public RobotOne(PlayScreen playScreen, Rectangle rect, boolean right){
        ...

        timer = 0;
        TextureRegion[][] tmp = TextureRegion.split(Assets.instance.animationSheet,Assets.instance.animationSheet.getWidth() / cols, Assets.instance.animationSheet.getHeight() / rows);
        TextureRegion[] animationFrames = new TextureRegion[cols * rows];
        int index = 0;
        for (int i = 0; i < rows; i++){
            for (int j = 0; j < cols; j++){
                animationFrames[index++] = tmp[i][j];
            }
        }
        ownAnimation = new Animation<TextureRegion>(1/15f, animationFrames, Animation.PlayMode.LOOP)
        region = ownAnimation.getKeyFrame(timer);

        ...
    }

Когда вы используете TexturePacker, существует более простой способ создания анимации:
Libgdx Animation не работает

0 голосов
/ 16 сентября 2018

Это нормально, потому что вы вызываете метод getKeyFrame для обоих роботов с одинаковым таймером.Метод getKeyFrame возвращает по таймеру анимацию, соответствующую текстуре.Чтобы решить эту проблему, вы должны иметь отдельную переменную таймера для каждого робота и установить нулевой таймер при изменении направления движения.

...