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

libgdx桌面应用程序中闪烁的对象图像移动,libgdx,Libgdx,此代码使图像在向左、向右、向下或向上移动时闪烁 public class MoveSpriteExample extends GdxTest implements InputProcessor { Texture texture; SpriteBatch batch; OrthographicCamera camera; Vector3 spritePosition = new Vector3(); Sprite sprite; public

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

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.

    }
}

是的,它会闪烁,因为你每帧移动2次。这就像是每秒120像素。您需要根据增量时间移动它。(而且在没有烟雾的时候总是2倍)

例如,您希望每秒将其移动50px到按下的方向,您可以这样做

spritePosition.y += 50f*Gdx.graphics.getDeltaTime();
您会根据deltatime而不是帧速率更新所有内容。deltatime是最后一帧与此帧之间的时间

通常,您会使用屏幕创建这样的设置。如果设置了屏幕,则会使用增量时间调用渲染方法。(来自接口的方法)


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

是的,它确实会闪烁,因为你每帧移动它两次。这就像是每秒120像素。您需要根据增量时间移动它。(而且在没有烟雾的时候总是2倍)

例如,您希望每秒将其移动50px到按下的方向,您可以这样做

spritePosition.y += 50f*Gdx.graphics.getDeltaTime();
您会根据deltatime而不是帧速率更新所有内容。deltatime是最后一帧与此帧之间的时间

通常,您会使用屏幕创建这样的设置。如果设置了屏幕,则会使用增量时间调用渲染方法。(来自接口的方法)

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