0

我的处境很艰难。

我正在制作一个 2D 游戏,并且正在集成 box2Dlights 部分。

但是当我渲染我的时RayHandler,我有一个黑屏。 图片

这是另一张图片,我没有渲染灯光。现在没有灯。图片 我需要将 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。如果您需要更多详细信息,请不要害怕询问。我无法自己解决问题。

4

0 回答 0