libGDX SpriteBatch не рисует текстуру, хотя прямоугольник тела нарисован из Box2DDebugRenderer - PullRequest
0 голосов
/ 29 апреля 2020

Когда я запускаю программу, из отладочного рендера берется только тело. Однако ни одна из текстур не прорисована.

ниже - код моего класса состояния игры.

public static Box2DDebugRenderer debug;
    public static EntityManager entityManager;
    public static Tile[][] tiles;

    public static int spawnX, spawnY;
    public static int worldWidth, worldHeight;

    public static World world;
    public static RayHandler rayHandler;

    public GameState(StateManager stateManager) {
        super(stateManager);

        world = new World(new Vector2(0, -16f), false);
        rayHandler = new RayHandler(world);
        debug = new Box2DDebugRenderer();

        createPlayer();
        rayHandler.setAmbientLight(.2f);
    }

    public void createPlayer() {
        entityManager = new EntityManager(c, new Player(c, spawnX*Tile.TILESIZE, spawnY*Tile.TILESIZE + 200, 50, 100, 1f));
    }

    public void tick(float delta) {
        world.step(1/60f, 6, 2);
        rayHandler.update();
        entityManager.tick();
        batch.setProjectionMatrix(camera.combined);
        rayHandler.setCombinedMatrix(camera.combined.cpy().scl(PPM));

    }

    public void render() {
        for(int y = 0; y < tiles.length; y++) {
            for(int x = 0; x < tiles[y].length; x++) {
                if(tiles[x][y] != null)
                    tiles[x][y].render(batch);
            }
        }
        rayHandler.updateAndRender();
        entityManager.render(batch);
        if(ControlCenter.DEBUG)
            debug.render(world, camera.combined.scl(PPM));
    }

ниже - код моего класса игрока.

public class Player extends Creature {

    private PointLight light;

    public Player(ControlCenter c, float x, float y, int width, int height, float density) {
        super(c, x, y, width, height, density);
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;
        speed = 5;

        type.add("player");
        light = new PointLight(GameState.rayHandler, 100, Color.BLACK, 250/PPM,
                body.getPosition().x,
                body.getPosition().y);
    }

    @Override
    public void tick() {
        light.setPosition(body.getPosition().x,
                body.getPosition().y);
        inputUpdate();
        cameraUpdate();
    }

    public void inputUpdate() {
        int horizontalForce = 0;
        if(Gdx.input.isKeyPressed(Input.Keys.A)) {
            horizontalForce = -1;
        }
        if(Gdx.input.isKeyPressed(Input.Keys.D)) {
            horizontalForce = 1;
        }
        if(Gdx.input.isKeyJustPressed(Input.Keys.W)) {
            body.applyForceToCenter(0, 1000, false);
        }
        if(Gdx.input.isKeyPressed(Input.Keys.P)) {
            System.exit(1);
        }
        body.setLinearVelocity(horizontalForce*speed, body.getLinearVelocity().y);
    }

    public void cameraUpdate() {
        Vector3 position = ControlCenter.camera.position;
        position.x = body.getPosition().x * PPM; //getting back to scale by *PPM
        position.y = body.getPosition().y * PPM;
        ControlCenter.camera.position.set(position);

        ControlCenter.camera.update();
    }

    public void render(SpriteBatch batch) {
        batch.draw(Images.temp, body.getPosition().x*PPM - width/2,
                body.getPosition().y*PPM - height/2, width, height);
    }
}

при запуске программы ошибки не отображаются. Я не уверен, что это моя настройка камеры или что-то.

ниже приведен код настройки моей камеры в основном классе приложений:

float width = Gdx.graphics.getWidth();
float height = Gdx.graphics.getHeight();

camera = new OrthographicCamera();
camera.setToOrtho(false, width/SCALE, height/SCALE);
...