簡體   English   中英

未繪制Box2dlights紋理

[英]Box2dlights textures isn't drawn

我在我的項目中使用box2dlights,似乎出現了問題。 當我在程序中實際使用RayHandler時,僅繪制燈光,而沒有紋理。 因此,當我從渲染循環中刪除RayHandler時,一切正常。 我希望先繪制燈光,然后在其上方繪制紋理。 我該如何達到? 這是代碼:

public class GameScreen implements Screen {

private Core core;

private SpriteBatch batch;
private Sprite spiderSprite;
private OrthographicCamera camera;
private RayHandler rayHandler;
private Box2DDebugRenderer debugRenderer;

private World world;
private Body spider, prop;
private PointLight spiderLight;

private Stage stage;

private boolean paused, lost, check;
private int pointsCount;
private float time;


public GameScreen(Core c) {
    core = c;

    stage = new Stage();

    batch = new SpriteBatch();
    camera = new OrthographicCamera();
    camera.setToOrtho(false, core.SCREEN_WIDTH, core.SCREEN_HEIGHT);
    batch.setProjectionMatrix(camera.combined);
    debugRenderer = new Box2DDebugRenderer();

    spiderSprite = core.chars.createSprite("spider");

    world = new World(new Vector2(.0f, -10.0f), true);

    BodyDef spiderDef = new BodyDef();
    spiderDef.type = BodyDef.BodyType.DynamicBody;
    spiderDef.position.set(core.SCREEN_WIDTH / 2, core.SCREEN_HEIGHT / 2);
    spider = world.createBody(spiderDef);
    CircleShape shape = new CircleShape();
    shape.setRadius(core.SCREEN_WIDTH / 15);
    spider.createFixture(shape, .1f);

    BodyDef propDef = new BodyDef();
    propDef.type = BodyDef.BodyType.StaticBody;
    propDef.position.set(core.SCREEN_WIDTH / 2, core.SCREEN_HEIGHT);
    prop = world.createBody(propDef);
    CircleShape propShape = new CircleShape();
    propShape.setRadius(0.1f);
    prop.createFixture(propShape, 1.0f);

    RopeJointDef rope = new RopeJointDef();
    rope.bodyA = spider;
    rope.bodyB = prop;
    rope.maxLength = core.SCREEN_HEIGHT / 2;
    world.createJoint(rope);

    rayHandler = new RayHandler(world);
    rayHandler.setAmbientLight(.5f);

    spiderLight = new PointLight(rayHandler, 100, Color.WHITE, core.SCREEN_WIDTH, 100, 100);
    spiderLight.attachToBody(spider);
}

@Override
public void show() {
    Gdx.input.setInputProcessor(stage);
    stage.addAction(Actions.fadeIn(0.85f));
}

@Override
public void render(float delta) {
    clearScreen();
    batch.setProjectionMatrix(camera.combined);
    batch.begin();
    if (!lost && !paused) {
        updateWorld();
        updateSpider();
    }
    drawSpider();
    stage.act();
    stage.draw();
    batch.end();
}

private void clearScreen() {
    Gdx.gl.glClearColor(0, 0, 0, 0);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

}

private void updateSpider() {
    //spider.setLinearVelocity(Gdx.input.getAccelerometerX() > 0 ? 50.0f : -50.0f, 0.0f); 
    float angle = MathUtils.radiansToDegrees * MathUtils.atan2(core.SCREEN_HEIGHT - spider.getPosition().y, core.SCREEN_WIDTH / 2 - spider.getPosition().x) - 90;
    spiderSprite.setPosition(spider.getPosition().x, spider.getPosition().y);
    spiderSprite.setRotation(angle);
}

private void drawSpider() {
    spiderSprite.draw(batch);
    rayHandler.render();
}

private void updateWorld() {
    world.step(1/60f, 6, 2);
    rayHandler.setCombinedMatrix(camera);
    rayHandler.update();
    time += Gdx.graphics.getDeltaTime();
}

}

我還刪除了與該問題無關的代碼的冗余部分。

Stage具有自己的batch以及自己的.begin().end() 您應該調用batch.end(); 在調用stage.draw();之前stage.draw();

我發現了。 RayHandler.render()不能與被調用batch.begin()batch.end()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM