LibGDX桌面闪烁

时间:2013-11-27 19:44:55

标签: java libgdx desktop flicker

此问题之前已发布,但我在libGdx中闪烁的精灵有问题。 我已经在stackoverflow,谷歌等地方到处寻找,但没有任何帮助我。

精灵在移动时只会闪烁。当我慢慢移动它时,它会闪烁得更少,但是当它快一点时它会闪烁很多。这非常烦人,而且无法播放。

这是我的代码:

package com.wouter.DuelArena;

import com.badlogic.gdx.Game;
import ...

public class DuelArena extends Game {

Sprite player;
float playerX;
float playerY;

boolean fireBool;
Sprite fireSprite;
Texture fireText;

OrthographicCamera cam;

Texture playerTexture;
SpriteBatch batch;

@Override
public void create() {      
    fireBool = false;
    fireText = new Texture("data/droplet.png");
    fireText.setFilter(TextureFilter.Linear, TextureFilter.Linear);
    fireSprite = new Sprite(fireText);

    playerTexture = new Texture("data/bucket.png");
    playerTexture.setFilter(TextureFilter.Linear, TextureFilter.Linear);

    player = new Sprite(playerTexture);     
    player.setSize(70, 128);
    playerX = 0f;
    playerY = 0f;

    cam = new OrthographicCamera();
    cam.setToOrtho(false, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());

    batch = new SpriteBatch();
}

@Override
public void dispose() {
    super.dispose();
}

@Override
public void render() {      

    Gdx.gl.glClearColor(1,  1,  1,  1);
    Gdx.gl.glClear(Gdx.gl10.GL_COLOR_BUFFER_BIT);

    cam.update();
    batch.setProjectionMatrix(cam.combined);

    batch.begin();


    player.draw(batch);
    input();
    update();

    batch.end();

    super.render();
}
private void update()
{
    player.setPosition(playerX, playerY);

    if (fireBool)
    {
        fireSprite.setX(fireSprite.getX() + 300 * Gdx.graphics.getDeltaTime());
        fireSprite.draw(batch);

        if (fireSprite.getX() > 1280)
            fireBool = false;
    }
}
private void input()
{
    if (Gdx.input.isKeyPressed(Keys.LEFT) && player.getX() > 0)
    {
        playerX -= 200f * Gdx.graphics.getDeltaTime();

    }
    if (Gdx.input.isKeyPressed(Keys.RIGHT) && player.getX() < 1280)
    {
        playerX += 200f * Gdx.graphics.getDeltaTime();
    }
    if (Gdx.input.isKeyPressed(Keys.SPACE) && !fireBool)
    {
        fireBool = true;
        fireSprite.setPosition(playerX, playerY + 35f * Gdx.graphics.getDeltaTime());
    }
}

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

@Override
public void pause() {
    super.pause();
}

@Override
public void resume() {
    super.resume();
}

}

事先谢谢!

1 个答案:

答案 0 :(得分:2)

问题是调用super.render的位置:

super.render();

Game类中,super.render需要是代码中的第一行,而不是最后一行,如下所示:

@Override
public void render(){
    super.render(); //<-----

    Gdx.gl.glClearColor(1,  1,  1,  1);
    Gdx.gl.glClear(Gdx.gl10.GL_COLOR_BUFFER_BIT);
    cam.update();
    batch.setProjectionMatrix(cam.combined);

    batch.begin();
    player.draw(batch);
    input();
    update();
    batch.end();
}

如果你在Game中覆盖render方法,那么把它放在那里实际上非常重要,因为那是调用当前Screen的渲染的那个。你没有在这个例子中使用Screens,但是如果你正在使用Game,你可能应该(将:p)。