此代码在向左,向右,向下或向上移动时使图像闪烁。
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.
}
}
答案 0 :(得分:1)
是的它闪烁,因为你每帧移动2px。这就像120px一秒钟。您需要根据增量时间移动它。 (当时它总是2px,而不是smothy)
例如,你想将它每秒50像素移动到你按这样做的按下方向。
spritePosition.y += 50f*Gdx.graphics.getDeltaTime();
您确实根据deltatime而不是帧速率更新所有内容。 deltatime是最后一帧与此帧之间的时间。
常规您将使用屏幕来创建这样的设置。如果设置了屏幕,则会使用增量时间调用render方法。 (来自界面的方法)
你应该看一下steigert tutorial。它确实为您提供了一个非常好的libgdx开端。祝你好运。