RayHandler не идет с миром Box2D - PullRequest
0 голосов
/ 18 ноября 2018

У меня сложная ситуация.

Я делаю 2D-игру, и я нахожусь на стадии интеграции части box2Dlights.

Но когда я рендеринг моего RayHandlerУ меня черный экран.image

Вот еще одно изображение, на котором я не отрисовываю свои огни.Теперь нет света. image Мне нужно смешать столкновение Box2D и Box2Dlights. Обратите внимание :

  • Все мои коробки сделаны в единицах, равных 1, поэтому одна комната имеет длину 16 квадратов.
  • Весь весь мир увеличен на setToOrtho((16 - 1.875f) / Gdx.graphics.getHeight()), где 16 - размер плитки.
  • Если бы я масштабировал свой размер плитки, я бы хотел, чтобы этот материал работал.

Весь кодЭто сложно, поэтому я отправляю только классы GameScreen и GameMap:

@Override
public void show() {
    InstanceVars inst = InstanceVars.getInstance();
    inst.world = new World(new Vector2(0, 0f), true);
    inst.engine = new Engine();
    inst.handler = new RayHandler(inst.world);

    LevelCreator creator = new LevelCreator("level_def.cfg");

    try {
        gameWorld = creator.createNewLevel();
        gameWorld.start();
    } catch (FileCorruptedException e) {
        e.printStackTrace();
    }
}

@Override
public void render(float delta) {

    gameWorld.render();
}

@Override
public void resize(int width, int height) {
    gameWorld.resize(width, height);
}

@Override
public void dispose() {
    gameWorld.dispose();
    InstanceVars.getInstance().dispose();
} 

для GameScreen.java и

private World physWorld = InstanceVars.getInstance().world;
private Box2DDebugRenderer physRender = new Box2DDebugRenderer();
private OrthographicCamera cam = new OrthographicCamera();
private RayHandler lights = new RayHandler(physWorld);
private PlayerController controls;
private float STD_ZOOM = ((float) CELL_SIZE + 16) / Gdx.graphics.getHeight();
private Body playerBody;

public GameMap() {
    cam.zoom = STD_ZOOM;
}

public void start() {
    GameObject player = (GameObject) getProperties().get("ent_player");
    playerBody = player.getComponent(PhysicsComponent.class).getBody();

    controls = new PlayerController();
    Gdx.input.setInputProcessor(controls);
    physWorld.setContactListener(new CollisionInteractor(InstanceVars.getInstance().engine));

    PointLight light = new PointLight(lights, 1000, Color.GOLDENROD, 500, playerBody.getPosition().x, playerBody.getPosition().y);
}

public void render() {
    updatePlayer();
    physWorld.step(1/60f, 8, 2);
    updateCamera();

    physRender.render(physWorld, cam.combined);
//        lights.updateAndRender();
}

private void updatePlayer() {
    if (controls.up) playerBody.setLinearVelocity(playerBody.getLinearVelocity().x, -controls.speed);
    else playerBody.setLinearVelocity(playerBody.getLinearVelocity().x, controls.down ? controls.speed : 0);

    if (controls.down) playerBody.setLinearVelocity(playerBody.getLinearVelocity().x, controls.speed);
    else playerBody.setLinearVelocity(playerBody.getLinearVelocity().x, controls.up ? -controls.speed : 0);

    if (controls.left) playerBody.setLinearVelocity(-controls.speed, playerBody.getLinearVelocity().y);
    else playerBody.setLinearVelocity(controls.right ? controls.speed : 0, playerBody.getLinearVelocity().y);

    if (controls.right) playerBody.setLinearVelocity(controls.speed, playerBody.getLinearVelocity().y);
    else playerBody.setLinearVelocity(controls.left ? -controls.speed : 0, playerBody.getLinearVelocity().y);
}

public void resize(float width, float height) {
    STD_ZOOM = ((float) CELL_SIZE - 1.875f) / Gdx.graphics.getHeight();

    cam.setToOrtho(true, width, height);
}

private void updateCamera() {
    cam.position.set(playerBody.getPosition(), 0);
    cam.update();
}

public void dispose() {
    super.dispose();
    physWorld.dispose();
    physRender.dispose();
}

для GameMap.java .Если вам нужно больше деталей, не бойтесь спрашивать.Я не могу решить проблему самостоятельно.

...