2013-09-23 78 views
1

此代碼使圖像閃爍,同時向左,向右,向下或向上移動。在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

是的,它閃爍因爲你移動它每幀2px。這就像每秒120px。您需要根據增量時間來移動它。 (並且它總是2px,當時不是smothy)

例如,您希望將它每秒移動50像素到按下的方向,就像這樣做。

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

您根據deltatime而不是framerate更新所有內容。 deltatime是最後一幀和這個幀之間的時間。

定期你會使用屏幕來創建一個像這樣的設置。如果設置了屏幕,則渲染方法確實會用增量時間進行調用。 (從界面的方法)

你應該看看steigert tutorial。它確實給了你一個非常棒的開始,使用libgdx。祝你好運。

+1

非常感謝 –