libgdx桌面应用程序中闪烁的对象图像移动

时间:2013-09-23 12:32:26

标签: libgdx

此代码在向左,向右,向下或向上移动时使图像闪烁。

public class MoveSpriteExample extends GdxTest implements InputProcessor  {
    Texture texture;
    SpriteBatch batch;
    OrthographicCamera camera;
    Vector3 spritePosition = new Vector3();
    Sprite sprite;

    public void create() {

        float w = Gdx.graphics.getWidth();
        float h = Gdx.graphics.getHeight();
        batch = new SpriteBatch();
        camera = new OrthographicCamera();
        camera.setToOrtho(false, w, h);

        texture = new Texture(Gdx.files.internal("data/TestImg.png"));

        texture.setFilter(TextureFilter.Linear, TextureFilter.Linear);
        sprite = new Sprite(texture);

        sprite.setSize(32, 32);
        spritePosition.y=100;

        sprite.setPosition(spritePosition.x,spritePosition.x);

    }

    public void render() {
        // set the clear color and clear the screen.
        Gdx.gl.glClearColor(1,1, 1, 1);
        Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    //      camera.apply(Gdx.gl10);

        sprite.setPosition(spritePosition.x,spritePosition.y);


        batch.begin();
        sprite.draw(batch);
        batch.end();


        if (Gdx.input.isKeyPressed(Keys.D)==true)
        {
            spritePosition.x += 2;
        }else if (Gdx.input.isKeyPressed( Keys.A)==true)
        {
            spritePosition.x -= 2;
        }
        else if (Gdx.input.isKeyPressed( Keys.Z)==true)
        {
            spritePosition.y -= 2;
        }
        else if (Gdx.input.isKeyPressed( Keys.W)==true)
        {
            spritePosition.y += 2;
        }

        //  camera.unproject(spritePosition.set(Gdx.input.getX(), Gdx.input.getY(), 0));
        // if a finger is down, set the sprite's x/y coordinate.

    }
}

1 个答案:

答案 0 :(得分:1)

是的它闪烁,因为你每帧移动2px。这就像120px一秒钟。您需要根据增量时间移动它。 (当时它总是2px,而不是smothy)

例如,你想将它每秒50像素移动到你按这样做的按下方向。

spritePosition.y += 50f*Gdx.graphics.getDeltaTime();

您确实根据deltatime而不是帧速率更新所有内容。 deltatime是最后一帧与此帧之间的时间。

常规您将使用屏幕来创建这样的设置。如果设置了屏幕,则会使用增量时间调用render方法。 (来自界面的方法)

你应该看一下steigert tutorial。它确实为您提供了一个非常好的libgdx开端。祝你好运。