Libgdx dr aws объекты черные вместо цветных - PullRequest
0 голосов
/ 26 марта 2020

У меня есть звездное поле для игры в боковой скроллер. Звезды движутся справа налево. Существует три типа звезд: быстрый, нормальный и медленный, имитирующий эффект параллакса. В зависимости от их типа они имеют разные цвета и скорости.

Пока все работает нормально, но звезды остаются черными.

Код звездного поля:

public class Starfield extends AbstractGameObject {

    public static final String TAG = Starfield.class.getName();
    private Array<Star> stars;

    public enum STAR_TYPE {
        FAST(255, 255, 255),
        NORMAL(190, 190, 190),
        SLOW(120, 120, 120);

        private int color;

        private STAR_TYPE(int r, int g, int b) {
            int R = r << 24;
            int G = g << 16;
            int B = b << 8;
            color = R | G | B | 0xff;
            //color = r << 24 | g << 16 | b << 8 | 0xff;
        }

        public static STAR_TYPE getRandomType() {
            return values()[MathUtils.random(0, values().length - 1)];
        }

        public int getColor() {
            return color;
        }
    }

    public Starfield() {
        init();
    }

    private void init() {
        stars = new Array<Star>();

        for(int i = 1; i <= Constants.COUNT_STARS; i++){
                stars.add(new Star());
        }
    }

    @Override
    public void update(float deltaTime) {
        super.update(deltaTime);

        for(Star star : stars){
            star.update(deltaTime);
        }
    }

    @Override
    public void render(SpriteBatch batch) {
        for (Star star : stars)
            star.render(batch);
    }

    public class Star extends AbstractGameObject {

        private STAR_TYPE starType;
        private Texture texStar;

        public Star() {
            init();
        }

        private void init() {
            Pixmap pixmap;

            position.set(MathUtils.random() * Constants.WORLD_WIDTH, MathUtils.random() * Constants.WORLD_HEIGHT);
            dimension.set(0.02f, 0.02f);

            starType = STAR_TYPE.getRandomType();

            pixmap = new Pixmap((int) dimension.x, (int) dimension.y, Pixmap.Format.RGBA8888);
            pixmap.setColor(starType.getColor()); 
            pixmap.fill();
            texStar = new Texture(pixmap);

            switch (starType) {
                case FAST:
                    velocity.set(-0.5f, 0);
                    break;
                case NORMAL:
                    velocity.set(-0.2f, 0);
                    break;
                case SLOW:
                    velocity.set(-0.1f, 0);
                    break;
            }
        }

        @Override
        public void update(float deltaTime) {
            super.update(deltaTime);

            if(position.x <= 0)
                position.x = Constants.WORLD_WIDTH;
        }

        @Override
        public void render(SpriteBatch batch) {
            batch.draw(texStar, position.x, position.y, dimension.x, dimension.y);
        }
    }
}

Мне было интересно, работает ли сдвиг бит правильно, но работает ли он. Затем я вручную изменил цвет на что-то вроде pixmap.setColor(1, 0, 0, 1);. Звезды остались черными. Я отладил метод рендеринга и заглянул в texStar. Растровое изображение сохраняется правильно, включая ранее выбранный цвет (я могу исключить возможность переопределения цвета в других частях моего кода). Я подозревал, что метод рисования был неправильным, и вместо этого использовал batch.draw(texStar, position.x, position.y);. Но потом все звезды почему-то исчезли. Я не понимаю почему, потому что текстура должна иметь размер растрового изображения (0.02f). Общий метод рендеринга renderWorld выглядит следующим образом:

private void renderWorld (SpriteBatch batch) {
        worldController.camerHelper.applyTo(camera);
        batch.setProjectionMatrix(camera.combined);
        batch.begin();
        batch.draw(texBorder, 0, 0);
        worldController.starfield.render(batch);
        batch.end();
    }

Кстати, текстура texBorder, состоящая из пары цветных прямоугольников, нарисована просто отлично. Любые мысли, что может быть причиной такого поведения?

1 Ответ

0 голосов
/ 26 марта 2020

Проблема была в следующей строке:

pixmap = new Pixmap((int) dimension.x, (int) dimension.y, Pixmap.Format.RGBA8888);

Размер растрового изображения - целое число. dimension.x и dimension.y намного меньше 1. Таким образом, после наложения они равны 0. Изменение размеров на 1 делает звезды яркими.

...